2016-10-09 157 views
0

我想知道什麼會比其他解決方案執行時更快,哪些內存更少內存。2維陣列vs簡單陣列

當我自己問這個問題時,我正在做數獨。正如你所知,數獨是一個9×9的網格數組,所有圍繞數獨的解算器都在實現數組[9] [9]。我認爲這是因爲它看起來像你習慣玩的網格。

我的問題很簡單,因爲網格始終是一個方形(例如:9×9),什麼是之間的最快和最低的內存消耗: - 2Dimensions:數組[9] [9] - 單一維度:數組[81 ]

在兩種情況下計算訪問值(如果數組從第0個索引開始,並且您需要第9個和第9個網格中的第5個和第6個行): - 2D Array的座標幾何(例如:Array [5-1 ] [6-1]) - 單個計算位置(Array [((6-1)* 9)+(5-1)])

有沒有什麼方法可以測試?

+1

不要擔心。只需使用該算法最方便的結構即可。除非你擁有數百萬個網格,否則不會有任何改變。 – Barmar

+1

但是要回答你的問題,單個數組將會減少內存,因爲它只包含81個值,而數組數組包含81個值和9個指針。 – Barmar

+0

當然,這就是我告訴自己,但只是好奇心,如果有一天,當網格的大小,它應該有區別 – aviel

回答

0

正如評論一個陣列方法是最便宜的(內存明智)

至於速度,timeit說是你的朋友:

import timeit 



one_array = timeit.timeit(setup="a = [0]*81;s=3;x=2;y=1;", stmt='a[s*9+y*3+x]') 
multi_array = timeit.timeit(setup="a = [[[0]*3]*3]*9;s=3;x=2;y=1;", stmt='a[s][x][y]') 


print (one_array) 
print (multi_array) 
if one_array < multi_array: 
    print('one_array is faster') 
else: 
    print("multi_array is faster!") 

0.21741794539802967

0.13626013606615175

multi_array更快!

至少在蟒蛇...