字元串搜尋算法主要用於在一長字元串中找到是否包含某個特定的子字元串。這些算法可以分為兩大類:單模式匹配和有限模式集合匹配。
單模式匹配:
KMP算法(Knuth-Morris-Pratt算法):該算法的預處理時間為Θ(m),匹配搜尋時間為Θ(n),其中m是模式串的長度,n是文本串的長度。
BM算法(Boyer-Moore string search algorithm):該算法的預處理時間為Θ(m + |Σ|),匹配搜尋時間在Ω(n/m)到O(n)之間,其中|Σ|是字元集的大小。
有限模式集合匹配:
Aho-Corasick算法:這是一種字典匹配算法,用於在輸入文本中查找字典中的字元串。該算法的時間複雜度是線性的。
BM算法的核心在於使用兩種不同的啟發策略來計算模式串向後滑動的位數,即「壞字元規則」和「好後綴規則」。這兩種策略的計算過程只與模式串相關,與文本串無關。因此,在對模式串進行預處理時,可以預先生成相應的後移表,在匹配過程中直接使用。
此外,還有一些其他算法,如Rabin-Karp string search算法,但其最差複雜度並不理想,因此套用並不廣泛。
綜上所述,字元串搜尋算法包括多種高效的方法來在一長字元串中查找特定的子字元串,具有不同的預處理和搜尋時間複雜度,適用於不同的套用場景。