我需要存储许多矩阵,然后通过检索添加的最后一个矩阵和前一个矩阵来比较其中的一些矩阵。
我使用以下方法创建这些矩阵:
int[][] matrix = new int[10][10];
我的矩阵只有0,1s和2s。我想根据每个职位的值比较矩阵。在我的例子中,两个矩阵是不同的,只要至少一个位置有不同的值。每个矩阵都是根据通过反应检测到的元素来创建的。没有移动的元素是2s,添加的元素是1s,没有任何内容的元素是0。
例如:
1 2 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
和
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
就不一样了。
存储的矩阵数不是固定的。如果我已经创建了10个矩阵,那么最有效的存储和比较它们的方法是什么?
我在StackOverFlow和其他论坛上搜索过这个,但是找不到答案
发布于 2015-07-22 09:12:45
由于矩阵中的许多(可能大多数)条目都是零,因此按原样存储它们是效率低下的。您需要使用稀疏矩阵表示。下面是一个非常详尽的矩阵库列表,其中许多允许稀疏表示。
它们中的大多数还将有一个equals()
方法,您可以重写该方法以适应您的定义(如果它们的定义已经与您的定义相同)。
最后,由于只需要比较最后两个矩阵,所以需要某种队列。我会维护一个列表,并为此使用一个ListIterator
。
发布于 2015-07-22 09:08:05
由于您没有提供任何代码,我只能帮助您的设计。因此,以下是一些设计技巧:
int[][] matrix = new int[5][3];
,这给了你一个5x3矩阵。ArrayList<int[][]> matrices = new ArrayList<>();
发布于 2015-07-22 09:16:58
我会编写一个不同的类Matrix
,并重写equals
和hashcode
方法。
如果矩阵中的大多数值为零,则可能需要使用稀疏矩阵表示。
https://stackoverflow.com/questions/31569320
复制相似问题