假设在你的情况下这是可行的,你可以选择一个经典的空间交易时间策略。 (我假设你使用的是OO语言 - 这个想法对于非OO语言也适用,但是需要更多的努力来确保同一矩阵的不同表示保持同步)。
而不是将矩阵表示为数组(或与表示一起)将它保持为一组非零值?
那么,你是代表为:
|5 6 9 2|
|1 8 4 0|
|5 8 0 0|
|7 0 0 0|
将成为(或存储为)
1,1=5
1,2=6
1,3=9
...
4,1=7
,如果这是可行的,你也可以在两(上下分割该套对角线)
在第一基质的情况下
这样:
|5 6 9 2|
|1 8 4 9|
|5 8 1 6|
|7 6 3 2|
是:
UpperMap -
1,1=5
1,2=6
1,3=9
...
4,1=7
Lower Map-
2,4=9
3,3=1
...
4,4=2
在这种情况下,你的测试将是“询问是否较低的HashMap是空的”。如上所述,如果您需要在矩阵上执行更多的“传统”操作,您可以将它与2位地图一起存储为数组,并且在矩阵不是不可变的情况下,您将不得不提供方法改变“细胞”值。
另一个折衷(除了空间)是创建一个新的矩阵需要更多的CPU时间。但如果你不经常创建和修改这些东西,而且经常需要测试较低的对角线,这可能是值得的。
一个更极端的方法:
对于每个矩阵建立一个位图表示的(非零细胞是1,零细胞得到一个0),并使用逻辑操作以检查部的“空”。
您是否在寻找O(n ** 2)以外的天真解决方案来检查所有较低的条目是否都是0? – outis 2010-04-16 05:13:13
我编辑了我的问题Plz看看这个! – Sanju 2010-04-16 07:43:21
这是功课吗? – 2010-04-16 07:48:44