中北大学算法分析与设计实验报告一(BF算法)

1.实验名称

实验一 算法基础实验:数理基础与串匹配程序设计

2.实验目的

以字符串匹配问题为例,结合C等编程语言和链表、堆、栈等数据结构知识,基于BF算法对字符串匹配问题进行求解,深刻理解数学知识在算法复杂度分析中的使用方法,学会算法分析的技能,进一步增强代码的设计和工程化实现能力。

3.训练知识点集群

(1)根据实验内容设计算法伪代码进行算法描述;
(2)利用C++/C/Java等编程语言对算法伪代码进行工程化实现;
(3)输入测试用例对算法进行验证;
(4)列出算法时间复杂度模型并与计算机运行统计时间进行对比分析。

4.实验内容

(1)给定两个字符串S和T,利用BF算法,在主串S中查找子串T,并输出查找结果,输出时需以文字形式对查找结果进行定性说明;
(2)要求以C++/C/Java等编程语言进行实现;
(3)建立算法时间复杂度分析模型,并利用计算机统计该算法的执行效率。

5.实验原理

(1)问题描述

给定两个字符串S和T,利用BF算法,在主串S中查找子串,若主串中包含子串,则返回子串在主串中开始的位置,否则返回-1。

(2)算法思想

BF算法:
将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较主串S的第二个字符和T的第一个字符,重复上述过程,若T中的字符全部比较完毕,则说明本趟匹配成功。若最后一轮匹配的起始位置是n-m,则主串S中剩下的字符不足够匹配整个模式T,匹配失败。这个算法称为朴素的模式匹配算法,简称BF算法。

(3)算法描述

1.输入:主串S,模式T
2.输出:T在S中的位置
3.初始化主串比较的开始位置index=0;
4.在串S和串T中设置比较的起始下标i=0,j=0;
5.重复下述操作,直到S或T的所有字符均比较完毕:
如果S[i]等于T[j],则继续比较S和T的下一对字符;
否则,下一趟匹配的开始位置index++,回溯下标i=index,j=0;
如果T中所有字符均比较完,则返回匹配的开始位置index;否则返回0。

6.源代码实现

