数据结构课设:基于字符串模式匹配算法的病毒感染检测问题

简介: 数据结构课设:基于字符串模式匹配算法的病毒感染检测问题

@TOC

一、Chapter One【实验题目】

1.【实验目的】

1.掌握字符串的顺序存储表示方法。2.掌握字符串模式匹配算法BF算法或KMP算法的实现。

2.【实验内容】

问题描述医学研究者最近发现了某些新病毒,通过对这些病毒的分析,得知它们的DNA序列都是环状的。现在研究者已收集了大量的病毒DNA和人的DNA数据,想快速检测出这些人是否感染了相应的病毒。为了方便研究,研究者将人的DNA和病毒DNA均表示成由一些字母组成的字符串序列,然后检测某种病毒DNA序列是否在患者的DNA序列中出现过,如果出现过,则此人感染了该病毒,否则没有感染。例如,假设病毒的DNA序列为baa,患者1的DNA序列为aaabbba,则感染;患者2的 DNA序列为babbba,则未感染。(注意:人的DNA序列是线性的,而病毒的DNA序列是环状的。)

输入要求多组数据,每组数据有1行,为序列A和B,A对应病毒的DNA序列,B对应人的 DNA序列。A和B都为“0”时输入结束。输出要求对于每组数据输出1行,若患者感染了病毒输出“YES"”,否则输出“NO”。输人样例

abbab abbabaab
baa cacdvcabacsd
abc def
0 0

输出样例

YES
YES
NO

3.【实验提示】

此实验内容即要求实现主教材的案例4.1,具体实现可参考算法4.5。算法4.5是利用BF算法来实现字符串的模式匹配过程的,效率较低,可以利用KMP算法完成模式匹配以提高算法的效率。读者可以模仿算法4.5,利用KMP算法来完成病毒感染检测的方案。

二、Chapter Two【实验分析】

1.实验整体思路:

在本题中,我们采用BF算法来实现对病毒检测问题的描述,本程序的难点是如何找出病毒DNA环状字符串的所有展开字符串。原理:首先要传递参数到int judge函数中,将字符串长度为n的病毒DNA扩展为长度为2n的字符串,再用双重循环输出长度为m的病毒展开字符串。调用BF函数进行模式匹配,返回判断结果到主函数中。虑到程序需要输入输出多组数据,有两种方法可以实现:1、用二维数组进行字符串存储,并且同时进行字符串匹配,并将匹配结果输出。2、程序使用一维数组存储,在输入完一组数据后存储在缓存区内,然后将判断结果存入数组s中,最后根据数组s统一输出判断结果。本程序使用方法二。

实验详细步骤:

2.数据结构定义

定义全局变量数组V,D。char V[20]; //病毒DNA数组char D[20]; //人的DNA数组定义标识符YES为1,标识符NO为0#define YES 1#define NO 0

3.主要功能模块设计

(1)int BFjudge()函数:找出病毒DNA环状字符串的所有展开字符串,char D, char V:形参D是数组D,形参V是数组V。(2)int BF()函数:利用BF算法进行模式匹配char D, char :形参D是数组D,形参V是环状字符串的展开字符串。(3)int PRINThand()函数:输入多组数据,每输入一组数据就将匹配结果存进数组s中,最后统一输出检测结果。

4.主要步骤描述

(1)首先引用我们的头文件和需要的全局变量;(2)然后用模式匹配函数BF,进行模式匹配;(3)使用循环展开函数,将字符串长度为m的病毒DNA扩展为长度为2m的字符串;(4)再创建输入函数,输入病毒DNA及人的DNA,程序使用一维数组存储,在输入完一组数据后存储在缓存区内,然后将判断结果存入数组s中,最后根据数组s统一输出判断结果。;(5)最后通过主函数,调用我们之前已经构建好的函数,实现我们的判断功能,将结果进行输出。

三、Chapter Three【运行截图】

四、Chapter Four【源码详析】

include <stdio.h> //头文件

include

include <string.h>

define _CRT_SECURE_NO_WARNINGS

define YES 1

define NO 0

//全局变量部分
char V[20]; //病毒DNA字符串
char D[20]; //人的DNA字符串

//主要功能函数的具体实现及说明
//模式匹配函数(BF)
int BF(char D, char V)
{ //用BF算法进行模式匹配

int i=0,j=0;
while (i<strlen(D) && j<strlen(V))

{

if (D[i]==V[j]) 
{
    i++; j++;

}

  else
  {
         i = i-j+1;
         j = 0;
  }

}

if (j>=strlen(V)) return YES;
else return NO;

}

