网站大量收购闲置独家精品文档,联系QQ:2885784924

算法分析实验题目.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析实验题目算法分析实验题目

一、 算法设计与分析基础(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_l

文档评论(0)

yyanrlund + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档