今天接触到了哈希算法。处于好奇心,我写了一段python代码来对比这两种查找方式在进行随机大规模查找时的效率差异。
import time
import random
a=[12,234,345,67,7,88,834,4353,56,324,123,567,53,45,234,123,123]
hashList={} #哈希表
def r(): #生成一个随机被查找值,用来模拟随机查找
r=random.randint(0,16)
n=a[r]
return n
def find(num): #普通遍历查找
for l in a:
if(num==l):
continue
def getHash(): #生成哈希表
for l in a:
key=(l*5+3)^2
hashList[key]=l
def hashfind(num): #哈希查找
key=(num*5+3)^2
return
normalTime=0
hashTime=0
t1=time.time() #计算生成哈希表需要时间 T2-T1
getHash()
t2=time.time()
for l in range(2000000): #进行二百万次模拟
n=r()
start=time.time()
find(n)
end=time.time()
nt=end-start
normalTime=normalTime+nt #普通遍历查找总时间
start1=time.time()
hashfind(n)
end1=time.time()
nt1=end1-start1
hashTime=hashTime+nt1 #哈希查找总时间
print('普通查找二百万次需要时间:'+str(normalTime))
print('hash查找二百万次需要时间:'+str(hashTime+t2-t1))
最后的结果当然是哈希查找所需的时间更少。基本遍历查找所需时间是哈希查找所需时间的三倍左右。
以上代码或结论如有错误,欢迎指出。