今天接触到了哈希算法。处于好奇心,我写了一段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))
最后的结果当然是哈希查找所需的时间更少。基本遍历查找所需时间是哈希查找所需时间的三倍左右。
以上代码或结论如有错误,欢迎指出。