2016-10-09 159 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更快!

至少在蟒蛇...