0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ハッシュ検索の中身の複雑さによる計算速度の違いについて

Last updated at Posted at 2018-11-06

やりたいこと

ハッシュ検索は計算オーダーがO(1)と言われているが,
hash検索が中身の複雑さ(例えば,単語やハッシュ値など)に応じて,計算速度が変化するのかを確認したい

hashの中身がintの場合

number.py
import time

if __name__ == '__main__':
    N = 100000
    dict = {i: None for i in range(N)}

    start = time.time()
    for i in range(N):
        if i in dict:
            pass

    elapsed_time = time.time() - start
    print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
# elapsed_time:0.010960102081298828[sec]

hashの中身が複雑な場合

今回は中身を複雑にするために,hashで作成することする

hash.py
import hashlib
import time

if __name__ == '__main__':
    N = 100000
    dict = {hashlib.md5(i.to_bytes(4, 'little')).hexdigest(): None for i in range(N)}

    list = [hashlib.md5(i.to_bytes(4, 'little')).hexdigest() for i in range(N)]
    start = time.time()
    for item in list:
        if item in dict:
            pass

    elapsed_time = time.time() - start
    print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")

# elapsed_time:0.023391008377075195[sec]

こうして比べてみると,同じhash検索でも,辞書の中身のデータタイプによって,大きく計算速度が変わることはないのではないかと思う.

### もしhas検索でなかったら

もしhash検索でなかったらどうなるのだろうか?
ということで試してみた.

list.py
import time

if __name__ == '__main__':
    N = 100000
    list = [hashlib.md5(i.to_bytes(4, 'little')).hexdigest() for i in range(N)]

    start = time.time()
    for i in range(N):
        if hashlib.md5(i.to_bytes(4, 'little')).hexdigest() in list:
            pass

    elapsed_time = time.time() - start
    print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")

# elapsed_time:85.36278200149536[sec]

listの中に特定の要素が存在するかを検索すると,かなりの時間がかかることがわかる.

なので,要素の検索をする際には,hash検索をするべきであることがわかる.

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?