資料結構和演算法學習筆記 字串匹配 BF RK

2021-10-05 00:02:13 字數 832 閱讀 1786

字串匹配

單模式串匹配演算法:bf演算法和rk演算法 bm演算法和kmp演算法

多模式串匹配演算法:trie樹和ac自動機

bf演算法 =brute force= 暴力匹配演算法,也叫樸素匹配演算法

主串(n)和模式串(m) n>m

我們要對比m個字元,要對比n-m+1次 最壞時間複雜度o(n*m)

1.串不長,遇到不能匹配的字元的時候就可以退出了,大部分情況下效率比最差情況高很多

2.思路簡單,實現簡單。符合kiss(keep it ****** and stupid)原則

rk演算法=rabin-karp

通過雜湊演算法對主串中n-m+1個字串分別求雜湊值,然後逐個與模式串的雜湊值比較大小。先不考慮雜湊衝突的情況

不過,通過雜湊演算法計算字串的雜湊值的時候,我們需要遍歷字串中每個字元。儘管模式串與子串比較的效率提高了,但是演算法整體的效率並沒有提高。有沒有方法可以提高雜湊演算法計算子串雜湊值的效率呢?

雜湊演算法設計=》用k進製數來表示乙個子串,k進製數轉化成十進位制數

查詢前後兩個字串之間的關係和計算公式,然後用查表的方式來處理指數計算。

整個rk演算法包含兩部分,計算子串雜湊值和模式串雜湊值與子串雜湊值之間的比較。第一部分,可以通過設計特殊的雜湊演算法,只需要掃瞄一遍主串就能計算出所有子串的雜湊值了,所以時間複雜度o(n)

模式串雜湊值與每個子串雜湊值之間的比較的時間複雜度o(1),總共需要比較n-m+1個子串的雜湊值,所以,這部分的時間複雜度也是o(n)。整體時間複雜度o(n)

這裡還有乙個問題就是,模式串很長,相應的主串張的子串也會很長,通過上面的雜湊演算法計算得到的雜湊值就可能很大,如果超過了計算機中整型值可以表示的範圍,那該如何解決呢?

資料結構和演算法學習筆記

資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科。程式設計 資料結構 演算法 簡單來說資料結構就是關係,元素相互之間存在的一種或多種特定關係的集合。1.1 邏輯結構和物理結構 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條...

資料結構和演算法(字串)

字串定義 由零個或多個字元組成的有限序列 字串的比較 一般只比較是否相等 可比大小,比相同位置上的字元的ascii值 字串的儲存結構 順序儲存 陣列 鏈式儲存 鍊錶 bf演算法 brute force,樸素的模式匹配演算法 核心思想 有兩個字串s和t,長度為n和m。首先s 1 和t 1 比較,若相等...

資料結構和演算法 字串

想要研究字串的資料結構和演算法,可以先看一遍字串自帶的一些的屬性和方法 557.反轉字串中的單詞 iii 給定乙個字串,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。示例 輸入 let s take leetcode contest 輸出 s tel ekat edocteel...