- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
求N!高精度算法-张一飞
求N!的高精度算法 本文中的算法主要针对Pascal语言 这篇文章的内容 你了解高精度吗? 你曾经使用过哪些数据结构? 你仔细思考过如何优化算法吗? 关于高精度 Pascal中的标准整数类型 高精度算法的基本思想 Pascal中的标准整数类型 高精度算法的基本思想 Pascal中的标准整数类型最多只能处理在-263~263之间的整数。如果要支持更大的整数运算,就需要使用高精度 高精度算法的基本思想,就是将无法直接处理的大整数,分割成若干可以直接处理的小整数段,把对大整数的处理转化为对这些小整数段的处理 数据结构的选择 每个小整数段保留尽量多的位 使用Comp类型 采用二进制表示法 每个小整数段保留尽量多的位 一个例子:计算两个15位数的和 方法一 分为15个小整数段,每段都是1位数,需要15次1位数加法 方法二 分为5个小整数段,每段都是3位数,需要5次3位数加法 方法三 Comp类型可以直接处理15位的整数,故1次加法就可以了 比较 用Integer计算1位数的加法和3位数的加法是一样快的 故方法二比方法一效率高 虽然对Comp的操作要比Integer慢,但加法次数却大大减少 实践证明,方法三比方法二更快 使用Comp类型 高精度运算中,每个小整数段可以用Comp类型表示 Comp有效数位为19~20位 求两个高精度数的和,每个整数段可以保留17位 求高精度数与不超过m位整数的积,每个整数段可以保留18–m位 求两个高精度数的积,每个整数段可以保留9位 如果每个小整数段保留k位十进制数,实际上可以认为其只保存了1位10k进制数,简称为高进制数 ,称1位高进制数为单精度数 采用二进制表示法 采用二进制表示,运算过程中时空效率都会有所提高,但题目一般需要以十进制输出结果,所以还要一个很耗时的进制转换过程。因此这种方法竞赛中一般不采用,也不在本文讨论之列 算法的优化 高精度乘法的复杂度分析 连乘的复杂度分析 设置缓存 分解质因数求阶乘 二分法求乘幂 分解质因数后的调整 高精度乘法的复杂度分析 计算n位高进制数与m位高进制数的积 需要n*m次乘法 积可能是n+m–1或n+m位高进制数 连乘的复杂度分析(1) 一个例子:计算5*6*7*8 方法一:顺序连乘 5*6=30,1*1=1次乘法 30*7=210,2*1=2次乘法 210*8=1680,3*1=3次乘法 方法二:非顺序连乘 5*6=30,1*1=1次乘法 7*8=56,1*1= 1次乘法 30*56=1680,2*2=4次乘法 连乘的复杂度分析(2) 若“n位数*m位数=n+m位数”,则n个单精度数,无论以何种顺序相乘,乘法次数一定为n(n-1)/2次 证明: 设F(n)表示乘法次数,则F(1)=0,满足题设 设kn时,F(k)=k(k-1)/2,现在计算F(n) 设最后一次乘法计算为“k位数*(n-k)位数”,则 F(n)=F(k)+F(n-k)+k (n-k)=n(n-1)/2(与k的选择无关) 设置缓存(1) 一个例子:计算9*8*3*2 方法一:顺序连乘 9*8=72,1*1=1次乘法 72*3=216,2*1=2次乘法 216*2=432,3*1=3次乘法 方法二:非顺序连乘 9*8=72,1*1=1次乘法 3*2=6,1*1=1次乘法 72*6=432,2*1=2次乘法 设置缓存(2) 考虑k+t个单精度数相乘a1*a2*…*ak*ak+1*…*ak+t 设a1*a2*…*ak结果为m位高进制数(假设已经算出) ak+1*…*ak+t结果为1位高进制数 若顺序相乘,需要t次“m位数*1位数” ,共mt次乘法 可以先计算ak+1*…*ak+t,再一起乘,只需要m+t次乘法 设置缓存(3) 缓存的大小 设所选标准数据类型最大可以直接处理t位十进制数 设缓存为k位十进制数,每个小整数段保存t–k位十进制数 设最后结果为n位十进制数,则乘法次数约为 k/(n–k) ∑(i=1..n/k)i=(n+k)n/(2k(t–k)),其中k远小于n 要乘法次数最少,只需k (t–k)最大,这时k=t/2 因此,缓存的大小与每个小整数段大小一样时,效率最高 故在一般的连乘运算中,可以用Comp作为基本整数类型,每个小整数段为9位十进制数,缓存也是9位十进制数 分解质因数求阶乘 例:10!=28*34*52*7 n!分解质因数的复杂度远小于nlogn,可以忽略不计 与普通算法相比,分解质因数后,虽然因子个数m变多了,但结果的位数n没有变,只要使用了缓存,乘法次数还是约为n(n-1)/2次 因此,分解质因数不会变慢(这也可以通过实践来说明) 分解质因数之后,出现了大量求乘幂的运算,我们可以优化求乘幂的算法。这样,分解质因数的好处就体现出来了 二分法求乘幂 二分法求乘幂,即: a2
您可能关注的文档
- 水族箱基础设施.ppt
- 水油混合深层油炸及真空油炸.ppt
- 水泥中含量测定报告.doc
- 水利工程及水工建筑物2(简).ppt
- 水泥厂机械设备及计量设备安装要求及试运转规定.doc
- 水泥厂设备预知维修与润滑管理.ppt
- 水泥取样标准及检测.doc
- 水泥厂密闭空间危险.ppt
- 水泥助磨剂的性能及应用.ppt
- 水泥浆及集料界面.pptx
- 讲稿:深入理解“五个注重”把握进一步深化改革统筹部署以钉钉子精神抓好落实.pdf
- 副市长在2025年全市医疗工作会议上的讲话.docx
- 2025年市县处级以上党委(党组)理论学习中心组专题学习计划.docx
- 市民族宗教事务局党组书记、局长2024年度民主生活会个人对照检视发言材料.docx
- 烟草局党组书记2024年度抓基层党建工作述职报告.docx
- (汇编)学习2025年全国教育工作会议精神心得体会发言心得感悟.pdf
- 汇编学习领会在二十届中纪委四次全会上的重要讲话精神心得体会.pdf
- 在2025年镇安全生产、消防安全和生态环境保护第一次全体会议上的讲话提纲.docx
- 书记干部座谈会上的讲话+纪委全会上的讲话.pdf
- 党课:从毛泽东诗词中感悟共产党人初心使命.docx
最近下载
- 外研版 选择性必修第二册Unit3 Times change Developing ideas 课件.pptx
- 带头严守政治纪律和政治规矩,维护党的团结统一等四个方面存在的问题与整改材料4.docx VIP
- 市政工程竣工验收流程图汇.doc
- 【新教材】统编版高中历史选择性必修3《文化交流与传播》教学计划(含教学进度表).pdf
- 2024年苏州卫生职业技术学院单招语文考试试题及答案解析.docx
- 美的-风冷热泵模块机组技术手册.pdf
- 2024年长沙职业技术学院单招语文考试试题及答案解析.docx
- 2024年高中生物晨背和晚背知识点.doc
- 医院培训课件:《护理查对制度》.pptx
- 高中数学教学中的学生自主学习能力分析教学研究课题报告.docx
文档评论(0)