随着我的子字符串的大小增加,我怎样才能找到这部分代码的复杂性?
if size > 160:
sub = (hashlib.sha1(sub.encode('utf-8')).hexdigest())
当我注意到我的程序运行时好像哈希函数在恒定时间内执行时,我变得很好奇。对于我的程序,如果“大小”为 165,最坏的情况是上述代码将执行 165 倍。我刚刚完成的一项测试显示 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