日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

哈希表原理

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈希表原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?設想一下,你有一個包含約一千條記錄的數據文件,比如一個小企業的客戶記錄,還有一個程序,它把記錄讀到內存中進行處理。每個記錄包含一個唯一的五位數的客戶ID號、客戶名字、地址、帳戶結余等等。假設記錄不是按客戶ID號順序分類的,所以,如果程序要將客戶ID號作為“key”?來查找一個特殊的客戶記錄,唯一的查找方法就是連續地搜索每個記錄。有時侯,它會很快找到你需要的記錄;但有時侯,在程序找到你需要的記錄前,它幾乎已搜索到了最后一條記錄。如果要在1,000條記錄中搜索,那么查找任何一條記錄都需要程序平均查核500.5?((1000?+?1?)/2)條記錄。如果你常需要查找數據,你應該需要一個更快的方法來找到一條記錄。

????????一種加快搜索的方法就是把記錄分成幾段,這樣,你就不用搜索一個很大的列表了,而是搜索幾個短的列表。對于我們數字式的客戶ID號,你可以建10個列表,以0開頭的ID號組成一個列表,以1開頭的ID號組成一個列表,依此類推。那么要查找客戶ID號38016,你只需要搜索以3開頭的列表就行了。如果有1,000條記錄,每個列表的平均長度為100(1,000條記錄被分成10個列表),那么搜索一條記錄的平均比較次數就降到了約50。?
當然,如果約十分之一的客戶號是以0開頭的,另外十分之一是以1開頭的,等等,那么這種方法會很適合。如果90%的客戶號以0開頭,那么那個列表就會有900條記錄,每次查找平均需要進行450次比較。另外,程序需要執行的搜索有90%都是針對以0開頭的號碼的。因此,平均比較數就大大超過簡單數學運算的范圍了。?
???如果我們可以按這樣一種方式在我們的列表中分配記錄,情況就會好一些,即每個列表約有相同條目的記錄,而不管鍵值中數字的分布。我們需要一種方法能夠把客戶號碼混合到一起并更好地分布結果。例如,我們可以取號碼中的每位數,乘以某個大的數(隨著數字位置的不同而不同),?然后將結果相加產生一個總數,把這個數除以10,并將余數作為索引值(index)(除數相同的分到一組)。當讀入記錄時,程序在客戶號碼上運行這個哈希(hash)?函數來確定記錄屬于哪個列表。當用戶需要查詢時,將同一個哈希函數作為一個“key”用于客戶號碼,這樣就可以搜索正確的列表了。?像這樣的一個數據結構就稱為一個哈希表(hashtable)。?

總結

以上是生活随笔為你收集整理的哈希表原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。