Rabin-Karp ACM訓練
求解問題
尋找S中T出現的位置或次數。假設S的長度為n, T的長度為m, 通過列舉S長度為m的字串的hash值與T的hash值比較。此時使用滾動hash的優化使複雜度不為O(mn).
演算法說明
滾動hash
取兩個合適的素數b和h,假設字串C = c1c2c3c4,定義hash函式:
H(C) = (c1bm-1 + c2bm-2 + c3bm-3 + ... + cmb0) mod h
其中b是基數, 相當於把字串看做b進位制。這項在計算S中m長的字串時,每向後滑動一個字元之後的字串的hash值和上一次字串的hahs值有如下關係:
H(S[k+1.. k+m]) = H(S[k..k+m-1] * b - sk
這樣計算hash值就可以在O(n)的時間內算出S中所有位置對應的hash值,從而在O(m + n)的時間內完成字串匹配。
Hit:實際使用時取h為264,使用long long int 自然溢位省去取模時間。
PS:原始的R-K演算法還需要檢查雜湊值衝突,但這樣會使演算法複雜度退化為O(mn),比賽時只比較不檢查。
模板
1 typedef unsinged long long int ull;
相關推薦
Rabin-Karp ACM訓練
求解問題 尋找S中T出現的位置或次數。假設S的長度為n, T的長度為m, 通過列舉S長度為m的字串的hash值與T的hash值比較。此時使用滾動hash的優化使複雜度不為O(mn). 演算法說明 滾動hash 取兩個合適的素數b和h,假設字串C = c1c2c3c4,定義hash函式:
ACM訓練大綱
大數分解 質量 總結 推薦 匹配 queue crete 擴展歐幾裏得 科技 1. 算法總結及推薦題目 1.1 C++ STL ? STL容器: set, map, vector, priority_queue, queue, stack, deque, bitset?
2018寒假 acm訓練計劃
得來 不知道 日常 自己 clas bsp 犯錯 多校 body 任務總覽: 1.《aha》1,3,4章 2.紫書 7,9,10章(不知道有沒有時間學8章) 3.隊裏訓練賽跟做 4.全國多校算法學習 5.cf2天一套 6.c++ 想做的有點多,先試試看自己能不能做得來這些,
ACM訓練小結-柳誌軒-2018年6月16日
修改 今天 轉換 整理 xor 樹鏈剖分 浪費時間 題目 需要 今天題目情況如下:A題:線段樹+XOR性質。情況:由於寫法問題,調試困難,浪費大量時間。B題:(對所有滿足i mod p==q,求a[i]之和),無修改,直接上n*sqrt(n)的分塊寫法。情況:由於25
Rabin-karp演算法實現 字串匹配
// RabinKarp演算法實現 // RabinKarp演算法實現 const primeRK = 16777619 func hashStr(seq string) (uint32, uint32) { hash := uint32(0) for _, value
『ACM入門』藍橋杯ACM訓練系統基本輸入輸出教程
『ACM入門』藍橋杯ACM訓練系統基本輸入輸出教程 在介紹訓練場的OJ系統之前,首先為大家介紹一下ACM: ACM原代表美國計算機協會,因其舉辦的ICPC即國際大學生程式設計競賽而聞名全世界,此項賽事要求學生的在五小時內解決全英文問題,並在效率和速度以及程式碼的審查上要求非常嚴格以至
ACM訓練 身高排隊、導彈攔截 [最長不下降子序列,最長不升子序列和不升子序列的最小覆蓋]
題目 題目分析 整體程式碼 相似問題 題目 題目描述 若干人排成一行,且身高分別為b1,b2,…,bn。準備從中選出一組滿足身高不降的人組成一隊。 例如13,7,9,16,3
ACM訓練 訓練方式 [簡單遞迴+記憶化搜尋]
題目 題目分析 整體程式碼 題目 題目描述 自行車選手在訓練時,需要圍繞著場地騎行N圈。給了使得訓練有效,可以一次把N全部騎完, 也可以分成若干次完成,但每次都比上一次騎的圈數要多,那
ACM訓練題-第七題-計算球體積
Time limit1000 msMemory limit32768 kB total:Time 15ms Memory 1800kB 根據輸入的半徑值,計算球的體積。 Input 輸入資料有多組,每組佔一行,每行包括一個實數,表示球的半徑。 Output 輸出對應的球的體積,對於每組輸
ACM訓練題-第一題-String Task
Time limit2000 msMemory limit262144 kB total:Time 62ms Memory16kB Problem Description: Petya started to attend programming lessons. On the first
ACM訓練題-第四題-A + B Problem
Time limit1000 msMemory limit32768 kB total:Memory 1792kB Calculate A + B . Input Each line will contain two integers A and B . Process to end o
字串匹配——Rabin–Karp algorithm
在https://mp.csdn.net/postedit/84679263這篇使用的是樸素的字串匹配方法,演算法複雜度為O(mn)(m為模式串長度,n為文字串長度)。在字串匹配任務中,Rabin–Karp演算法通過hash函式試圖加速文字子串
2018.9.21 ACM訓練總結 CCPC2017 哈爾濱
最後只過了6題 並且罰時超高 M題精度爆炸,貫穿全場的14發罰時。 幾何特別是圓的部分寫的太少,cf幾何題要跟著寫啊!! 還有二分答案的思想。這場比賽運用很多。先確定一個答案,作為依據來check。 我們隊有三點需要特別注意 1. 堅持到最後!不能放縱自己,讓
2018.9.23 ACM訓練 CCPC秦皇島
題目 今天狀態很不好 只過了5題,最後三開三WA D題因為沒有去檔案,WA了還沒看出來 zkx的G比較難寫 zqq的A沒有理清思路。本來可以簡單的推推公式直接計算代價,寫成了麻煩的大模擬。 1. 一定要想清楚再寫 模擬題給zkx更靠譜,更重要的是透過模擬的表層,
ACM訓練日記—10月1日
今天下午的比賽我可能算是划水了,先上來兩題跟我都沒關係,我直接開始推第三題的數論,可能就是鑽牛角尖了,因為題目感覺以前就是做過一道同樣的題,之前那道是關於gcd的性質得應用,思路又被自己限制在那個公式裡去,後來lwy把x與y做gcd的分解後其實直接就很好推了,,,卡
ACM訓練日記—10月3日
今天的比賽題目比較簡單,雖然好幾道題的題意是猜的,但還好運氣比較好。先上來lhj讀J題(簽到)沒讀懂,轉去做H題,我讀J題也沒讀懂,H題在兩隊友討論下過了,我還是沒搞懂J題講的什麼,lhj去做I題(簽到),我和他確定了思路後他先去寫I,我和lwy在討論猜J到底什麼意
ACM訓練日記—10月4日
今天的比賽發現了許多問題,剛上來lhj順利過了F,我把D題題意讀錯了,匆忙寫了一發結果wa了,後來才發現對坡這個詞理解錯誤,然後就lhj寫E題的搜尋,K題我並沒有讀懂,lwy來了後弄懂了題意。然後lhj在寫了dfs後說題目的樣例錯了,在lwy和他確定了題意以後發現題
ACM訓練日記—10月5日
今天的比賽打得不太好,有許多原因,需要調整。剛開始簽到題很簡單很順利,可到做第二道題就有點打怵,又是關於概率期望的題目,其實在逐步討論分析中思路都是正確的,這個時候lwy說了一種根據樣例和答案猜的解法,我有點不認同,主要就是沒法針對題目做解釋,可能有些爭執我一直都
ACM訓練日記—10月6日
今天的比賽剛開始是比較順利的,今天我腦子可能有點不大線上,一道水題出了許多岔子,然後C題一道矩陣快速冪的題目就剛開始沒推對地方,一直沒寫出來,主要是構造矩陣的時候寫錯了,然後lwy推了好長時間水杯那道題,我順便幫他積個分,lhj想到了E題一個絕對不會超時的方法,並開
ACM訓練題-第二期訓練題鉑金鑽石組-第一題
原題連結:http://acm.hdu.edu.cn/showproblem.php?pid=6292 Time limit1000 msMemory limit512000 kB 著名出題人小Q每次比賽後都會寫一份《賽題分析》,包含比賽概況、每題的參考演算法以及一些統計數值。 對於