二进制幂问题求解论.doc

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

《算法设计与分析》 实验报告 专业: 计算机科学与技术 班级: 0491102 学号: 2011211645、 2011211635、2011211634 姓名: 曹元、齐豫、金晓迎 题目名称: 二进制幂问题求解 指导老师: 于洪 2013/12/19 目录 二进制幂问题求解 1 1、引言............................................................................................................1 2、问题的提出 2 3、问题的解决 2 4、算法描述 4 5、数据结构介绍(定义,描述) 6、分析(实验,理论) 7、心得体会 8 8、参考文献 10 9、附录: 11 二进制幂问题求解 1、引言 为了满足人们对大数据量信息处理的渴望,为解决各种实际问题,算法学得到了飞速发展,动态规划、贪心算法、分治法等一系列运筹学模型纷纷运用到算法学中,产生了解决各种现实问题的有效算法。虽然设计一个好的求解算法更像是一门艺术而不像是技术,但仍然存在一些行之有效的、能够解决许多问题的算法设计方法,你可以使用这些方法来设计算法,并观察这些算法是如何工作的。一般情况下,为了获得更好的性能,必须对算法进行细致的调整。但是在某些情况下,算法经过调整后,性能仍无法达到要求,这时就必须寻求另外的方法来求解问题。 变治法是基于变换的思想,分为两个阶段:“变”阶段和“治”阶段,“变”即变换问题更容易求解,“治”即对变换后的问题求解。变治法包含了3中基本类型:实例化简、改变表现、问题化简,用框图表示如下: 2、问题的提出 我们经常会遇到这样的问题:已知x,求多项式 的值的问题,以及该问题的一个特例---计算。当用霍纳法则来计算,即当x=a是的值时,霍纳法则实际上就退化成了一种对a自乘的蛮力算法,其中还夹杂着一些无用的加法。为此,我们找到了基于改变表现思想的二进制幂算法。 3、问题的解决 设n是一正整数的二进制串,n=bI…bi…b0,则可用下面的多项式来计算n的值: 我们先应用霍纳法则来计算这个多项式的值: 但是, 因此,把这个累乘器的值初始化为a之后,我们可以扫描表示指数的比特串,并总是对累乘器的必威体育精装版值进行平方。而且,如果当前的比特位是1,还要把存储变量乘以a。这是计算的从左到右的二进制幂算法。 从右到左的二进制幂算法使用了相同的二进制多项式p(2)来表示n的值。但是并不像从左到右二进制幂算法那样对多项式运用霍纳法则,该算法以一种不同的方式来使用这个多项式: 因此,可以用各项 的积来计算,也就是连续项的积,其中跳过了那些二进制位为0的项。此外我们可以简单的对前面项的计算结果进行平方来计算,因为。所以。我们可以从最小值到最大值,计算a的所有这样的乘方,但我们只把那些相应的二进制位为1的项包括在累乘器中。 用从左到右的二进制幂算法计算,这里。因此有下面从左到右填写的表格: 用从右到左的二进制幂算法计算,得到如下从右到左填写的表格: 4、算法描述 (从左到右算法为代码 LeftRightBinaryExponentiation(a,b(n)) //用从左到右的二进制幂算法计算 //输入:一个数字a和二进制位bI,...,b0的列表b(n),这些位来自于一个正整数n的二进制展开式 //输出:的值 product←a for i←I-1 downto 0 do product←product*product if bi=1 product←product*a return product (从右到左算法为代码 RightLeftBinaryExponentiation(a,b(n)) //用从右到左的二进制幂算法计算 //输入:一个数字a和二进制位bI,...,b0的列表b(n),这些位来自于一个正整数n的二进制展开式 //输出:的值 term←a //初始化 if b0=1 product←a else product←1 for i←1 to I do term←term*term if bi=1 product←product*term return product 5、数据结构介绍(定义,描述) String s

文档评论(0)

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

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

1亿VIP精品文档

相关文档