字串匹配在文字處理裡非常重要,我們採用簡潔的python**把以下演算法一一實現並講解。
樸素演算法 (***** algorithm)
rabin-karp 演算法
有限自動機演算法(finite automation)
knuth-morris-pratt 演算法(kmp algorithm)
boyer-moore 演算法
simon 演算法
colussi 演算法
galil-giancarlo 演算法
apostolico-crochemore 演算法
horspool 演算法和
sunday 演算法
為了更好地闡述問題,我們先規定好統一的符號,便於後續的描述。
字串匹配演算法通常分為兩個步驟:預處理(preprocessing)和匹配(matching),所以在討論演算法的時候要同時給出兩者的時間複雜度。
樸素演算法即把模式與文字按照位置一一查詢,**如下
def string_match_*****_algorithm(text, pattern):
for i in range(len(text)):
for j in range(len(pattern)):
if i+j >= len(text):
break
if pattern[j] != text[i+j]:
break
else:
return i
return -1
可見,演算法時間複雜度為
Byte陣列轉字串再getBytes和原來不一樣
用io流讀取並輸出時,採用byte陣列讀取固定長度len,為了保證當最後一次讀取位元組數不足len時後面未被覆蓋的位元組對輸出產生影響,一般採用new string bytes,0,len getbytes 的方法去擷取位元組陣列的有效長度。初學io流的時候就是採用如下的 進行複製檔案的 方法二 基...
模板 字串 字串匹配
計算next陣列的方法是對於長度為n的匹配串,從0到n 1位依次求出字首字尾最大匹配長度。下面的寫法是僅僅檢測有沒有匹配然後返回第乙個匹配位置,而不是返回所有匹配位置。include include include using namespace std const int n 100 char s...
字串,字串陣列,字串指標!!
字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...