大概日後會更新(?)
零.hash的用途
在資料範圍不大的時候,你完全可以用乙個map或者set來搞定
如果可以用c++ 11,你還可以用undered map來搞定
然鵝map也是hash實現的
所以當資料範圍很大/你莫得c++11/出題人毒瘤的時候,就需要雜湊
為了愉快的進行hash,下面煮的栗子預設出題人卡掉了你的\(map\)並關掉了c++11
一.字串hash
我們想記錄下關於乙個字串的資訊(比如它是否出現過),就可以把這個字串轉化為乙個\(p\)進製數,存進陣列。當然也可以對這個\(p\)進製數取模。
就像這個亞子
for (int i=0;i二.對乙個數進行hash
然鵝本質是取模
煮個栗子:當我們需要判斷乙個非常大的數是否出現過。
這時候,我們顯然要讓它取模,才能把它記錄下來。
一道例題 解方程
多雜湊既然有了雜湊,那肯定會存在雜湊衝突。
那麼我們可以對要雜湊的東西多次雜湊。
於是就有了雙雜湊和三雜湊(據說衝突概率是線性縮小,實際上我也不知道)
(ps:建議模數》=n^2)
學習筆記 雜湊學習筆記
hash基本原理 hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。它的主要思路是選取恰當的進製,可以...
雜湊學習筆記
雜湊錶用的是陣列支援按照下標隨機訪問資料的特性,所以雜湊表其實就是陣列的一種擴充套件,由陣列演化而來。可以說,如果沒有陣列,就沒有雜湊表。它是乙個函式。我們可以把它定義成hash key 其中 key 表示元素的鍵值,hash key 的值表示經過雜湊函式計算得到的雜湊值。三點雜湊函式基本要求 開放...
雜湊學習筆記
考慮具有以下形式的方程 a1x13 a2x23 a3x33 a4x43 a5x53 0 係數是從區間 50,50 起的整數。考慮解決方案 x1,x2,x3,x4,x5 來驗證方程xi 50,50 xi!0,任何i 確定滿足給定方程的解數。輸入項 輸入的唯一行包含由空格分隔的5個係數a1,a2,a3,...