雜湊工作原理與應用

2021-07-12 02:57:25 字數 992 閱讀 1413

參考

我們使用乙個下標範圍比較大的陣列來儲存元素。可以設計乙個函式(雜湊函式, 也叫做雜湊函式),使得每個元素的關鍵字都與乙個函式值(即陣列下標)相對應,於是用這個陣列單元來儲存這個元素;也可以簡單的理解為,按照關鍵字為每一 個元素「分類」,然後將這個元素儲存在相應「類」所對應的地方。

但是,不能夠保證每個元素的關鍵字與函式值是一一對應的,因此極有可能出現對於不同的元素,卻計算出了相同的函式值,這樣就產生了「衝突」,換句話說,就是把不同的元素分在了相同的「類」之中。後面我們將看到一種解決「衝突」的簡便做法。

總的來說,「直接定址」與「解決衝突」是雜湊表的兩大特點。

建構函式的常用方法(下面為了敘述簡潔,設 h(k) 表示關鍵字為 k 的元素所對應的函式值):

a) 除餘法:

選擇乙個適當的正整數 p ,令 h(k ) = k mod p ,這裡, p 如果選取的是比較大的素數,效果比較好。而且此法非常容易實現,因此是最常用的方法。

b) 數字選擇法:

如果關鍵字的位數比較多,超過長整型範圍而無法直接運算,可以選擇其中數字分布比較均勻的若干位,所組成的新的值作為關鍵字或者直接作為函式值。

線性重新雜湊技術易於實現且可以較好的達到目的。令陣列元素個數為 s ,則當 h(k) 已經儲存了元素的時候,依次探查 (h(k)+i) mod s , i=1,2,3…… ,直到找到空的儲存單元為止(或者從頭到尾掃瞄一圈仍未發現空單元,這就是雜湊表已經滿了,發生了錯誤。當然這是可以通過擴大陣列範圍避免的)。

查詢乙個陣列中是否有相同值

**

bool containsduplicate(vector

& nums)

if(hashisstore[locate])

else

}delete hashtable;

delete hashisstore;

return bres;

}

雜湊表工作原理

1.引言 雜湊表 hash table 的應用近兩年才在noi中出現,作為一種高效的資料結構,它正在競賽中發揮著越來越重要的作用。雜湊表最大的優點,就是把資料的儲存和查詢消耗的時間大大降低,幾乎可以看成是常數時間 而代價僅僅是消耗比較多的記憶體。然而在當前可利用記憶體越來越多的情況下,用空間換時間的...

雜湊表工作原理

1.引言 雜湊表 hash table 的應用近兩年才在noi中出現,作為一種高效的資料結構,它正在競賽中發揮著越來越重要的作用。雜湊表最大的優點,就是把資料的儲存和查詢消耗的時間大大降低,幾乎可以看成是常數時間 而代價僅僅是消耗比較多的記憶體。然而在當前可利用記憶體越來越多的情況下,用空間換時間的...

semaphore工作原理與應用

一 訊號量和互斥鎖 mutex 的區別 互斥鎖只允許乙個執行緒進入臨界區,而訊號量允許多個執行緒同時進入臨界區。semaphore分為單值和多值兩種,前者只能被乙個執行緒獲得,後者可以被若干個執行緒獲得。工作原理 以乙個停車場是運作為例。為了簡單起見,假設停車場只有三個車位,一開始三個車位都是空的。...