民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

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

<<   作成日時 : 2010/12/12 21:09   >>

驚いた ブログ気持玉 1 / トラックバック 0 / コメント 0

データの中から重複を探すのに、単純な配列を使うのと、連想配列を使うのとで、どれほど速度に差が出るのかもう一度調べてみた。
今回はテストのため、データは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
驚いた

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
配列と連想配列の動作速度の比較 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる