這個作業屬於哪個課程
這個作業要求在**
/homework/11392
這個作業的目標
掌握串的模式匹配演算法
學號2018204219
一、實驗目的
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 100typedef
struct
sqstring;
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;i)
sub->data[i]=s->data[start+i-1
]; sub->length=sublen;
}void
show_substring()
printf(
"\n***show over***\n");
}int
main()
}while
(n);
return0;
}
輸入:1
student
students
2computer data stuctures104
執行結果:
2、實現串的模式匹配演算法。補充下面程式,實現串的bf和kmp演算法。
#include#includeelse#define maxsize 100typedef
struct
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)
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);
}輸入:abcaabbabcabaacbacbavoid
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)
printf(
"%3d
",next[i]);
printf("\n
");printf(
"the result of kmp is %d\n
",index_kmp(&s,&t,k,next));
printf(
"\n***show over***\n");
}int
main()
abcabaa
1執行結果:
第五次作業 串的模式匹配
這個作業屬於哪個課程 這個作業要求在 homework 11392 這個作業的目標 了解串的基本概念 掌握串的模式匹配演算法的實現 學號2017205212 一 實驗目的 1 了解串的基本概念 2 掌握串的模式匹配演算法的實現 二 實驗預習 說明以下概念 1 模式匹配 模式匹配是資料結構中字串的一種...
第五次作業 串的模式匹配
這個作業屬於哪個課程 這個作業要求在 homework 11392 這個作業的目標 掌握串的模式匹配演算法 學號 2018204186 一 實驗目的 1 了解串的基本概念 2 掌握串的模式匹配演算法的實現 二 實驗預習 說明以下概念 1 模式匹配 模式匹配是資料結構中字串的一種基本運算,給定乙個子串...
第五次作業 串的模式匹配
這個作業屬於哪個課程 資料結構 這個作業要求在 這個作業的目標 了解串大致的基本概念 掌握串的模式匹配演算法的實現以及其相關演算法的分析和編寫 學號2018204150 一 實驗目的 1 了解串的基本概念 2 掌握串的模式匹配演算法的實現 二 實驗預習 說明以下概念 1 模式匹配 模式匹配是資料結構...