java 整数乘法的算法,大整数乘法——分治算法的时间复杂度
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
java 整数乘法的算法,大整数乘法——分治算法的时间复杂度相关推荐
- c语言实验大整数,C语言编写大整数.doc
C语言编写大整数 本人写的大整数是256进制的,每一个字节里面的每一位都是有用的,因此比较节省空间.前面我用宏定义定义了大整数最大为128字节,也就是1024位,当然你可以改变SIZE的大小来改变大整 ...
- python整数池_对Python中小整数对象池和大整数对象池的使用详解
1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提 ...
- 哈工大(威海)算法实验一:分治算法实验大作业
哈工大(威海)算法实验一:分治算法实验大作业 题目 某一高等院校有汽车学院.材料学院.计算机学院.软件学院:每个学院的一年级第一学期都开英语.高数.线代课程.每个学院每学期的成绩已经分别登录在同一个E ...
- Java实现大数乘法_Java实现大整数乘法
请设计一个有效的算法,可以进行两个n位大整数的乘法运算 1 最暴力的方法:O(n^2) 2 我们采用分而治之的思想 将X和Y按如下方法分成两部分 那么 X = A*10^(n/2) + B Y = C ...
- 贪心算法-大整数乘法/加法/减法
设有两个大整数相乘,X=61438521,Y=94736407.那么XY=5820464730934047.易知我么的算法需要O(N²)即O(8²)次操作. 如果我们把X和Y都拆成两半,由最高几位和最 ...
- 编程算法 - 大整数乘法
大整数乘法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29353263 题目: 大整数乘法, 给定两个长度不超过10000的整 ...
- 信息学奥赛一本通 1307:【例1.3】高精度乘法 | 1174:大整数乘法 | OpenJudge NOI 1.13 09:大整数乘法
[题目链接] ybt 1307:[例1.3]高精度乘法 ybt 1174:大整数乘法 OpenJudge NOI 1.13 09:大整数乘法 [题目考点] 1. 高精度 考察:高精乘高精 高精度计算讲 ...
- python整数池_【Python】Python中神奇的小整数对象池和大整数对象池
小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立 ...
- Python中小整数对象池和大整数对象池
1.小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提前 ...
最新文章
- linux 查看网络连接数
- 007_SpEL表达式
- python登录网站后爬取数据_用 Python 登录主流网站,我们的数据爬取少不了它
- 案例 | 用pdpipe搭建pandas数据分析流水线
- java进程被kill_定位JAVA进程被kill的原因
- 网络流题目详讲+题单(提高版)(持续更新中......)
- 快速运行python虚拟环境_快速入门Python 最新最流行的pipenv虚拟环境
- Atitit.每周计划日程表 流程表v3
- 开发问题---数据库字段前出现“—”(保存留用,仅供参考)
- (转载)java中super的两种用法
- 算法学习总结(3)——二叉树数据结构重点知识总结
- clipboardjs 基本使用方式之一
- HBuilder原生功能概述
- PHP正则怎样词语过滤,如何用正则替换敏感词?敏感词过滤? - SegmentFault
- OSS对象存储是什么?
- 大数据在职研究生哪个好_在职研究生大数据专业怎么样?
- 从单体式架构迁移到微服务架构,简述java程序的运行原理
- java合并word文档和添加分节符
- Java中浏览量怎么实现_Java刷视频浏览量点赞量的实现代码
- ubuntu下解决微信不能发送图片的问题
热门文章
- 中继器、集线器、网桥、交换机、路由器、网关的总结
- 新国都智能POS N5通过极度严苛测试,优异性能脱颖而出
- linux系统中设置acl的命令,Linux的ACL配置
- MySQL-08-MVCC
- tomcat java home配置_Tomcat 简介、环境配置
- MongoDB 实验——数据备份和恢复和数据库优化
- mac 修改文件的读书权限
- 小米折叠手机售价、发布时间曝光
- VMware与USB3.0不解情缘(此文献给win7系统只有usb3.0口死活与虚拟机连不上的朋友们)
- Github上开源仿京东商城项目-安装部署(二)