BF 和RK 算法
BF算法
BF算法,即暴風(fēng)(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是將目標(biāo)串S的第一個(gè)字符與模式串T的第一個(gè)字符進(jìn)行匹配,若相等,則繼續(xù)比較S的第二個(gè)字符和 T的第二個(gè)字符;若不相等,則比較S的第二個(gè)字符和T的第一個(gè)字符,依次比較下去,直到得出最后的匹配結(jié)果。BF算法是一種蠻力算法。
從字符串A蟲查找B
首先S[1]和T[1]比較,若相等,則再比較S[2]和T[2],一直到T[M]為止;若S[1]和T[1]不等,則S向右移動一個(gè)字符的位置,再依次進(jìn)行比較。如果存在k,1≤k≤N,且S[k+1…k+M]=T[1…M],則匹配成功;否則失敗。
該算法最壞情況下要進(jìn)行M*(N-M+1)次比較,時(shí)間復(fù)雜度為O(M*N)。
模式串長度為m,主串長度為n,在主串,就會有n-m+1 個(gè)長度為m的子串,然后暴力對比n-m+1 個(gè)子串于模式串,找出對應(yīng)配對的子串
RK 算法
在BF算法引進(jìn)哈希算法
RK算法思想
假設(shè)我們有某個(gè)hash函數(shù)可以將字符串轉(zhuǎn)換為一個(gè)整數(shù),則hash結(jié)果不同的字符串肯定不同,但hash結(jié)果相同的字符串則很有可能相同(存在小概率不同的可能)。
算法每次從S中取長度為m的子串,將其hash結(jié)果與P的hash結(jié)果進(jìn)行比較,若相等,則有可能匹配成功,若不相等,則繼續(xù)從S中選新的子串進(jìn)行比較。
假設(shè)要匹配的字符串的字符集值包含K個(gè)字符
,就可以用一個(gè)K進(jìn)制來表示子串,這個(gè)K進(jìn)制轉(zhuǎn)化成十進(jìn)制
比如包含a~z26個(gè)小寫字母,映射到0 ~ 25個(gè)數(shù)字,a 表示 0,z 表示 25
相鄰兩個(gè)子串s [ i-1] 和 s[i] ( i 表示子串在主串的其實(shí)位置,子串的長度都為m),對應(yīng)的哈希值計(jì)算公式有交集。使用s [i-1] 的哈希值 很快計(jì)算出s [i ]的哈希值
RF算法比BF 算法要高
模式串哈希值于每一個(gè)哈希值之間的比較時(shí)間復(fù)雜度是O(1)O(1)O(1),總需要n-m+1給子串的哈希值,所以 時(shí)間復(fù)雜度是O(n)O(n)O(n)
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
- 上一篇: 建设银行二类卡都有什么费用
- 下一篇: sklearn 特征工程