筆記 雜湊,Hash

2022-06-30 14:33:12 字數 1077 閱讀 5173

將字串(或是其他東西)對映到乙個更容易「操作」的集合裡,根據所需「操作」決定方式。

思考的話,比如考慮必要條件,然後多幾個不同雜湊意義的必要條件就能苛刻出大概率的充分條件。

乙個常用手段是利用 unsigned long long 的自然溢位,可加可減都方便。

不過...多模雜湊的話你tm要換模數啊!!!你只換底數有什麼用

1311e9+71e9+919260817

區分字串:

類似進製的做法,取乙個質數作為 base ,再取乙個質數作為模數。顯然多模雜湊更不容易衝突,另外用 ull 自然溢位更方便。212370440130137957ll是質數。

for (int i=0; i< len; i++) h = h * base + (ull)s[i];
區分字符集:

比如 、 這種,一種做法是多維數。考慮:兩個字符集相同,則各字母雜湊值之和相同,那就多幾維雜湊:

for (int i=0; i< maxn; i++) 

}

可以利用 ull 的自然溢位,更方便:

void add(dim &a, dim b)

void del(dim &a, dim b)

int cmp(dim a, dim b)

例題:luogup5270

多個關鍵字:

雜湊成 \(a\times 1e15+b\times 1e10+c\times 1e5+d\) 這種,就可以自然地排序了,或者拿去用資料結構維護。

例題:[hnoi2005]虛擬記憶體

迴圈子串:

基於調和級數的雜湊 1+1/2+1/3+...+1/n = logn ,直接列舉判斷,雖然帶個 log 不過用途肯定不止這個

雜湊 o(1) 判斷某乙個長度 x 是否為迴圈節:若 s[x+1...n] == s[1...n-x] ,則x為迴圈節

結論:乙個字串的所有迴圈節的長度,均是其最短迴圈節長度的倍數

Hash 雜湊 雜湊

hash 一種用於查詢的資料結構 雜湊查詢的前提是已經一定的規則方法建好了雜湊表。基本思想是 關鍵字 位址轉換法 以資料物件的關鍵字為自變數,通過乙個確定的函式關係h,計算出對應的函式值h key 把這個值解釋為資料物件的儲存位址,並按此存放,即儲存位置 h key 關鍵 1.構造好的雜湊函式 2....

perl 雜湊 hash 學習筆記( )

1.什麼是雜湊 雜湊是perl的一種資料型別,比較類似陣列,用於存放資料,包括2部分關鍵字keys和值value。不同於陣列,雜湊訪問元素的是按照名字訪問標量的key value.hash 用 來標示 2.hash 操作 a.增加 my hash 定義 第一種寫法 hash young author...

perl 雜湊 hash 學習筆記

1.什麼是雜湊 雜湊是perl的一種資料型別,比較類似陣列,用於存放資料,包括2部分關鍵字keys和值value。不同於陣列,雜湊訪問元素的是按照名字訪問標量的key value.hash 用 來標示 2.hash 操作 a.增加 my hash 定義 第一種寫法 hash young author...