兩段字串,判斷它們是否相等,樸素解法是乙個乙個的判斷,時間復制度較大。雜湊演算法把字串轉換成整數,這樣時間複雜度從o(n)變成了o(1)。類似於二進位制,用p進製將字串裝換成整數,為避免重複,一般認為p取131或者1331,使用unsigned long long 就可以,預設對結果模乙個2^64,會有溢位的情況,但影響很小。(字串預設都是小寫字母,採用26進製)
例如 str=「abcd"
hash陣列儲存字串所有的字首(憨憨小白不會打次方:p)
這裡還可以用到簡單的遞迴
hash[i]=hash[i-1]*p+s[i]-『a』+1
對於字串任意區間(l,r)
hash[l–r]=hash[r]-hash[l-1]*p^(r-l+1)
簡單驗證即可得到
例題鏈結
**實現
#include
#include
#define base 131
char s[
1000000];
typedef
unsigned
long
long ull;
ull h[
1000001
],p[
1000001];
ull ans
(int left,
int right)
intmain()
while
(n--
)}
KMP演算法 入門篇
字串匹配問題 給出乙個源字串和乙個目標字串,能否在源串中找到匹配目標串的子串,找到的話就返回首字母在源串的下標 暴力匹配演算法 bf演算法 相對於烤饃片 kmp 演算法,暴力演算法是最簡單易懂的,就是從前向後遍歷源串的每乙個字母向後檢視以該字母的子串,當且僅當起點字母後面的每個字母都匹配成功則返回該...
演算法 入門篇(歐式距離)
計算公式 本文將根據使用者輸入特徵的資料模型,對歐式距離的應用進行簡單的介紹。總思路 根據使用者的歷史登入的輸入特徵,建立 圓形 的資料模型,取落入此圓內的資料,作為正常值,落到圓外部的資料將被判定為風險資料。public boolean doeval double inputfeatures,li...
演算法 入門篇(球面距離)
數學模型 計算公式 l r arc cos cos wa cos wb cos jb ja sin wa sin wb 補充 球面距離在開發中一般用在,地理位置的位移量計算中。本文將根據風控系統中,使用者登入的位移量評估簡單介紹此演算法的使用。一般的,我們再日誌中,可以獲取客戶端的登入ip,根據ip...