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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

什么是哈希表?为什么要使用哈希表?哈希表的实现原理?哈希冲突怎么解决?

發布時間:2024/1/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是哈希表?为什么要使用哈希表?哈希表的实现原理?哈希冲突怎么解决? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

   當我們在編程過程中,往往需要對線性表進行查找操作。在順序表中查找時,需要從表頭開始,依次遍歷比較a[i]與key的值是否相等,直到相等才返回索引i;在有序表中查找時,我們經常使用的是二分查找,通過比較key與a[i]的大小來折半查找,直到相等時才返回索引i。最終通過索引找到我們要找的元素。
   但是,這兩種方法的效率都依賴于查找中比較的次數。我們有一種想法,能不能不經過比較,而是直接通過關鍵字key一次得到所要的結果呢?這時,就有了散列表查找(哈希表)。

1、什么是哈希表

    要說哈希表,我們必須先了解一種新的存儲方式—散列技術。
    散列技術是指在記錄的存儲位置和它的關鍵字之間建立一個確定的對應關系f,使每一個關鍵字都對應一個存儲位置。即:存儲位置=f(關鍵字)。這樣,在查找的過程中,只需要通過這個對應關系f 找到給定值key的映射f(key)。只要集合中存在關鍵字和key相等的記錄,則必在存儲位置f(key)處。我們把這種對應關系f 稱為散列函數或哈希函數。
    按照這個思想,采用散列技術將記錄存儲在一塊連續的存儲空間中,這塊連續的存儲空間稱為哈希表。所得的存儲地址稱為哈希地址或散列地址。

2、哈希表查找步驟

   ①、存儲數據時,將數據存入通過哈希函數計算所得哪那個地址里面。
   ②、查找時,使用同一個哈希函數通過關鍵字key計算出存儲地址,通過該地址即可訪問到查找的記錄。

3、哈希沖突

  在理想的情況下,每一個 關鍵字,通過哈希函數計算出來的地址都是不一樣的。但是在實際情況中,我們常常會碰到兩個關鍵字key1≠key2,但是f(key1) = f(key2), 這種現象稱為沖突,并把key1和key2稱為這個散列函數的同義詞。
  沖突的出現會造成查找上的錯誤,具體解決方法會在后文提到。

4、哈希函數的構造方法

(1)、原則

  ①、計算簡單;
  ②、散列地址分布均勻。

(2)、構造方法

  ①、直接定址法:不常用
    取關鍵字或關鍵字的某個線性函數值為哈希地址:
    即:H(key) = key 或 H(key) = a*key+b
    優點:簡單,均勻,不會產生沖突;
    缺點:需要實現直到關鍵字的分布情況,適合查找表比較小且連續的情況。
  
  ②、數字分析法
   數字分析法用于處理關鍵字是位數比較多的數字,通過抽取關鍵字的一部分進行操作,計算哈希存儲位置的方法。
   例如:關鍵字是手機號時,眾所周知,我們的11位手機號中,前三位是接入號,一般對應不同運營商的子品牌;中間四位是HLR識別號,表示用戶號的歸屬地;最后四位才是真正的用戶號,所以我們可以選擇后四位成為哈希地址,對其在進行相應操作來減少沖突。
   數字分析法適合處理關鍵字位數比較大的情況,事先知道關鍵字的分布且關鍵字的若干位分布均勻。
   
  ③、平方取中法
   具體方法很簡單:先對關鍵字取平方,然后選取中間幾位為哈希地址;取的位數由表長決定,適用于不知道關鍵字的分布,而位數又不是很大的情況。
  
  ④、折疊法
   將關鍵字分成位數相同的幾部分(最后一部分位數 可以不同),然后求這幾部分的疊加和(舍去進位),并按照散列表的表長,取后幾位作為哈希地址。
   適用于關鍵字位數很多,而且關鍵字每一位上數字分布大致均勻。
  
   ⑤、除留余數法
   此方法為最常用的構造哈希函數方法。對于哈希表長為m的哈希函數公式為:
   f(key) = key mod p (p <= m)
   此方法不僅可以對關鍵字直接取模,也可以在折疊、平方取中之后再取模。
   所以,本方法的關鍵在于選擇合適的p,若是p選擇的不好,就可能產生 同義詞;根據前人經驗,若散列表的表長為m,通常p為小于或等于表長(最好接近m)的最小質數或不包含小于20質因子的合數。
  
   ⑥、隨機數法
   選擇一個隨機數,取關鍵字的隨機函數值作為他的哈希地址。
   即:f(key) = random (key)
   當關鍵字的長度不等時,采用這個方法構造哈希函數較為合適。當遇到特殊字符的關鍵字時,需要將其轉換為某種數字。

(3)、參考因素

   在實際應用過程中,應該視不同的情況采用不同的哈希函數。下列是一些參考因素:
    ①計算哈希地址所需的時間;
    ②關鍵字的長度;
    ③哈希表的大小;
    ④關鍵字的分布情況;
    ⑤查找的頻率。
   選擇哈希函數時,我們應該綜合以上因素,選擇合適的構建哈希函數的方法。

5、哈希沖突的解決

   前文提到,哈希沖突不能避免,所以我們需要找到方法來解決它。
   哈希沖突的解決方案主要有四種:開放地址法;再哈希;鏈地址法;公共溢出區法。

