国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

(C語(yǔ)言)數(shù)據(jù)結(jié)構(gòu)算法-病毒感染檢測(cè)(BF算法&&KMP算法)

這篇具有很好參考價(jià)值的文章主要介紹了(C語(yǔ)言)數(shù)據(jù)結(jié)構(gòu)算法-病毒感染檢測(cè)(BF算法&&KMP算法)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

病毒感染檢測(cè):

醫(yī)學(xué)研究者最近發(fā)現(xiàn)了某些新病毒,得知它們的DNA序列都是環(huán)狀的。為了快速檢測(cè)出患者是否感染了相應(yīng)的病毒,研究者將患者的DNA和病毒的DNA均表示成一些字母組成的字符串序列,然后檢測(cè)某種病毒DNA序列是否在患者的DNA序列中出現(xiàn)過(guò),如果出現(xiàn)過(guò),則此人感染了該病毒,否則沒(méi)有感染。

例如,假設(shè)病毒的DNA序列為baa,患者1的DNA序列為aaabbba,則感染,患者2的DNA序列為babbba,則未感染。(人的DNA序列是線性的,病毒的DNA序列是環(huán)狀的)

分析:

該案例實(shí)際上就是模式匹配問(wèn)題,將患者的DNA序列作為主串,病毒的DNA序列作為模式串,特殊之處在于病毒的DNA序列是環(huán)狀的??捎肂F算法或KMP算法。

算法步驟:

(1)設(shè)置標(biāo)志變量flag,用來(lái)標(biāo)志是否匹配成功,初值為0表示未匹配;

(2)病毒DNA序列的長(zhǎng)度是m,將存儲(chǔ)病毒DNA序列的字符串長(zhǎng)度擴(kuò)大為2m,將病毒DNA序列連續(xù)存儲(chǔ)兩次,形成長(zhǎng)度為2m的串V;

(3)對(duì)串V循環(huán)m次,重復(fù)執(zhí)行以下操作:

    1. 從V中依次取得每個(gè)長(zhǎng)度為m的病毒DNA環(huán)狀字符串,作為模式串T;
    2. 調(diào)用BF算法,將模式串T和主串S(患者的DNA序列)進(jìn)行模式匹配,將匹配結(jié)果返回賦值給flag;
    3. 若flag非0,表示匹配成功,中止循環(huán)表明該患者感染了病毒。

代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-718470.html

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void bd(char *T, char *S, int &len_T, int &len_S ) {	//序列處理

	printf("輸入病毒串:");
	gets(T);

	printf("\n輸入患者串:");
	gets(S);

	strcat(T, T);	//病毒串序列展開(kāi) 例:abb變?yōu)閍bbabb

	len_T = strlen(T);
	len_S = strlen(S);

}

int bf(char *V, char *S, int &len_S) {	//bf算法

	int i = 0, j = 0, len_V = 3;
	while (i < len_S && j < len_V) {
		if (S[i] == V[j]) {    //判斷環(huán)狀病毒串和患者串字符是否匹配
			i++;
			j++;
		} else {
			i = i - j + 1;    //患者串回退至不匹配字符的下一個(gè)
			j = 0;            //環(huán)狀病毒串回退至開(kāi)頭
		}
	}
	if (j == len_V) {    
		return 1;
	} else {
		return 0;
	}
}

void Getnext(int *next, char *S, int &len_S) {	//獲取next數(shù)組
	next[0] = -1;    //next數(shù)組前兩個(gè)固定賦值
	next[1] = 0;
	int i = 1;    //i為患者串下標(biāo) j為環(huán)狀病毒串下標(biāo)
	int j = 0;    
	while (i < len_S) {
		if ((j == 0) || (S[i] == S[j])) {
			i++;
			j++;
			next[i] = j;	//next數(shù)組存儲(chǔ)的值為j回退的字符數(shù)組的下標(biāo)
		} else {
			j = next[j];
		}
	}
}
/*例
string:	  a b a b a a b
next:    -1 0 1 1 2 3 1
sub:      0 1 2 3 4 5 6

*/

