2016-10-09 12 views
0

実行時間が短く、他のソリューションよりもメモリコストが低いことを知りたい。2次元配列と単純配列の比較

私はこの質問を自分で聞いたときに私はsudokuをしていました。あなたが知っているように、スコークは9×9のグリッドアレイであり、一般的にはすべてのソルバーがアレイを実装しています[9] [9]。私はそれがあなたがプレイに使用されているグリッドのように見えるためだと推測します。

グリッドは常に、正方形(例:9×9)であるとして、私の質問は、単純である、との最速かつ最も低いメモリ消費何: - 2Dimensions:配列[9] [9] - シングルの寸法:配列[81 ]

値が両方とも計算されている場合(配列がインデックス0から始まり、9x9グリッドで5番目の列と6番目の行が必要な場合) - 2次元配列の座標のペア(例:Array [5-1 ] [6-1]) - 単一の計算位置(配列[((6-1)* 9)+(5-1)])

これをテストする方法はありますか?

+1

はそれについては心配しないでください。アルゴリズムに最も便利な構造を使用してください。数百万のグリッドを持たない限り、何の違いもありません。 – Barmar

+1

しかし、あなたの質問に答えるには、配列の配列には81個の値と9個のポインタが含まれていますが、単一の配列は81個の値しか含んでいないので、メモリは少なくなります。 – Barmar

+0

もちろん、それは私が言ったことですが、単に好奇心、ある日グリッドのサイズを上げると、それには違いがあります – aviel

答えて

0

コメントで述べたように1つの配列のアプローチは、最も安い(メモリ賢明)である

スピードに関しては、は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は高速です!

少なくともpythonで...