(1)、開放地址法  

   開放地址法就是指:一旦發生了沖突就去尋找下一個空的哈希地址,只要哈希表足夠大,空的散列地址總能找到,并將記錄存入。
   公式:Hi=(H(*key) + Di) mod m (i = 1,2,3,….,k k<=m-1)
   其中:H(key)為哈希函數;m為哈希表表長;Di為增量序列,有以下3中取法:
     ①Di = 1,2,3,…,m-1, 稱為線性探測再散列;
     ②Di = 12,-12,22,-22,。。。,±k2,(k<= m/2)稱為二次探測再散列
     ③Di = 偽隨機數序列,稱為偽隨機數探測再散列。
     例如:在長度為12的哈希表中插入關鍵字為38的記錄:
     
     從上述線性探測再散列的過程中可以看出一個現象:當表中i、i+1位置上有記錄時,下一個哈希地址為i、i+1、i+2的記錄都將填入i+3的位置,這種本不是同義詞卻要爭奪同一個地址的現象叫“堆積“。即在處理同義詞的沖突過程中又添加了非同義詞的沖突;但是,用線探測再散列處理沖突可以保證:只要哈希表未填滿,總能找到一個不發生沖突的地方。

(2)、再哈希法

     公式:Hi = RHi(key) i = 1,2,…,k
     RHi均是不同的哈希函數,意思為:當繁盛沖突時,使用不同的哈希函數計算地址,直到不沖突為止。這種方法不易產生堆積,但是耗費時間。

(3)、鏈地址法

     將所有關鍵字為同義字的記錄存儲在一個單鏈表中,我們稱這種單鏈表為同義詞子表,散列表中存儲同義詞子表的頭指針。
     如關鍵字集合為{19,14,23,01,68,20,84,27,55,11,10,79},按哈希函數H(key) = key mod 13;
     
     鏈地址法解決了沖突,提供了永遠都能找到地址的保證。但是,也帶來了查找時需要遍歷單鏈表的性能損耗。

(4)、公共溢出區法

     即設立兩個表:基礎表和溢出表。將所有關鍵字通過哈希函數計算出相應的地址。然后將未發生沖突的關鍵字放入相應的基礎表中,一旦發生沖突,就將其依次放入溢出表中即可。
     在查找時,先用給定值通過哈希函數計算出相應的散列地址后,首先 首先與基本表的相應位置進行比較,如果不相等,再到溢出表中順序查找。

7、總結

  1、哈希表就是一種以鍵值對存儲數據的結構。
  2、哈希表是一個在空間和時間上做出權衡的經典例子。如果沒有內存限制,那么可以
直接將鍵作為數組的索引。那么所查找的時間復雜度為O(1);如果沒有時間限制,那么我們可以使用無序數組并進行順序查找,這樣只需要很少的內存。哈希表使用了適度的時間和空間來在這兩個極端之間找到了平衡。只需要調整哈希函數算法即可在時間和空間上做出取舍。
     
     
     
     

總結

以上是生活随笔為你收集整理的什么是哈希表?为什么要使用哈希表?哈希表的实现原理?哈希冲突怎么解决?的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 人人看人人爱 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 国产欧美日韩综合精品一区二区 | 精品九九九九 | 欧美性大战久久久久xxx | 肥老熟妇伦子伦456视频 | 欧美美女视频 | 国产免费自拍 | 国产日韩一区二区 | 亚欧精品在线观看 | 亚洲视频在线网 | 激情视频亚洲 | 日日涩 | 久草免费看 | 国产一卡二卡三卡 | 久久亚洲区 | 2019av视频 | 久久精品免费在线观看 | 偷拍亚洲色图 | 国产黄色成人 | 亚洲国产精品视频一区 | 可以在线看黄的网站 | 狠狠人妻久久久久久综合麻豆 | 亚洲午夜18毛片在线看 | 亚洲网站免费观看 | aaa一级片| 欧美日韩性视频 | 国产成人无码aa精品一区 | 亚洲九九视频 | 欧美乱码视频 | 亚洲狼人天堂 | 男插女视频在线观看 | 69综合| 国产综合视频一区二区 | 欧美精品一卡 | 成人免费视屏 | 亚洲天堂网一区 | 粗了大了 整进去好爽视频 日本女优中文字幕 | 国产麻豆成人传媒免费观看 | 色婷婷六月 | 日本精品网站 | 免费视频99| 国产区精品在线 | 久久亚洲精华国产精华液 | 色呦呦 | 国产 xxxx | 亚洲小视频网站 | 麻豆视频黄色 | 国内自拍视频网站 | 国产成人在线视频免费观看 | 欧美网站在线 | 亚洲av激情无码专区在线播放 | 特黄a级片 | 日韩精品电影网 | 欧美jizz19性欧美 | 日日骚网 | 久久99免费视频 | 鲁丝一区二区 | 国产精品毛片一区视频播 | 日本护士╳╳╳hd少妇 | 亚欧洲精品在线视频 | 久久理论| 好吊操视频这里只有精品 | 物业福利视频 | 天天噜夜夜噜 | 最全aⅴ番号库网 | 久热精品在线 | 免费麻豆国产一区二区三区四区 | 91综合视频 | 美女搡bbb又爽又猛又黄www | 精品国产av色一区二区深夜久久 | 欧美高清大白屁股ass18 | 林天顾悦瑶笔趣阁 | 欧美日韩综合一区二区三区 | 91精品国产综合久久福利软件 | 欧美男女激情 | 日韩有码中文字幕在线观看 | 一级片在线观看视频 | 亚洲精品国产成人无码 | 日韩人妻无码一区二区三区99 | 黄色日b片| 一区二区在线影院 | 疯狂做爰的爽文多肉小说王爷 | 日日爱网站| 波波野结衣| 一级做a爱片久久毛片 | ts人妖另类精品视频系列 | www色天使| 久久久成人精品一区二区三区 | 北条麻妃在线一区二区 | 欧美视频在线观看免费 | 娇妻高潮浓精白浆xxⅹ | 国产麻豆成人 | 在线观看视频毛片 | 放几个免费的毛片出来看 | 欧美在线va | 色哟哟无码精品一区二区三区 | 亚洲一区二区免费 | 在线日韩av |