部分文字列のサイズが大きくなるにつれて、コードのこのセクションの複雑さをどのように見つけることができますか?
if size > 160:
sub = (hashlib.sha1(sub.encode('utf-8')).hexdigest())
ハッシュ関数が一定時間で実行されているかのようにプログラムが実行されていることに気付いたとき、私は興味を持ちました。私のプログラムでは、「サイズ」が 165 の場合、最悪の場合、上記のコードは 165x 実行されます。私が行ったばかりのテストでは、sha1 が長さと不安定な関係で実行されていることがわかりました。
Length Time
0 0
1 0.015000105
2 0.016000032
3 0.046000004
4 0.046999931
5 0.062000036
6 0.078000069
7 0.078000069
8 0.07799983
9 0.108999968
テストコード:
import string
import random
import hashlib
import time
def randomly(size=6, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
for i in range(1, 10000001, 1000000):
random_str = randomly(i)
start = time.time()
str_hash = hashlib.sha1(random_str.encode('utf-8')).hexdigest()
print time.time() - start