演算法筆記 字串hash

2022-03-05 05:25:01 字數 1057 閱讀 3905

概述:

主要用於字串的匹配。

定義hash函式:

h(c)=(c1bm-1 +c2bm-2 +...+cmb0)mod h

對於字串c中l-r區間的hash值:

h(l,r)=h(1,r)-h(1,l-1)*br-l+1

如果hash值很大,對h取模,一般地,用unsigned long long 來儲存資料,這樣溢位時就會自動對264 取模。

如果兩個字串的hash值相等,我們認為它們相同,不排除小概率事件使得兩個字串具有相同的hash值(由取模導致)。

大白書例子:

const ull base=131;//

a在b中是否出現

bool contain(string a,string

b)

return

false;}

//a的字尾和b的字首相等的最大長度

int overlap(string a,string

b)

return

ans;

}

hdu - 4300

**:

#includeusing

namespace

std;

#define ll long long

#define pb push_back

#define ull unsigned long long

#define mem(a,b) memset(a,b,sizeof(a))

const ull base=131

;int mp[26

];int h(string

s)

for(int i=0;i)putchar(s[i]);

for(int i=0;i'

a']+'a'

); puts(

"");

}int

main()

return0;

}

演算法 字串hash

題目描述 很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的 dna 序列。我們首先選取乙個好長好長的 dna 序列 小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母 然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。...

演算法 字串Hash

字串hash主要應用在 在長度為n的主串s中匹配長度為m的匹配串t,返回起始位置。通過字串hash函式把乙個任意長度的字串對映成乙個非負整數,並且其衝突概率為零。取一固定值p,把字串看作p進製數,並分配乙個大於0的數值,代表每種字元。一般來說,我們分配的數值都遠小於p。取一固定值m,求出p進製數對m...

字串 字串雜湊hash演算法

以洛谷p3370為引子引入吧 雜湊其實是所有字串操作中,筆者認為最簡單的操作了 except輸入輸出qwq 雜湊的過程,其實可以看作對乙個串的單向加密過程,並且需要保證所加的密不能高概率重複 就像不能讓隔壁老王輕易地用它家的鑰匙開啟你家門一樣qwq 通過這種方式來替代一些很費時間的操作。比如,最常見...