递归方程+复杂度分析

大整数的乘法

背景介绍

设X和Y都是n位二进制整数,现在需要计算它们的乘积XY,如果使用小学的思路设计算法,那么需要n2次乘法和n-1次加法,效率太低,那么能够设计出一种算法能够提高效率?

方案一

将n位二进制整数X和Y都分为两段,每段的长度为n/2,如下图所示

此时,X=A2n/2+BX=A2^{n/2}+BX=A2n/2+B,Y=C2n/2+DY=C2^{n/2}+DY=C2n/2+D,XY的乘积就为:

XY=(A2n/2+B)(C2n/2+D)=AC2n+(AD+BC)2n/2+BDXY=(A2^{n/2}+B)(C2^{n/2}+D)=AC2^n+(AD+BC)2^{n/2}+BDXY=(A2n/2+B)(C2n/2+D)=AC2n+(AD+BC)2n/2+BD,共需要4次2n/2位的乘法,3次长度不超过2n的加法,以及两次移位操作,所以可以得出对应递归方程如下:
T(n)={O(1)n=14T(n/2)+O(n)n>1T(n)= \begin{cases} O(1)\quad\quad\quad\quad\quad\quad\quad{n=1}\\ 4T(n/2)+O(n)\quad\quad{n\gt1} \end{cases} T(n)={O(1)n=14T(n/2)+O(n)n>1​
对应的时间复杂度求解过程如下:

当n>1时(注:ci为常数):
T(n)=4T(n/2)+O(n)=42T(n/22)+c1O(n)=...=4kT(n/2k)+ckO(n)T(n)=4T(n/2)+O(n)\\ =4^2T(n/2^2)+c_1O(n)\\ =...\\ =4^kT(n/2^k)+c_kO(n) T(n)=4T(n/2)+O(n)=42T(n/22)+c1​O(n)=...=4kT(n/2k)+ck​O(n)
令2k=n2^k=n2k=n,则k=log2nk=log_2nk=log2​n,此时
T(n)=4kT(n/2k)+ckO(n)=4kT(1)+ckO(n)=(2log24)log2n+ckO(n)=(2log2n)log24+ckO(n)=O(nlog24)+ckO(n)=O(nlog24)=O(n2)T(n)=4^kT(n/2^k)+c_kO(n)\\ =4^kT(1)+c_kO(n)\\ =(2^{log_24})^{log_2n}+c_kO(n)\\ =(2^{log_2n})^{log_24}+c_kO(n)\\ =O(n^{log_24})+c_kO(n)\\ =O(n^{log_24})\\ =O(n^2) T(n)=4kT(n/2k)+ck​O(n)=4kT(1)+ck​O(n)=(2log2​4)log2​n+ck​O(n)=(2log2​n)log2​4+ck​O(n)=O(nlog2​4)+ck​O(n)=O(nlog2​4)=O(n2)
注:这里系数是4,求完相应对数后,结果为2,写的麻烦是为了当系数为3时,同学们也能理解清楚计算的过程。

方案二

XY=AC2n+((A−B)(D−C)+AC+BD)2n/2+BDXY=AC2^n+((A-B)(D-C)+AC+BD)2^{n/2}+BDXY=AC2n+((A−B)(D−C)+AC+BD)2n/2+BD,看上去算式更复杂,但仅需3次n/2位整数的乘法,6次加、减法和2次移位。于是可得出递归方程如下:
T(n)={O(1)n=13T(n/2)+O(n)n>1T(n)= \begin{cases} O(1)\quad\quad\quad\quad\quad\quad\quad{n=1}\\ 3T(n/2)+O(n)\quad\quad{n\gt1} \end{cases} T(n)={O(1)n=13T(n/2)+O(n)n>1​
通过上述的时间复杂度求解过程,可算得T(n)=O(nlog23)=O(n1.59)T(n)=O(n^{log_23})=O(n^{1.59})T(n)=O(nlog2​3)=O(n1.59),相较于之前的,算是较大的一个改进。


因为博主写也只是在学习过程中做个人总结,所以难免可能会有错误的地方,欢迎大家一起交流、讨论。如果有幸解决了您的一些疑问,本人不胜感激!

大整数的乘法(递归方程+复杂度分析)相关推荐

  1. 求一个整数的权重 c语言,Code Kata:大整数四则运算—乘法 javascript实现

    上周练习了加减法,今天练习大整数的乘法运算. 采取的方式同样为竖式计算,每一位相乘后相加. 乘法函数: 异符号相乘时结果为负数,0乘任何数都为0 需要调用加法函数 因为输入输出的为字符串,需要去除字符 ...

  2. 大整数的乘法、加法、减法

    乘法用经典的算法来解决,还有分治法来解决大整数乘法,但是效率提升不明显而且代码稍烦.所谓的经典算法就是直接按照位相乘,然后换算进位的算法,也很简单.加法和乘法用到的进位算法一样,减法是用借位.注意结果 ...

  3. 大整数的乘法(分治法)

    通常执行一次加法或乘法运算所需的计算时间看作一个仅取决于计算机硬件处理速度的常数.这个仅在参加运算的整数能在计算机硬件对整数的表示范围内直接处理才是合理的.若要精确地表示大整数并在计算结果中要求精确得 ...

  4. 剑指offer第12题打印从1到n位数以及大整数加法乘法

    字符和数字加减就是字符的ASCII码和数字直接加减. 方法一: 1)在字符串操作中给一个整形数字加(字符0)就是把它转化为字符,当然给一个字符减去(字符0)就可以把它转化为数字了:如果确实是最后一位字 ...

  5. 大整数乘法(递归+分治法)

    目录 一.问题描述 二.思路分析 分治法介绍: 问题分析: 三.算法伪代码 四.代码实现效果 五.源代码 六.参考文章 一.问题描述 请设计一个有效的算法,可以进行两个n位大整数的乘法.(n=2^k, ...

  6. 大整数相乘java_大整数乘法—java实现

    大整数相乘 参考博客: https://blog.csdn.net/oh_maxy/article/details/10903929 https://blog.csdn.net/u010867294/ ...

  7. 算法之【大整数乘法】

    前面介绍了大整数的加减法,这次是大整数的乘法.同样是模拟竖式计算,但乘法运算需要克服一些技巧上的障碍:首先需要循环嵌套循环,然后通过一个数组实现逐位累加,最后统一完成进位工作. C语言完整程序: #i ...

  8. 【分治算法】大整数乘法

    前言 最近开了算法导论课,上来就是递归分治,大整数乘法就是分治法的典型案例,通过参考网上书上我终于编程实现了大整数乘法,特此纪念 原理 由于两个大整数直接相乘太大,所以我们可以将它划分成几个小块分别相 ...

  9. 基于FFT的大整数乘法

    多项式求值 对于多项式f(x)=a0+a1∗x1+a2∗x2+...+an−1∗xn−1f(x)=a_{0}+a_{1}*x^{1}+a_{2}*x^{2}+...+a_{n-1}*x^{n-1}f( ...

最新文章

  1. jira使用教程pdf_jira项目管理系统使用指南.pdf
  2. 东北大学计算机分数线2017,东北大学2017年艺术类专业录取分数线
  3. Golang开发的跨平台蜜罐平台HFish v0.6.4源码
  4. linux里面安装php,linux下怎么安装php环境
  5. 深度学习技术在社会化推荐场景中的总结(附数据集)
  6. 【深度学习】【U-net】医学图像(血管)分割实验记录
  7. php服务层设计与实现的,PHP中service层怎么设计兼顾优雅和方便?
  8. python异步爬虫_Python异步爬虫试验[Celery,gevent,requests]
  9. (1) 在manjaro linux下安装qq,微信
  10. 郭天祥的10天学会51单片机_第十二节
  11. java excel批量导入数据库数据_java把excel数据批量导入到数据库
  12. 原生js实现图片验证码
  13. python counter_如何获得按输入顺序排序的python Counter输出?
  14. 个人开发者用户福音,轻松申请微信商户、支付宝支付妙招
  15. 如何对一个水杯进行测试?(详细)
  16. java 视频边下边播,VideoViewDemo android 播放器,支持边下边播 238万源代码下载- www.pudn.com...
  17. tensorflow XLA 笔记
  18. win10系统如何添加和切换多个桌面?
  19. java看不起c语言,为什么我感觉Java比C语言难呢?总觉得逻辑上没有C语言好理解。比如各种继承介面。包之间的关系。...
  20. 关于宿舍熄灯时间的调查报告

热门文章

  1. 述职报告不会写?看这篇!
  2. 【2020/07/16修订】概率论与数理统计(电子科技大学) 知识梳理 · 第一版(1到8章 · 度盘)
  3. 最大公共子串LCS(Java实现)
  4. 为什么数学是创造力的源泉:一位数学家的思考与信仰
  5. 盘点,7个关键字,看电信物联网2022发展情况
  6. 【陈工笔记】# ubuntu系统登陆密码忘记,如何修改 #
  7. android播放器:MediaPlayer ExoPlayer ijkplayer
  8. 程序员刚写完代码 , 就被开除了
  9. HBuilder X这个开发工具我写完代码后,我让他在浏览器运行,就是不显示出来,大佬们求解答,内置配置浏览器是这样的。求解答拜托.
  10. 直击平昌! 2天40位大咖的平昌区块链论坛精华都在这了!