概述:
主要用於字串的匹配。
定義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
**:
#includeusingnamespace
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 通過這種方式來替代一些很費時間的操作。比如,最常見...