#include<stdio.h>
int BF(char S[],char T[])
{int index=0;int i=0,j=0;while((S[i]!='\0')&&(T[j]!='\0'))  {if(S[i]==T[j])
{i++,j++}else {index++;i=index;j=0;}//i和j分别回溯}if(T[j]=='\0') return index+1;//返回本趟匹配的开始位置(不是下标)else return 0;
}
int main(){char S[100], T[100];printf("请输入主串S(不超过100个字符):");
scanf("%s",S);printf("请输入子串T(不超过100个字符):");scanf ("%s",T);int index = BF(S, T); if(index == 0){printf("模式匹配失败!");}else{printf("模式匹配成功,子串%s在主串%s中首次匹配的位置是%d", T, S, index);}return 0;
}

7.实验结论及心得体会

(1)匹配过程

假设主串S为abcabcacb,子串T为abcac
第一趟匹配:abcabcacb
abcac
第二趟匹配:abcabcacb
abcac
第三趟匹配:abcabcacb
abcac
第四趟匹配:abcabcacb
abcac

(2)算法分析

设主串S长度为n,模式串T长度为m,在匹配成功的情况下,考虑最坏情况,即每趟不成功的匹配都发生在模式T的最后一个字符。
例如 :S=“aaaaaaaaaaaaaaab”
T=“aaab”
一般情况下,m<<n,因此最坏情况下的时间复杂度为O(m×n)。

(3)心得体会

通过本次实验,我理解了使用蛮力法解决问题的特点,深入了解了蛮力法的思想和编写程序的步骤,学会了如何使用蛮力法解决一个问题,掌握了如何找出问题的解空间以及如何遍历解空间。

中北大学算法分析与设计实验报告一(BF算法)相关推荐

  1. 中北大学算法分析与设计实验报告六(最大团问题)

    中北大学算法分析与设计实验报告六(最大团问题) 1.实验名称 实验六 回溯与分支限界算法实验 2.实验目的 题目:最大团问题 强化学生利用回溯算法和优化处理实际问题的能力. 3.训练知识点集群 (1) ...

  2. 算法分析与设计实验报告三——动态规划算法

    一.实验目的 掌握动态规划方法贪心算法思想 掌握最优子结构原理 了解动态规划一般问题 二.实验内容 编写一个简单的程序,解决0-1背包问题.设N=5,C=10,w={2,2,6,5,4},v={6,3 ...

  3. 算法分析与设计实验报告 ——二分搜索程序算法的实现

    算法分析与设计实验报告 --二分搜索程序算法的实现 实验目的及要求 1.理解分治算法的概念和基本要素: 2.理解递归的概念: 3.掌握设计有效算法的分治策略: 4.通过二分搜索技术学习分治策略设计技巧 ...

  4. 算法分析与设计实验报告——实现汽车加油问题

    算法分析与设计实验报告--实现汽车加油问题 目录: 算法分析与设计实验报告--实现汽车加油问题 一. 实验目的 二.实验要求 三. 实验原理 四. 实验过程(步骤) 五. 运行结果 六.实验分析与讨论 ...

  5. 算法分析与设计实验报告——二分搜索算法的实现

    算法分析与设计实验报告--二分搜索算法的实现 目录: 算法分析与设计实验报告--二分搜索算法的实现 一. 实验目的 二.实验要求 三. 实验原理 四. 实验过程(步骤) 五. 运行结果 六.实验分析与 ...

  6. 算法分析与设计实验报告

    计算机算法分析与设计实验报告 实验一:递归回溯 阶乘(Factorial) #include<iostream> using namespace std; int factorial(in ...

  7. 南京邮电大学c语言实验报告4,南京邮电大学算法设计实验报告——动态规划法...

    <南京邮电大学算法设计实验报告--动态规划法>由会员分享,可在线阅读,更多相关<南京邮电大学算法设计实验报告--动态规划法(12页珍藏版)>请在人人文库网上搜索. 1.实 验 ...

  8. 2019春第二次课程设计实验报告

    2019春第二次课程设计实验报告 一.实验项目名称: 贪吃蛇游戏编写: 二.实验项目功能描述: 这个实验主要是实现游戏的正常运行,实现的目标是对小蛇移动的控制, 同时对小蛇数据的保存,如何实现转弯的效 ...

  9. 2109春第一次课程设计实验报告

    2019春第一次课程设计实验报告 一.实验项目名称: 飞机游戏的编写 二.实验项目功能描述: 这个实验主要是实现游戏的正常运行,实现控制飞机的移动功能,增加其实用度, 同时还实现发射子弹和出现敌机的操 ...

最新文章

  1. DALL·E才发布两天就被复现?官方论文还没出,大神们就在自制代码和视频了
  2. 剑网三通过VR来进行游戏快乐,是不是会加倍?什么时候用得上?
  3. 【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式
  4. 解引用NULL为什么会导致程序挂死?
  5. C#中其他简单LINQ查询表达式的简单使用介绍
  6. Java基础---键盘录入工具(Scanner类)
  7. IO、NIO、AIO
  8. python上手_Python 上手
  9. PHP伪协议-文件包含漏洞常用的伪协议
  10. ctrl z推出查看文本怎么结束_最实用的10个电脑常用快捷键!Ctrl+Z的鬼才反向了解一下!...
  11. GML可视化学习(三)
  12. 恩施机器人编程_恩施武汉机器人激光切割机
  13. pdf书籍笔记助手,BookxNote使用记录
  14. 解决teamviewer达到设备数量上限
  15. 医学病理图片(SVS格式)的格式转换与显示——python实现
  16. 无法打开internet站点,ie无法打开站点的解决方法【图解】
  17. icns文件怎么打开_Mac快速生成icns图标文件 | kTWO-个人博客
  18. protobuf c语言版本
  19. 图文结合带你搞懂MySQL日志之Error Log(错误日志)
  20. CityMaker研修之路 02 伟景行(CityMaker)的倾斜之路

热门文章

  1. 第三天,【1124】接口,注册,登录
  2. 教你搭建个人/企业私有云盘-seafile
  3. 2018纪中集训游记
  4. python批量读取图片处理并保存
  5. git pull 和 git fecth 的区别
  6. 如何判断线性方程组是一个解还是无穷个解
  7. 【金猿信创展】恒生电子——全栈式信创解决方案,助力金融信创行稳致远
  8. Excel公式提取数据
  9. 【Linux】嵌入式Linux系统的移植(下篇:BootLoader,以U-Boot为例)
  10. Eclipse启动问题:A java runtime Environment(JRE) or java Development的解决办法