這個作業屬於哪個課程
資料結構
這個作業要求在**
第五次作業:串的模式匹配
這個作業的目標
《了解串的基本概念;掌握串的模式匹配演算法的實現》
學號2018204113
1、了解串的基本概念
2、掌握串的模式匹配演算法的實現說明以下概念
1、模式匹配:模式匹配是資料結構中字串的一種基本運算,給定乙個子串,要求在某個字串中找出與該子串相同的所有子串。假設p是給定的子串,t是待查詢的字串,要求從t中找出與p相同的所有子串,這個問題成為模式匹配問題。p稱為模式,t稱為目標。如果t中存在乙個或多個模式為p的子串,就給出該子串在t中的位置,稱為匹配成功;否則匹配失敗。
2、bf演算法:bf演算法,即暴力演算法,是普通的模式匹配演算法,bf演算法的思想就是將目標串s的第乙個字元與模式串t的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和 t的第二個字元;若不相等,則比較s的第二個字元和t的第乙個字元,依次比較下去,直到得出最後的匹配結果。
3、kmp演算法: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()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)
return(pos);
else
return(-1);
}void getnext(sqstring *t,int next)else
j=next[j];
}}int index_kmp(sqstring *s,sqstring *t,int start,int next)
else
j=next[j];
if(j>=t->length)
return(i-j);
else
return(-1);
}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演算法有了初步的掌握,但是具體演算法還需要繼續加深學習。
第五次作業
一 問題及 include using namespace std class time void add a minute void add an hour void add seconds int n void add minutes int n void add hours int n voi...
第五次作業
當我們在討論多型性的時候,通常會用過載函式進行舉例,而這次發現的問題主要在過載運算子上,因此我希望通過對過載運算子的測試來得出乙個結論。我們想知道為什麼前置運算子和後置運算子會有區別,因此設計了乙個實驗來證明它 得到最終結果如預期那樣。通過這次作業,我能感受到前置和後置運算子的區別,通過x 和y x...
第五次作業
insert into student sno,sname,s sdept,sage values 201215128 陳冬 男 is 18 建表時規定學號唯一,而在建表時已經加入了該學號,所以不能有兩個相同學號。3.70 insert into student sno,sname,s sdept,...