第五次作業 串的模式匹配

2022-07-14 09:27:15 字數 2286 閱讀 5082

| 這個作業屬於哪個課程 | |

| ---- | ---- | ---- |

| 這個作業要求在** |/homework/11392 |

| 這個作業的目標 | 掌握串的模式匹配演算法 |

| 學號 | 2018204186 |

一、實驗目的

1、了解串的基本概念

2、掌握串的模式匹配演算法的實現

二、實驗預習

說明以下概念

1、模式匹配:模式匹配是資料結構中字串的一種基本運算,給定乙個子串,要求在某個字串中找出與該子串相同的所有子串,這就是模式匹配。

2、bf演算法:暴力匹配(bf)演算法是普通的模式匹配演算法,bf演算法的思想就是將目標串s的第乙個字元與模式串t的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和t的第二個字元;若不相等,則比較s的第二個字元和t的第乙個字元,依次比較,直到得出最後的匹配結果。

3、kmp演算法:kmp演算法是一種改進的字串匹配演算法,由d.e.knuth,j.h.morris和v.r.pratt提出的,因此人們稱它為克努特—莫里斯—普拉特操作(簡稱kmp演算法)。kmp演算法的核心是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是通過乙個next()函式實現,函式本身包含了模式串的區域性匹配資訊。

三、實驗內容和要求

1、閱讀並執行下面程式,根據輸入寫出執行結果。

#include#include#define maxsize 100

typedef structsqstring;

int strcompare(sqstring *s1,sqstring *s2); /*串的比較*/

void show_strcompare();

void strsub(sqstring *s,int start,int sublen,sqstring *sub);

/*求子串*/

void show_substring();

int strcompare(sqstring *s1,sqstring *s2)

void show_strcompare()

void strsub(sqstring *s,int start,int sublen,sqstring *sub)

for(i=0;idata[i]=s->data[start+i-1];

sub->length=sublen;

}void show_substring()else

} if(j > t[0])else

return 0;}

void getnextval(sstring t, int next)else

} }void init(sstring &s, char str)

s[i+1] = '\0';

s[0] = i;}

void printstr(sstring str)

printf("\n");

}int main();

getnextval(t, next);

printf("next:");

for(int k = 1; k <= t[0]; k++)

printf("%d ", next[k]);

printf("\n");

int index = indexkmp(s, t, 1, next);

printf("index is %d\n", index);

}

執行結果:

abcaabbabcabaacbacba

abcabaa

next:0 1 1 0 1 3 7

index is 8

bf演算法:

#include#define maxstrlen 50  

typedef unsigned char sstring[maxstrlen + 1];

int indexbf(sstring s, sstring t, int pos)else

} if(j > t[0])else

return 0;}

void init(sstring &s, char str)

s[i+1] = '\0';

s[0] = i;}

void printstr(sstring str)

printf("\n");

}int main()

執行結果:

abcaabbabcabaacbacba

abcabaa

index is 8

第五次作業 串的模式匹配

這個作業屬於哪個課程 這個作業要求在 homework 11392 這個作業的目標 了解串的基本概念 掌握串的模式匹配演算法的實現 學號2017205212 一 實驗目的 1 了解串的基本概念 2 掌握串的模式匹配演算法的實現 二 實驗預習 說明以下概念 1 模式匹配 模式匹配是資料結構中字串的一種...

第五次作業 串的模式匹配

這個作業屬於哪個課程 這個作業要求在 homework 11392 這個作業的目標 掌握串的模式匹配演算法 學號2018204219 一 實驗目的 1 了解串的基本概念 2 掌握串的模式匹配演算法的實現 二 實驗預習 說明以下概念 1 模式匹配 模式匹配是資料結構中字串的一種基本運算,給定乙個子串,...

第五次作業 串的模式匹配

這個作業屬於哪個課程 資料結構 這個作業要求在 這個作業的目標 了解串大致的基本概念 掌握串的模式匹配演算法的實現以及其相關演算法的分析和編寫 學號2018204150 一 實驗目的 1 了解串的基本概念 2 掌握串的模式匹配演算法的實現 二 實驗預習 說明以下概念 1 模式匹配 模式匹配是資料結構...