第五次作業 串的模式匹配

2022-07-15 18:45:10 字數 2682 閱讀 3047

這個作業屬於哪個課程

資料結構

這個作業要求在**

這個作業的目標

了解串大致的基本概念、掌握串的模式匹配演算法的實現以及其相關演算法的分析和編寫

學號2018204150

一、實驗目的

1、了解串的基本概念

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

二、實驗預習

說明以下概念

1、模式匹配:模式匹配是資料結構中字串的一種基本運算,給定乙個子串,要求在某個字串中找出與該子串相同的所有子串,這就是模式匹配。假設p是給定的子串,t是待查詢的字串,要求從t中找出與p相同的所有子串,這個問題成為模式匹配問題。p稱為模式,t稱為目標。如果t中存在乙個或多個模式為p的子串,就給出該子串在t中的位置,稱為匹配成功;否則匹配失敗。

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

3、kmp演算法:kmp演算法是一種改進的字串匹配演算法,其核心是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是通過乙個next()函式實現,函式本身包含了模式串的區域性匹配資訊。bf演算法在模式串中有多個字元和主串中的若干個連續字元比較都相等,但最後乙個字元比較不相等時,主串的比較位置需要回退。kmp演算法在上述情況下,主串位置不需要回退,從而可以大大提高效率。

三、實驗內容和要求

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()sqstring;

int index_bf(sqstring *s,sqstring *t,int start);

void getnext(sqstring *t,int next);

int index_kmp(sqstring *s,sqstring *t,int start,int next);

void show_index();

int index_bf(sqstring *s,sqstring *t,int start)else

} if(j>t->length-1) return i-t->length+1;

return 0;

}void getnext(sqstring *t,int next)else

j=next[j];

}}int index_kmp(sqstring *s,sqstring *t,int start,int next)else

} if(j>=t->length) return i-j+1;

else return 0;

}void show_index(),i;

printf("\n***show index***\n");

printf("input string s:");

gets(s.data);

s.length=strlen(s.data);

printf("input string t:");

gets(t.data);

t.length=strlen(t.data);

printf("input start position:");

scanf("%d",&k);

printf("bf:\nthe result of bf is %d\n",index_bf(&s,&t,k));

getnext(&t,next);

printf("kmp:\n");

printf("next:");

for(i=0;i執行程式

輸入:abcaabbabcabaacbacba

abcabaa

1執行結果:

四、實驗小結

通過本次實驗,熟練掌握了串的基本概念,了解了串的模式匹配及其的基本功能及應用,進而通過對bf演算法和kmp演算法的編寫及分析,學習到了很多有用的技巧,這兩個演算法從原理的角度來講比較簡單,但是從演算法的編寫到實現這一過程卻具有一定程度的困難,如果不上網去查詢相應的資料,恐怕難以完成此次實驗,所以繼續加油!

第五次作業 串的模式匹配

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

第五次作業 串的模式匹配

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

第五次作業 串的模式匹配

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