資料結構實驗 病毒檢測(KMP實現)

2021-08-20 09:59:32 字數 1163 閱讀 9414

//此**的nextval陣列以0開頭

//需要在工程下建立「病毒感染檢測輸入資料.txt」檔案

#include

#include

#include

using namespace std;

typedef structhstring; 

int* getnextval(const char *s, int len)

void virus_detection()

{ int num,m,flag,i,j; char vir[600];

hstring virus,person,temp;

ifstream infile("病毒感染檢測輸入資料.txt");

ofstream outfile("病毒感染檢測輸出結果.txt");

infile>>num;//讀取待檢測的任務數

while(num--) //依次檢測每對病毒dna和人的dna是否匹配

{infile>>virus.ch+1;//讀取病毒dna序列

infile>>person.ch+1;//讀取人的dna序列

strcpy(vir,virus.ch);

virus.len=strlen(virus.ch)-1;

person.len=strlen(person.ch)-1;

flag=0;//用來標識是否匹配,初始為0,匹配後為非0

m=virus.len;

for(i=m+1,j=1;j<=m;j++) virus.ch[i++]=virus.ch[j];

//因病毒為環狀,故將病毒的長度擴大2倍

//即可線性取到所有長度為virus.len的字串

virus.ch[2*m+1]='\0'; //新增結束符號

for(i=0;i/*

病毒感染檢測輸入資料.txt

3

baa    bbaabbba

baa    aaabbbba

aabb  abceaabb

*/

資料結構 KMP

今天下午實現了kmp演算法 這個演算法算是奇妙,本機器看了10遍左右才基本理解 演算法的核心就是求出next,再依次根據next跳轉,這樣就能線性地匹配出字串 這裡推薦一篇博文說得很好,深入淺出,只是在next陣列是從1開始的,而pattern是從0起始,這也算是前幾次學習的時候沒有理解的地方 今天...

資料結構實驗之串三 KMP應用

time limit 1000ms memory limit 65536k 有疑問?點這裡 有n個小朋友,每個小朋友手裡有一些糖塊,現在這些小朋友排成一排,編號是由1到n。現在給出m個數,能不能唯一的確定一對值l和r l r 使得這m個數剛好是第l個小朋友到第r個小朋友手裡的糖塊數?首先輸入乙個整數...

資料結構實驗之串三 KMP應用

time limit 1000ms memory limit 65536k 有n個小朋友,每個小朋友手裡有一些糖塊,現在這些小朋友排成一排,編號是由1到n。現在給出m個數,能不能唯一的確定一對值l和r l r 使得這m個數剛好是第l個小朋友到第r個小朋友手裡的糖塊數?首先輸入乙個整數n,代表有n個小...