串的模式演算法 BF KMP

2021-10-01 09:57:42 字數 1218 閱讀 8902

1)編寫完成下列功能的函式:(1)建立乙個串;( 2)實現 bf 模式匹配演算法;(3)實現 kmp 模式匹配演算法;(4)呼叫建立串函式建立主串和模式串;(5)呼叫 bf 演算法輸出匹配結果;(6)呼叫 kmp 演算法輸出匹配結果。

串的堆順序儲存

typedef structhstring;

bf演算法:(i為主串匹配指標,j為模式串匹配指標)

在kmp函式中,要呼叫next改進函式。

#include

"stdio.h"

#include

"stdlib.h"

#define maxsize 100

#define error 0

#define ok 1

typedef

struct

hstring;

//串的堆式儲存結構

intstrassign

(hstring &s,

char

*t)int

index_bf

(hstring s,hstring t,

int pos)

else

// 否則指標回溯重新開始匹配}if

(j > t.length )

//j > t.length 時,說明字串遍歷完成

return i-t.length;

// 匹配成功

else

return0;

// 匹配失敗

}void

get_nextval

(hstring t,

int nextval)

else k = nextval[k];}

}int

index_kmp

(hstring s, hstring t,

int pos)

//p95-96

// 繼續比較後繼字元

else j = nextval[j]

;// 模式串向右移動}if

(j > t.length)

return i-t.length;

// 匹配成功

else

return0;

// 匹配失敗

}int

main()

}return ok;

}

模式匹配之(BF KMP演算法)

bf演算法 我們先來看bf 演算法 brute force,最基本的字串匹配演算法 bf演算法的實現思想很簡單 我們可以定義兩個索引值i和j,分別指示主串tag和子串ptn當前正待比較的字元位置,從主串tag的第pos個字元起和子串ptn的第乙個字元比較,若相等,則繼續逐個比較後續字元,否則從主串t...

BF kmp以及Gkmp演算法

一 描述 bf kmp gkmp 優化後的kmp 都是基於單個字串 多個字串一般要用到其他演算法,比如說ac自動機 匹配的演算法,不過時間複雜度各有不同,其中bf的時間複雜度為o n m n 1 而kmp演算法的時間複雜度為o n m 可見快上了不少,但是這其中確實還是有不足之處,故而推出了優化後的...

資料結構 串的知識總結,BF,KMP演算法

常見基礎概念 串長 串中字元個數,有時還常用a 0 length來儲存串長 注意空串和空格串的區別 空串是長度為0的串,而空格串是由多個或乙個空格字元組成的字串 子串與主串 串s中任意個連續字串行叫s的子串,s稱為主串 子串位置 子串的第乙個字元在主串中的序號 序號從1開始 字元位置 字元在串中的序...