1.1原始的低效算法

  

  我们将n位(为方便讨论简化问题,我们假设n是2的幂)十进制整数(二进制也可以)X、Y都分为2段,每段的长度是n/2位。

  如果现在直接用递归或分治进行编程,其算法复杂度为:

  其中:T(n)代表规模为n的问题,系数4表示问题缩小到T(n/2)时,包含四次乘法(上式中AC/AD/BC/BD四次)

这是在没有进行优化情况下的算法复杂度(注意,此处虽然用了分治思想,但分治并不会降低算法复杂度,反而因其需要使用栈,增加了算法的空间复杂度)。

  1.2高效的算法(运用了数学的小技巧)

  

  我们知道,大整数乘法的基本运算是“乘法”运算,我们可以通过减少乘法的次数来降低算法复杂度!

  从公式中可以发现,原来有四个基本乘积项:AC、AD、BC、BD,现在只有三个基本乘积项:(A-B)(C-D)、AC、BD。乘法运算的数量降低了,下面看看其复杂度变化:

复杂度从n2降到n1.59

  1.3补充

  有的小伙伴可能会问了,如果不分成两段,分成三段,四段甚至n段的时候时间复杂度会降低,结论是:

  

  在大整数乘法中,当把大整数分为2段时,算法时间复杂度最低n1.59

  随着段数逐渐增加,算法的时间复杂度也随之增加,当分段增加到n段时,算法时间复杂度退化到n2

转载于:https://www.cnblogs.com/apex-wzw/p/10464044.html

大整数乘法——分治算法的时间复杂度相关推荐

  1. java 整数乘法的算法,大整数乘法——分治算法的时间复杂度

    1.1原始的低效算法 我们将n位(为方便讨论简化问题,我们假设n是2的幂)十进制整数(二进制也可以)X.Y都分为2段,每段的长度是n/2位. 如果现在直接用递归或分治进行编程,其算法复杂度为: 其中: ...

  2. 大整数乘法---FFT算法

    //迭代FFT的乘法方法 // POJ 1405 Heritage /**  * input data mode:  *  the number array 1,2,3,4 use base U = ...

  3. PYTHON:大整数乘法(分治法)

    何为分治法: 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同.求出子问题的解,就可得到原问题的解.即一种分目标完成程序算法,简单问题可用二分法 ...

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

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

  5. 【算法/C语言】大整数乘法(分治)

    题目: 用分治算法编程实现两个n位十进制大整数的乘法运算. 思路: 参考大整数乘法的详解 伪码: Function MulOfLargeInt(X,Y,n)** 输入:n位乘数X,Y,位数n 输出:X ...

  6. 分治算法经典问题---大整数乘法(1~32位大整数乘法)C++

    大整数乘法 大整数乘法(1~32位大整数乘法) 分治的思想 实验题目及要求(大整数乘法) 算法分析(result=m4*10^2^+(m2+m3)*10^n/2^+m1) 算法分析 代码 源文件 ma ...

  7. 【分治】大整数乘法(C++)

    刚发现个问题,,初学时竟然是使用的long型进行计算的,导致这篇文章虽展现了分治的想法,但并没有实际解决大整数乘法的计算问题. 仅供参考,日后再改 一.大整数乘法 一般计算方法 有n位大整数X和Y,计 ...

  8. 分治法实验之大整数乘法(算法设计分析)

    分治法实验之大整数乘法 01. 问题描述 02. 输入格式 03. 输出格式 04. 输入样例 05. 输出样例 06. 问题分析 07. 算法设计 08. 代码实现 09. 测试结果 10. 复杂度 ...

  9. python两数相乘代码_Python 实现大整数乘法算法的示例代码

    我们平时接触的长乘法,按位相乘,是一种时间复杂度为 O(n ^ 2) 的算法.今天,我们来介绍一种时间复杂度为 O (n ^ log 3) 的大整数乘法(log 表示以 2 为底的对数). 介绍原理 ...

  10. 大整数乘法(Karatsuba算法的字符串形式的C++实现)

    #include <iostream> #include <sstream> #include <cstring> using namespace std;/函数声 ...

最新文章

  1. 《分布式服务架构:原理、设计与实战》第二章彻底解决分布式系统一致性的问题...
  2. 2019世界机器人大赛总决赛在河北保定开赛
  3. SoC嵌入式软件架构设计之二:虚拟内存管理原理、MMU硬件设计及代码分块管理...
  4. listview 每行后面的小箭头_主卧带小衣帽装修,这几个装修方案,你喜欢哪个?...
  5. 95-40-038-java.util.concurrent-ConcurrentLinkedQueue
  6. Kotlin学习总结(1)——Kotlin快速入门
  7. 人脸方向学习(十三):Face Tracking-人脸跟踪KCF解读
  8. 网络工程师笔记--网络管理技术
  9. Abaqus简单部件受力分析
  10. 嵌入式软件开发与互联网软件开发模式差异
  11. JavaNIO读取文件
  12. python的sqlite3说明_python之sqlite3使用详解
  13. 安卓比IOS好的12个原因
  14. c语言编程利用泰勒级数,C语言程序设计:用泰勒级数计算cos
  15. 深度学习论文: An Improved One millisecond Mobile Backbone及其PyTorch实现
  16. android 文件管理 ca,安卓Android手机添加根证书
  17. JAVA超全笔试/面试考试题.(500问)--第三章面试题全面收录
  18. 超详细的软件安装包制作打包流程(C/S客户端)
  19. OP-TEE 简易驱动编写:启动TZPC与TZPCDEP
  20. 利用DncZeus框架开发UWB室内定位网关

热门文章

  1. tcp和udp协议的聊天 和udp协议的时间同步机制-----编码
  2. React-Native Fetch使用Promise封装(一)
  3. 系统剪切板的使用UIPasteboard
  4. [译] What is some general advice for a new PhD student?
  5. 快速从mysqldump文件中恢复一个表
  6. 关于百度地图根据经纬度获取城市信息的接口
  7. Activity是如何挂载Pargment的Day35
  8. C#中对 XML节点进行添加,删除,查找和删除操作
  9. 教学思路SQL之入门习题《学员成绩》 二、基础单表查询
  10. linux 跳板机得搭建