第5章 第12節 哈希

●   請你說一下哈希表是做什麼的?另外哈希表的實現原理也說一下

參考回答:

Hash表即散列表,其最突出的優點是查找和插入刪除具有常數時間的複雜度

其實現原理是:把Key通過一個固定的算法函數即所謂的哈希函數轉換成一個整型數字,然後就將該數字對數組長度進行取餘,取餘結果就當作數組的下標,將value存儲在以該數字爲下標的數組空間裏。

而當使用哈希表進行查詢的時候,就是再次使用哈希函數將key轉換爲對應的數組下標,並定位到該空間獲取value,如此一來,就可以充分利用到數組的定位性能進行數據定位。

哈希表最大的優點,就是把數據的存儲和查找消耗的時間大大降低,幾乎可以看成是常數時間;而代價僅僅是消耗比較多的內存。然而在當前可利用內存越來越多的情況下,用空間換時間的做法是值得的。另外,編碼比較容易也是它的特點之一。哈希表又叫做散列表,分爲“開散列” 和“閉散列”。

我們使用一個下標範圍比較大的數組來存儲元素。可以設計一個函數(哈希函數,也叫做散列函數),使得每個元素的關鍵字都與一個函數值(即數組下標)相對應,於是用這個數組單元來存儲這個元素;也可以簡單的理解爲,按照關鍵字爲每一個元素“分類”,然後將這個元素存儲在相應“類”所對應的地方。

但是,不能夠保證每個元素的關鍵字與函數值是一一對應的,因此極有可能出現對於不同的元素,卻計算出了相同的函數值,這樣就產生了“衝突”,換句話說,就是把不同的元素分在了相同的“類”之中。後面我們將看到一種解決“衝突”的簡便做法。總的來說,“直接定址”與“解決衝突”是哈希表的兩大特點。

●   現在有100W個賬戶密碼,要存起來,要求查找時速度儘可能快,你選擇什麼數據結構?爲什麼?

參考回答:

選擇hash_map,因爲其查找速度與數據量基本無關,是常數級別,但是對空間的要求很高,所以是已空間換時間 

圖片


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章