配列と連想配列の動作速度の比較

データの中から重複を探すのに、単純な配列を使うのと、連想配列を使うのとで、どれほど速度に差が出るのかもう一度調べてみた。
今回はテストのため、データは5万件用意する。
Python で、

import random
fw = open('sample.txt','w')
for i in range(0,50000):
    fw.write(str(random.randint(1, 50000))+'\n')
fw.close()

というスクリプトを実行し、5万以下の乱数を5万個発生させ、ファイルに記録。
この中から重複が何件あるか調べる。

さくっと作ってみた連想配列(Pythonでは辞書型)テスト用のスクリプトはこんな感じ。

import sys
import time
start=time.time()
buff={}
cnt=0
for line in sys.stdin:
    if line in buff:
        cnt+=1
    else:
        buff[line]=1
print cnt
print time.time()-start

で、

C:\home>type sample.txt | python looptest.py

というように実行する。

3回実行したところ、
0.0799999237061sec
0.0709998607635sec
0.0700001716614sec
という結果が出た。ちなみに重複は18,502件と出た。

つづいて、単純配列を使ったテスト用のスクリプトはこんな感じ。

import sys
import time
start=time.time()
buff=[]
cnt=0
for line in sys.stdin:
    if line in buff:
        cnt+=1
    else:
        buff.append(line)
print cnt
print time.time()-start

これを同様に3回実行したところ、
42.9820001125sec
49.3309998512sec
44.1530001163sec
という結果になった。

ついでに、ディスクIOのコストを調べるためにこういうスクリプトを作ってみた。

import sys
import time
start=time.time()
for line in sys.stdin:
    pass
print time.time()-start

その結果は、
0.039999961853
0.0499999523163
0.0300002098083
こんな感じ。

ざっくり見て、
空ループ 0.04sec、連想配列 0.073sec、配列 45sec
といったところか。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

驚いた

この記事へのコメント

この記事へのトラックバック