假设病毒的DNA序列为baa,患者1的DNA序列为aaabbba,则感染。患者2的DNA序列为babbba,则未感染。(注意:人的DNA序列是线性的,而病毒的DNA序列是环状的)。

下面分别展示BF算法以及KMP算法的实现

注:KMP算法理解起来比较困难,若想简单理解原理,则可参考天勤的讲解

BF算法:

#include <iostream>
#include <string>
using namespace std;int index_BF(const string &str1, const string &str2, int pos);int main(){int pos = 0;string str1,str2;while(cin >> str2 >> str1){if(str1 == "0" || str2 == "0")break;int result = index_BF(str1,str2,pos);if(result != -1){cout << "YES " << result << endl;}else{cout << "NO" << endl;}}}int index_BF(const string &str1, const string &str2, int pos){int i = pos;int j= 0;int len1 = str1.size();int len2 = str2.size();while(i<len1 && j<len2){if(str1[i] == str2[j]){i++;j++;}else{i = i - j + 1;j = 0;}}if(j >= len2)return i-len2;elsereturn -1;}

KMP算法:

 #include<iostream>#include<cstring>#include<string>#include<fstream>using namespace std;void get_next(string str2,int *next){int i,j;i=1;j=0;next[1]=0;while(i<str2.size()){if(j==0||str2[i]==str2[j]){++i;++j;if(str2[i]!=str2[j])next[i]=j;elsenext[i]=next[j];}elsej=next[j];}}int kmp(string &str1,string &str2,int pos){int i=pos;int j=0;int next[255];get_next(str2,next);int len1=str1.size();int len2=str2.size();while(i<len1&&j<len2){if(j==0||str1[i]==str2[j]){i++;j++;}else{j=next[j];}}if(j>=len2)return i-len2;elsereturn -1;}int main(){int pos=0    ;string str1;string str2;while(cin >>str2>>str1){if(str1=="0"&&str2=="0")break;int result=kmp(str1,str2,pos);if(result!=-1)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}return 0;}

数据结构实验病毒感染检测问题相关推荐

  1. 数据结构实验病毒感染检测问题(C++)

    医学研究者最近发现了某些新病毒,通过对这些病毒的分析,得知他们的DNA序列都是环状的.现在研究者已收集了大量的病毒DNA和人的DNA数据,想快速检测出这些人是否感染了相应的病毒.为了方便研究,研究者将 ...

  2. 数据结构实验——病毒检测(KMP实现)

    //此代码的NextVal数组以0开头 //需要在工程下建立"病毒感染检测输入数据.txt"文件 #include<iostream> #include<fstr ...

  3. (C语言)数据结构算法-病毒感染检测(BF算法KMP算法)

    病毒感染检测: 医学研究者最近发现了某些新病毒,得知它们的DNA序列都是环状的.为了快速检测出患者是否感染了相应的病毒,研究者将患者的DNA和病毒的DNA均表示成一些字母组成的字符串序列,然后检测某种 ...

  4. 数据结构之病毒感染检测问题

    问题描述: 医学研究者最近发现了某新病毒,通过对这些病毒的分析,得知他们的DNA序列都是环状的.现在研究者已收集了大量 的病毒DNA和人的DNA数据,想快速检测出这些人是否感染了相应的病毒.为了研究方 ...

  5. 数据结构——基于字符串模式匹配算法的病毒感染检测

    实验四 基于字符串模式匹配算法的病毒感染检测 [实验目的] 1.掌握字符串的顺序存储表示方法. 2.掌握字符串模式匹配BF算法和KMP算法的实现. [实验内容] 问题描述 医学研究者最近发现了某些新病 ...

  6. 数据据结构实验4《基于字符串模式匹配算法的病毒感染检测》

    (visual studio 2019可运行) 输入及输出要求见<数据结构C语言(第二版)>严蔚敏版 [本文仅用于啥都看不懂还想交作业选手] //KMP求解基于字符串模式匹配算法的病毒感染 ...

  7. 广州大学 数据结构实验报告

    数据结构 实验一 一.实验目的: 1.线性表的链表实现:遍历.查找.插入.删除.翻转 2.栈的链式存储结构实现:入栈.出栈 3.队列的链式存储结构的实现:入队.出队 4.线性表.栈和队列的应用实现 二 ...

  8. 数据结构实验之链表五:单链表的拆分-sdut

    数据结构实验之链表五:单链表的拆分 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 输入N个 ...

  9. SDUT OJ 数据结构实验之排序一:一趟快排

    数据结构实验之排序一:一趟快排 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...

  10. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

最新文章

  1. FPGA之道(78)静态时序分析(四)内部时钟相关时序分析
  2. WINCE config.bib文件中的FSRAMPERCENT的意义
  3. 【PC工具】文件压缩解压工具winrar解压缩装机必备软件,winRAR5.70免费无广告
  4. ping程序和tracert(traceroute)背后的故事--ICMP协议
  5. linux usb xhci ehci,ehci和xhci有什么区别
  6. android重新编译res,使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...
  7. MySQL5.5安装版安装教程
  8. 1、position用法技巧,2、CSS 属性 选择器,3、CSS 选择器
  9. handbrake下载太慢_handbrake使用教程
  10. 手机号码正则_正则表达式小白有这两个工具就够了 正则表达式生成工具
  11. ENSP模拟AC/AP配置
  12. 设计模式(三) 抽象工厂模式
  13. 查看linux主机防火墙列表,linux防火墙状态查看的方法实例
  14. 融合泊车占比超过60%,除了德赛西威,还有哪些本土供应商
  15. 暗6 雷电三接口突然失效解决办法
  16. 微信小程序注册流程详解
  17. Selenium+Python+Pycharm自动化环境搭建具体步骤
  18. 【智能车竞赛】第18届比赛规则整理以及往届对比
  19. import nose ImportError: No module named 'nose'
  20. VTK:体绘制裁剪——Clipping技术

热门文章

  1. asdm java设置,[小技巧] 在CISCO ASA 5505防火墙上开启ASDM图形界面
  2. 苹果cms播放器html,苹果cms 全局播放器dplayer带后台Dplayer播放器苹果CMSV10插件
  3. kali安装zmap
  4. 图片节点html,Qunee for HTML5 - 中文 : 节点图片
  5. 电商业务设计:社交电商产品核心设计
  6. 博信医药系统连接不到服务器,博信医药管理系统
  7. 微信小程序用什么工具开发(微信小程序开发工具介绍)
  8. PSPNet | 语义分割及场景分析
  9. 计算机名改为名字的拼音,批量转换中文文件名为拼音
  10. GO 语言的GOROOT 和GOPATH