大数相乘毕业论文.docVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大数相乘毕业论文

摘要 大整数乘法运算经常会遇到溢出或精度不够的问题,而在许多领域要求高精度大整数运算。因而,有很多人在这方面作过努力。大整数运算比较通用的方法有叠加法(小学生乘法)和分治法。叠加法与我们笔算乘法一样,用第一个数的每一位去乘第二个数的每一位,然后把运算结果按权值叠加;分治法是把大整数化为可直接运算的小整数,再进行乘法运算,最后把乘得的结果组合为所求结果。 本文在总结这两种方法的基础上,提出一种把叠加与分治相结合的方法——叠加分治法。叠加分治法吸收了叠加法和分治算法的优点。该算法基于分治思想,把大整数分解成较小整数(几十位),再用叠加法运算较小整数,最后把运算结果组合为所求的积。一方面,减少较小整数多次分解与组合带来的在时间上和空间上的开销;另一方面,避免大整数叠加运算在时间上与规模成级数增加开销。 最后,本文还设计了一个算法演示程序,对分治算法、叠加算法与本文提出的叠加分治法做出定量分析,并就它们的优劣和适用环境做出详尽阐述。 关键词 大整数、乘法、分治法、叠加法、叠加分治法 算法设计 叠加法 叠加算法就是通用的笔算算法思想。在两个大整数相乘中,它用第一个数的每一位去乘第二个数的每一位,再把运算结果按权值叠加,进位处理后,得到所求的结果。具体描述如下文所示。 将因数和表示如下: , 则和可以记为: , 因此,大整数乘法的计算公式为: ………………………(2.1) 的结果称为部分积,将、称为部分因子。 根据公式(2.1)的部分积,同时完成它们之间的累加,然后再计算权值更高的部分积,依次类推,直到计算出所有的部分积。 图2.1中,是权值为的部分积的累加之和,其计算方法如公式(2.2)所示: ………………………(2.) 图2.1叠加法大整数乘法算法 根据图2.1所描述的算法思想,得到如下伪代码描述的算法: Function Mult(X, Y){ //X和Y是记录两个整数的数组,返回结果为X和Y的乘积XYFor (i = 1; i len(x);i++) //乘积叠加运算 For (j = 1;j len(y);j++) R(i+j-1) += X(i) * Y(j) For (i = 1 ;i len(x) + len(y);i++) R(i) 向R(i+1) 进位 Return R }// Mult 算法 2.1 由公式(2.1)得,叠加算法共做次乘法。由2.1.1节和图2.1知,该算法还需做次加法运算和次进位处理。在计算时间主要由乘法决定的情况下,它的时间复杂度为: ………………………………………………(2.3)和分别花费单元,存储积需要个单元,因此该算法的空间复杂度为: ………………………………………………(2.4) 分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。分治法所能解决的问题一般具有以下几个特征:(1)该问题的规模缩小到一定的程度就可以容易地解决;(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;(3)利用该问题分解出的子问题的解可以合并为该问题的解;(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。?上述的第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;第二条特征是应用分治法的前提,它也是大多数问题可以满足的,此特征反映了递归思想的应用;第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑贪心法或动态规划法。第四条特征涉及到分治法的效率,如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题分治法的基本步骤分治法在每一层递归上都有三个步骤: 图2.2 分治技术(典型实例) (1)分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;(2)解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;(3)合并:将各个子问题的解合并为原问题的解。它的一般的算法设计模式如下:Divide-and-Conquer(P)if |P|≤n0? then return(ADHOC(P)) 将P分解为较小的子问题P1、P2、…、Pk for i←1 to k?do? yi ← Divide-and-Conquer(Pi) 递归解决PiT ← MERGE(y1,y2,…,yk) 合并子问题 Return(T) 其中|P|表示问题P的规模;为一阈值,表示当问题P的规模不超过时,问题已容易解出,不必再继续分解。ADHOC(P)是该分治法中的基本子算法,用于直接解小规模的问题P。因此,当P的规模不超过时,直接用算法ADHOC

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档