散列查找

hash查找的是性能較好的算法之一,但它對于hash算法的設計有很大的技巧。生成hash的時候,不同的元素可能生成相同的hash值。所以減少沖突就成了很大的問題,尤其是元素基數很大的時候。

#coding:utf-8
import time
import random
def myHash(data,hashLength):    
  return data % hashLength
def hashSearch(hash,hashLength,data):    
  hashAddress = myHash(data,hashLength)    
  while hash.get(hashAddress) and hash[hashAddress] != data:        
    hashAddress += 1        
    hashAddress = hashAddress % hashLength    
   if hash.get(hashAddress) == None:          
     return None    
  return hashAddress# 數組實現hash映射
def toHash(num,hash,hashlength):      
  for i in num:        
    hashAdress = myHash(i,hashLength)        
    while hash.get(hashAdress):            
      hashAdress += 1      #防止沖突      
      hashAdress = hashAdress % hashlength        
     hash[hashAdress] = i
def sampleSearch(num,data):    
  for i in num:        
    if i == data:            
      return True    
     else:        
      return False
if __name__ == '__main__':    
  hashLength = 20    
  L = []    
  for i in range(100):        
    L.append(i)        
    L[i] += random.random()    
  L.append(38)    #由于L中元素中全部都是隨機量,這里傳入一個整數方便查找
  hash = {}    
  toHash(L,hash,hashLength)    # 比較hash查找與普通順序查找的性能差別    
  start =     time.clock()    
  result = hashSearch(hash,hashLength,38)    
  print 'use time %f' % (time.clock() - start)    
  start = time.clock()    
  print sampleSearch(L,38)    
  print 'use time %f' % (time.clock() - start)    
  if result:        
    print('hash index is ' + str(result)) # 結果為int類型,用str函數轉為str類型
    print(hash[result])    
  else:        
    print('no result')
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,515評論 25 708
  • 原文出處:http://www.cnblogs.com/maybe2030/p/4715035.html引文出處:...
    明教de教主閱讀 9,222評論 0 7
  • 教你如何迅速秒殺掉:99%的海量數據處理面試題 本文經過大量細致的優化后,收錄于我的新書《編程之法》第六章中,新書...
    Helen_Cat閱讀 7,461評論 1 39
  • 實習期間,宿舍六人或搬出去住,或每天兩點一線往返于實習學校與宿舍,忙忙碌碌中,陽臺上那一排花花草草終究是時常被遺忘...
    飛鳥還閱讀 181評論 0 2
  • 導演楊磊應該是對“九州”這個概念有所迷戀和執念的,拍完了電視劇《九州·天空城》,又趁著熱度未減,馬不停蹄的執導了首...
    聽風過林閱讀 477評論 0 0