int kmp(char *V, char *S, int &len_S) {	//kmp算法
	int i = 0, j = 0, len_V = 3;
	int *next = (int *)malloc(sizeof(int) * len_S);	//申請(qǐng)空間
	Getnext(next, S, len_S);
	while (i < len_S && j < len_V) {
		if ((j == -1) || (V[j] == S[i])) {
			j++;
			i++;
		} else {
			j = next[j];    //區(qū)別bf算法 回退位置不同 其他相同
		}
	}
	free(next);	//結(jié)束釋放內(nèi)存
	if (j == len_V) {
		return 1;
	} else {
		return 0;
	}
}

void xh(int len_S, int len_T, char *T, char *S) {	//檢測(cè)函數(shù)

	int flag;
	len_T /= 2;
	while (len_T ) {

		char V[3];    //環(huán)狀病毒串

		strncpy(V, T, 3);    //例:abb有三個(gè)環(huán)狀病毒串a(chǎn)bb、bba、bab

		//二選一 bf&kmp
//		flag = bf(V, S, len_S);		//使用bf算法
		flag = kmp(V, S, len_S);	//使用kmp算法

		if (flag) {		//判斷
			printf("感染\n");
			return ;
		}

		T++ ;
		len_T--;
	}
	printf("未感染\n");
}

int main(void) {
	char T[30], S[30];    //病毒串T 患者串S
	int len_T, len_S;    //串長(zhǎng)度
	bd(T, S, len_T, len_S);
	xh(len_S, len_T, T, S);
}

