- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法分析实验题目.doc
一、 算法设计与分析基础(21周前交,要求上交源代码,需要实验报告,语言不限)
编程实现:
1、 计算两个不全为0的非负整数m和n的最大公约数
(1) 用欧几里德算法实现;
(2) 用连续整数检测算法实现;
(3) 用质因数分解算法实现;
2、 Horspool算法(Page 195)
3、 BM算法(Page 197)
最大公约数定义:两个不全为0的非负整数m和n的最大公约数记为gcd(m,n),代表能够整除(即余数为0)m和n的最大正整数。
一、欧几里得算法
第一步:如果n=0,返回m的值作为结果,同时过程结束;否则进入第二步
第二步:m除以n,将余数赋给r
第三步:将n的值赋给m,将r的值赋给n,返回第一步
算法 Euclid(m,n)
//使用欧几里德算法计算gcd(m,n)
//输入:两个不全为0的非负整数m,n
//输出:m,n的最大公约数
if n=0
return n
while n!=0 do
r←m mod n
m←n
n← r
return n
二、连续整数检测法
第一步:将min{m,n}的值赋给t
第二步:m除以t,如果余数为0,进入第三步;否则进入第四步
第三步:n除以t,如果余数为0,返回t的值作为结果;否则进入第四步
第四步:把t的值减1。返回第二步
算法:
//使用连续整数检测法计算gcd(m,n)
//输入:两个不全为0的非负整数m,n
//输出:m,n的最大公约数
if n=0 return n
t=min{m,n}
while t0 do
if (m mod t)==0
if (n mod t)==0
return t
else t=t-1
else t=t-1
return t
三、中学中计算gcd(m,n)的过程
第一步:找到m的所有质因数
第二步:找到n的所有质因数
第三步:从第一步和第二步求得的质因数分解式中找出所有的公因数(如果p是一个公因数,而且在m和n的质因数分解式分别出现过pm和pn次,那么应该将p重复min{pm,pn}次)
第四步:将第三步中找到的质因数相乘,其结果作为给定数字的最大公约数
Horspool算法
这个算法是由R.Nigel Horspool在1980年提出的。其滑动思想非常简单,就是从后往前匹配模式串,若在某一位失去匹配,此位对应的文本串字符为c,那就将模式串向右滑动,使模式
串之前最近的c对准这一位,再从新从后往前检查。那如果之前找不到c怎么办?那好极了,直接将整个模式串滑过这一位。
例如:
文本串:abdabaca
模式串:baca
倒数第2位失去匹配,模式串之前又没有d,那模式串就可以整个滑过,变成这样:
文本串:abdabaca
模式串: baca
发现倒数第1位就失去匹配,之前1位有c,那就向右滑动1位:
文本串:abdabaca
模式串: baca
实现代码:
#include iostream
#include vector
#include string
#include cstdlib
using namespace std;
int Horspool_match(const string S,const string M,int pos);
int main( )
{
string S=abcdefghabcdefghhiijiklmabc;
string T=hhiij;
int pos = Horspool_match(S,T,3);
cout\nposendl;
system(pause);
return 0;
}
int Horspool_match(const string S,const string M,int pos)
{
int S_len = S.size();
int M_len = M.size();
int Mi = M_len-1,Si= pos+Mi;//这里的串的第1个元素下标是0
if( (S_len-pos) M_len )
return -1;
while ( (Mi-1) (SiS_len) )
{
if (S[Si] == M[
您可能关注的文档
- 病句辨析技巧.doc
- 病毒的演变和发展.doc
- 病理学与病理生理学专业硕士研究生培养方案.doc
- 病理学病例分析教学法探讨.doc
- 病理实验室教学.doc
- 病理生理学课件_绪论.ppt
- 痔疮的危害.doc
- 癌症预防知识.doc
- 癌痛病人心理护理“五法”.ppt
- 白色污染的调查.doc
- 2024-2025学年度公安消防队考前冲刺练习及答案详解【夺冠】.docx
- 2024年公安消防队考前冲刺练习附完整答案详解(精选题).docx
- 2024公安消防队高频难、易错点题附参考答案详解(基础题).docx
- 2024-2025学年度高考试卷含完整答案详解【全国通用】.docx
- 2024-2025学年度高考模拟试题附参考答案详解【满分必刷】.docx
- 2024公安消防队预测复习及答案详解(名校卷).docx
- 2024-2025学年高考经典例题及答案详解(最新).docx
- 2024公安消防队真题附答案详解【综合卷】.docx
- 2024-2025学年公安消防队高频难、易错点题完整答案详解.docx
- 2024-2025学年度高考复习提分资料含完整答案详解【名师系列】.docx
文档评论(0)