假設在你的情況下這是可行的,你可以選擇一個經典的空間交易時間策略。 (我假設你使用的是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