大整数乘法的算法分析(r12笔记第42天)

简介:    昨天看了下Paxos协议,比我想象的要复杂。每次都没能耐着性子看完。但是隐隐感觉就跟钓鱼一般(尽管我没用真实试过),如果有耐性,能坚持还是能够明白的。   于是乎,我拿起了大学学习的一本算法书,突然发现里面有很多我早已忘记的东西,记得有一个算法我琢磨了好几天,结果老师上课几分钟就讲完了,所以大学里算法课真是让人费神的课程,工作以后算法自己去写的场景还是少很多,我们更多是去用,但是实际证明不是不重要,而是我们自己没有重视。

   昨天看了下Paxos协议,比我想象的要复杂。每次都没能耐着性子看完。但是隐隐感觉就跟钓鱼一般(尽管我没用真实试过),如果有耐性,能坚持还是能够明白的。

  于是乎,我拿起了大学学习的一本算法书,突然发现里面有很多我早已忘记的东西,记得有一个算法我琢磨了好几天,结果老师上课几分钟就讲完了,所以大学里算法课真是让人费神的课程,工作以后算法自己去写的场景还是少很多,我们更多是去用,但是实际证明不是不重要,而是我们自己没有重视。

   如果让自己的写一些,就会发现真是漏洞百出。

   我看了一个有意思的问题,是关于大整数的乘法。在计算机里是使用二进制,所以通常对于数值的计算,假设X和Y都是n的二进制整数,那么算法XY的执行代价其实会很高,比如222*333即三位数和三位数的乘法,需要9次运算(步运算)才能得到结果。如果这个数字很大,比如100位,那么计算机本身去做这个事情程序里的数值类型就会受限。我们怎么去解决这类问题,一种比较直接的思想就是分而治之。

   根据课本中的精髓,是把X和Y拆分成两部分,因为是二进制的n位整数,所以就把这个整数分成两部分。

所以二进制数X就会分为下面两部分A和B,每部分占用n/2位,假设n是2的幂,对于Y也是如此,分为C和D两部分

图片.png

所以X=A2n/2+B  Y=C2n/2+D

按照这个思路,XY的结果就是:

XY=(A2n/2+B)  (C2n/2+D)=AC2n+(AD+BC)2n/2+BD

所以上面的运算的复杂度就是4次n/2位证书的乘法(AC,AD,BC,BD),3次加法,2次移位(2n和2n/2),所以这样看来整体来看这种算法没有什么改进,如果要得到一个精确的理论值,那就是

当n>1的时候 T(n)=4T(n/2)+O(n)

其实就是这种情况下T(n)=O(n2)

所以上面忙活了一圈,发现竟然没有什么改进,我们也不能气馁,可以对上面的结果再进行推敲。

  XY=(A2n/2+B)  (C2n/2+D)=AC2n+(AD+BC)2n/2+BD

       =AC2n+((A-B)(D-C)-AC+BD)2n/2+BD

这个地方很多同学说搞这么复杂干嘛,其实就是做了一些成本的缩减。

这个复杂度就需要3次的n/2位数的乘法(AC,BD,(A-B)(D-C))

6次的加法,减法和2次的移位

 这个时间复杂度就是当n>1时, T(n)=3T(n/2)+O(n)

这个改进是多大呢,T(n)=O(nlog3)  因为log3的值是1.59

所以T(n)=O(n1.59)

这样就会由此得出,这个算法的意义所在,在大批量的数据运算中,这个改进可是一个相当可观的优化。

而对于时间复杂度的计算,而二分查找中也有类似的思路。

比如查看两个数的平均值

middle=(left+right)/2  这个逻辑没错,但是如果两个数都很大,就很可能会出现溢出的情况,所以就需要迂回解决。
可以使用下面的形式来避免。
middle=left+(right-left)/2;

所以说算法博大精深,细节决定成败,水平高低就体现在这些地方。

 

目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 监控
AI算法分析,智慧城管AI智能识别系统源码
AI视频分析技术应用于智慧城管系统,通过监控摄像头实时识别违法行为,如违规摆摊、垃圾、违章停车等,实现非现场执法和预警。算法平台检测街面秩序(出店、游商、机动车、占道)和市容环境(垃圾、晾晒、垃圾桶、路面不洁、漂浮物、乱堆物料),助力及时处理问题,提升城市管理效率。
AI算法分析,智慧城管AI智能识别系统源码
|
1月前
|
算法
经典控制算法——PID算法原理分析及优化
这篇文章介绍了PID控制算法,这是一种广泛应用的控制策略,具有简单、鲁棒性强的特点。PID通过比例、积分和微分三个部分调整控制量,以减少系统误差。文章提到了在大学智能汽车竞赛中的应用,并详细解释了PID的基本原理和数学表达式。接着,讨论了数字PID的实现,包括位置式、增量式和步进式,以及它们各自的优缺点。最后,文章介绍了PID的优化方法,如积分饱和处理和微分项优化,以及串级PID在电机控制中的应用。整个内容旨在帮助读者理解PID控制的原理和实际运用。
88 1
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
1月前
|
机器学习/深度学习 存储 算法
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
|
1月前
|
算法 机器学习/深度学习 索引
【算法设计与分析】——搜索算法
【算法设计与分析】——搜索算法
40 1
|
1天前
|
移动开发 算法 数据可视化
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
|
3天前
|
算法 数据可视化 大数据
圆堆图circle packing算法可视化分析电商平台网红零食销量采集数据
圆堆图circle packing算法可视化分析电商平台网红零食销量采集数据
33 13
|
9天前
|
算法 数据可视化 Python
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
14 0
|
10天前
|
算法 定位技术 Windows
R语言最大流最小割定理和最短路径算法分析交通网络流量拥堵问题
R语言最大流最小割定理和最短路径算法分析交通网络流量拥堵问题
15 4
|
1月前
|
算法
TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析
TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析
19 1