//循环展开函数(BFjudge)
int BFjudge(char D, char V)
{
int flag = 0;
int i,j,m;
char temp[20];
m = strlen(V);
for(i=m,j=0;j<m;j++) V[i++]=V[j];
V[2*m] = '\0'; //将字符串长度为m的病毒DNA扩展为长度为2m的字符串

for(i=0; ;i++)
{

  for(j=0;j<m;j++)    temp[j] = V[i+j];   
  temp[m] = '\0';  //循环展开环状病毒DNA
  flag = BF(D,temp);  //调用BF模块进行模式匹配
  if (flag) break;
  else if (i>=m) return NO;  //所有展开字符串均匹配失败
  else continue;

}
return YES;
}

// 程序使用一维数组存储,在输入完一组数据后存储在缓存区内,
// 然后将判断结果存入数组s中,最后根据数组s统一输出判断结果。
int PRINThand()
{
FILE fp1,fp2;

int i=0,k=0;
int s[20]; 

printf("\n请输入病毒DNA及人的DNA(输入0 0结束):\n");

while(1)

{           
  scanf("%s", &V[i]);
  scanf("%s", &D[i]);  
  if(V[i]=='0' && D[i]=='0') break;
  
    if(BFjudge(D, V)==1)   s[k]=1;
else   s[k]=0;
k++;
}

printf("病毒感染检测输出结果:\n");
for(k=0;s[k]<2;k++)
{

if(s[k]==1)  printf("YES\n");
  else  printf("NO\n");

}

return 0;

}

//主函数
int main()
{
int key = 0, Num;
while(1)
{
printf("欢迎使用病毒感染检测系统\n");
PRINThand(); break;
}
}

目录
相关文章
|
17天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
28 1
|
21天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
65 4
|
18天前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
18天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
26天前
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
88 23
|
26天前
|
算法
数据结构之蜜蜂算法
蜜蜂算法是一种受蜜蜂觅食行为启发的优化算法,通过模拟蜜蜂的群体智能来解决优化问题。本文介绍了蜜蜂算法的基本原理、数据结构设计、核心代码实现及算法优缺点。算法通过迭代更新蜜蜂位置,逐步优化适应度,最终找到问题的最优解。代码实现了单链表结构,用于管理蜜蜂节点,并通过适应度计算、节点移动等操作实现算法的核心功能。蜜蜂算法具有全局寻优能力强、参数设置简单等优点,但也存在对初始化参数敏感、计算复杂度高等缺点。
58 20
|
17天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
46 1
|
25天前
|
机器学习/深度学习 监控 算法
基于反光衣和检测算法的应用探索
本文探讨了利用机器学习和计算机视觉技术进行反光衣检测的方法,涵盖图像预处理、目标检测与分类、特征提取等关键技术。通过YOLOv5等模型的训练与优化,展示了实现高效反光衣识别的完整流程,旨在提升智能检测系统的性能,应用于交通安全、工地监控等领域。
|
26天前
|
机器学习/深度学习 算法 C++
数据结构之鲸鱼算法
鲸鱼算法(Whale Optimization Algorithm,WOA)是由伊朗研究员Seyedali Mirjalili于2016年提出的一种基于群体智能的全局优化算法,灵感源自鲸鱼捕食时的群体协作行为。该算法通过模拟鲸鱼的围捕猎物和喷出气泡网的行为,结合全局搜索和局部搜索策略,有效解决了复杂问题的优化需求。其应用广泛,涵盖函数优化、机器学习、图像处理等领域。鲸鱼算法以其简单直观的特点,成为初学者友好型的优化工具,但同时也存在参数敏感、可能陷入局部最优等问题。提供的C++代码示例展示了算法的基本实现和运行过程。
45 0
|
26天前
|
算法 vr&ar 计算机视觉
数据结构之洪水填充算法(DFS)
洪水填充算法是一种基于深度优先搜索(DFS)的图像处理技术,主要用于区域填充和图像分割。通过递归或栈的方式探索图像中的连通区域并进行颜色替换。本文介绍了算法的基本原理、数据结构设计(如链表和栈)、核心代码实现及应用实例,展示了算法在图像编辑等领域的高效性和灵活性。同时,文中也讨论了算法的优缺点,如实现简单但可能存在堆栈溢出的风险等。
39 0