到了這里,關(guān)于(C語(yǔ)言)數(shù)據(jù)結(jié)構(gòu)算法-病毒感染檢測(cè)(BF算法&&KMP算法)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 算法復(fù)現(xiàn) - 病毒感染檢測(cè)(案例4.1算法4.5)

    第1關(guān):案例4_1 病毒感染檢測(cè)

    2024年02月06日
    瀏覽(23)
  • 勒索病毒最新變種.halo勒索病毒來(lái)襲,如何恢復(fù)受感染的數(shù)據(jù)?

    勒索病毒最新變種.halo勒索病毒來(lái)襲,如何恢復(fù)受感染的數(shù)據(jù)?

    摘要: .halo勒索病毒已成為數(shù)字世界中的威脅,通過(guò)高級(jí)加密技術(shù)將文件鎖定,并要求支付贖金。本文91數(shù)據(jù)恢復(fù)將深入介紹.halo勒索病毒的工作原理,提供解鎖被感染文件的方法,以及探討如何有效預(yù)防這一威脅。如果您正在經(jīng)歷勒索病毒數(shù)據(jù)恢復(fù)的困境,我們?cè)敢馀c您分享

    2024年02月09日
    瀏覽(17)
  • 勒索病毒最新變種.faust勒索病毒來(lái)襲,如何恢復(fù)受感染的數(shù)據(jù)?

    勒索病毒最新變種.faust勒索病毒來(lái)襲,如何恢復(fù)受感染的數(shù)據(jù)?

    引言: 隨著我們進(jìn)入數(shù)字化時(shí)代,數(shù)據(jù)的重要性變得愈發(fā)顯著,而網(wǎng)絡(luò)安全威脅也日益增加。.faust勒索病毒是其中一種備受惡意分子鐘愛(ài)的危險(xiǎn)工具,它通過(guò)加密用戶文件并勒索高額贖金來(lái)對(duì)個(gè)人和組織發(fā)起攻擊。本文將深入探討.faust勒索病毒的威脅,包括其工作原理、如何

    2024年02月21日
    瀏覽(23)
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法

    冒泡排序 例題 順序表下的 冒泡排序 注意:冒泡排序 穩(wěn)定,最多執(zhí)行n(n-1)/2次 選擇排序不穩(wěn)定,平均比較次數(shù)n(n-1)/2 直接插入排序,是在有序基礎(chǔ)上,速度最快且穩(wěn)定的排序方法。 希爾排序是 不穩(wěn)定的 順序查找 二分查找(非遞歸) 二分查找(遞歸) 數(shù)組 鏈表 查詢 快 慢

    2024年02月06日
    瀏覽(92)
  • 數(shù)據(jù)結(jié)構(gòu)——排序算法(C語(yǔ)言)

    數(shù)據(jù)結(jié)構(gòu)——排序算法(C語(yǔ)言)

    本篇將詳細(xì)講一下以下排序算法: 直接插入排序 希爾排序 選擇排序 快速排序 歸并排序 計(jì)數(shù)排序 排序的概念 排序:所謂排序,就是使一串記錄,按照其中的某個(gè)或某寫的大小,按照遞增或遞減0排列起來(lái)的操作。 穩(wěn)定性的概念 假定在待排序的記錄序列中,存在多個(gè)

    2024年02月08日
    瀏覽(102)
  • 數(shù)據(jù)結(jié)構(gòu)和算法——用C語(yǔ)言實(shí)現(xiàn)所有圖狀結(jié)構(gòu)及相關(guān)算法

    數(shù)據(jù)結(jié)構(gòu)和算法——用C語(yǔ)言實(shí)現(xiàn)所有圖狀結(jié)構(gòu)及相關(guān)算法

    本文所有代碼均在倉(cāng)庫(kù)中,這是一個(gè)完整的由純C語(yǔ)言實(shí)現(xiàn)的可以存儲(chǔ)任意類型元素的數(shù)據(jù)結(jié)構(gòu)的工程項(xiàng)目。 首先是極好的工程意識(shí),該項(xiàng)目是一個(gè)中大型的CMake項(xiàng)目,結(jié)構(gòu)目錄清晰,通過(guò)這個(gè)項(xiàng)目可以遇見(jiàn)許多工程問(wèn)題并且可以培養(yǎng)自己的工程意識(shí)。 其次是優(yōu)秀的封裝性(

    2024年02月06日
    瀏覽(1449)
  • Mallox勒索病毒最新變種.malox勒索病毒來(lái)襲,如何恢復(fù)受感染的數(shù)據(jù)?

    Mallox勒索病毒是一種針對(duì)計(jì)算機(jī)系統(tǒng)的惡意軟件,能夠加密受感染計(jì)算機(jī)上的文件。最近,新的Mallox病毒變種.malox勒索病毒被發(fā)現(xiàn)并引起了關(guān)注,.malox勒索病毒這個(gè)后綴已經(jīng)是Mallox勒索病毒家族的第十幾個(gè)升級(jí)變種了,這個(gè)后綴的加密占比更高,導(dǎo)致數(shù)據(jù)的修復(fù)難度再次升級(jí)

    2024年02月06日
    瀏覽(18)
  • C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)--棧 括號(hào)匹配算法

    C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)--棧 括號(hào)匹配算法

    今天這一期使用棧來(lái)完成括號(hào)匹配算法 ① 棧結(jié)構(gòu) ② 初始化棧 ③ 入棧 ④ 出棧 ⑤ 判斷棧是否為空 ⑤ 括號(hào)匹配 完整代碼: 結(jié)果: (1)括號(hào)序列為char str[]={\\\'(\\\',\\\'{\\\',\\\'[\\\',\\\']\\\',\\\'}\\\',\\\')\\\'}; (2)括號(hào)序列為char str1[]={\\\'{\\\',\\\'(\\\',\\\'}\\\',\\\']\\\'}; ? ?

    2024年02月05日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)與算法——排序(C語(yǔ)言實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)與算法——排序(C語(yǔ)言實(shí)現(xiàn))

    ???????????????? ???????????????? ???????????????????????????????? ???????????????????????????????? ???? 追風(fēng)趕月莫停留 ???? ???????????????????????????????? ???? 平蕪盡處是春山

    2024年04月09日
    瀏覽(98)
  • C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)與算法 I

    C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)與算法 I

    因?yàn)橹皩懰惴ǘ际怯肅++,也有了些C++基礎(chǔ),變量常量數(shù)據(jù)類型就跳過(guò)去吧。 首先是環(huán)境,學(xué)C++時(shí)候用Clion,C語(yǔ)言也用它寫吧~ 新建項(xiàng)目,選C執(zhí)行文件,語(yǔ)言標(biāo)準(zhǔn)。。。就先默認(rèn)C99吧,反正是測(cè)試環(huán)境,應(yīng)該問(wèn)題不大 直接運(yùn)行一手 嗯。。JB家的新UI。。真是。。。。。。。一

    2024年02月09日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包