当前位置:网站首页>漫画:如何实现大整数相乘?(上) 修订版
漫画:如何实现大整数相乘?(上) 修订版
2022-07-05 16:51:00 【小灰】
这周一小灰发布的新漫画中,存在两个小问题:
1.对于master定理的第三个条件叙述有误,应该是a+ε,而不是a-ε。
2.把分治法的T(n)和T(n/2)的关系带入master定理的第一个条件,计算ε值的过程有误。
本次修改了这两个问题,非常感谢小伙伴们的指正。
前一段时间,小灰发布了一篇有关大整数相加的漫画,没看过的小伙伴可以先看一看:
那么,大整数相乘又是如何实现的呢?
起初,小灰认为只要按照大整数相加的思路稍微做一下变形,就可以轻松实现大整数相乘。但是随着深入的学习,小灰才发现事情并没有那么简单......
————— 第二天 —————
怎样列出这个乘法竖式呢?以 93281 X 2034 为例,竖式如下:
在程序中,我们可以利用int型数组,把两个大整数按位进行存储,再把数组中的元素像小学竖式那样逐个进行计算。
这个乘法竖式的计算过程可以大体分为两步:
1.整数B的每一个数位和整数A所有数位依次相乘,得到中间结果。
2.所有中间结果相加,得到最终结果。
/**
* 大整数求乘积
* @param bigNumberA 大整数A
* @param bigNumberB 大整数B
*/
public static String multiply(String bigNumberA, String bigNumberB) {
//1.把两个大整数用数组逆序存储,数组长度等于两整数长度之和
int lengthA = bigNumberA.length();
int lengthB = bigNumberB.length();
int[] arrayA = new int[lengthA];
for(int i=0; i< lengthA; i++){
arrayA[i] = bigNumberA.charAt(lengthA-1-i) - '0';
}
int[] arrayB = new int[lengthB];
for(int i=0; i< lengthB; i++){
arrayB[i] = bigNumberB.charAt(lengthB-1-i) - '0';
}
//2.构建result数组,数组长度等于两整数长度之和
int[] result = new int[lengthA+lengthB];
//3.嵌套循环,整数B的每一位依次和整数A的所有数位相乘,并把结果累加
for(int i=0;i<lengthB;i++) {
for(int j=0;j<lengthA;j++) {
//整数B的某一位和整数A的某一位相乘
result[i+j] += arrayB[i]*arrayA[j];
//如果result某一位大于10,则进位,进位数量是该位除以10的商
if(result[i+j] >= 10){
result[i+j+1] += result[i+j]/10;
result[i+j] = result[i+j]%10;
}
}
}
//4.把result数组再次逆序并转成String
StringBuilder sb = new StringBuilder();
//是否找到大整数的最高有效位
boolean findFirst = false;
for (int i = result.length - 1; i >= 0; i--) {
if(!findFirst){
if(result[i] == 0){
continue;
}
findFirst = true;
}
sb.append(result[i]);
}
return sb.toString();
}
public static void main(String[] args) {
String x = "3338429042340042304302404";
String y = "12303231";
System.out.println(multiply(x, y));
}
————————————
下面,我们的推导会有一些烧脑,请大家坐稳扶好~~
大整数从高位到低位,被平分成了两部分。设整数1的高位部分是A,低位部分是B;整数2的高位部分是C,低位部分是D,那么有如下等式:
如果把大整数的长度抽象为n,那么:
因此,整数1与整数2 的乘积可以写成下面的形式:
如此一来,原本长度为n的大整数的1次乘积,被转化成了长度为n/2的大整数的4次乘积(AC,AD,BC,BD)。
什么是master定理呢?
master定理的英语名称是master theorem,它为许多由分治法得到的递推关系式提供了渐进时间复杂度分析。
设常数a >= 1,b > 1,如果一个算法的整体计算规模 T(n) = a T(n / b) + f(n),那么则有如下规律:
假设两个长度为n的大整数相乘,整体运算规模是T(n) 。
根据刚才得到的结论,两个大整数相乘被拆分成四个较小的乘积:
所以在第一次分治时,T(n)和T(n/2)有如下关系:
T(n) = 4T(n/2) + f(n)
其中f(n)是4个乘积结果相加的运算规模,f(n)的渐进时间复杂度很明显是O(n)。
把这个关系带入到master定理的公式 T(n) = a T(n / b) + f(n) 当中,
此时 a=4, b=2。
此时,把a和b的值,以及f(n)的时间复杂度带入到master定理的第一个规律,也就是下面的规律:
发现正好符合条件。
怎么符合呢?推导过程如下:
所以我们的平均时间复杂度是:
—————END—————
边栏推荐
- C # realizes crystal report binding data and printing 3-qr code barcode
- Is it safe for qiniu business school to open a stock account? Is it reliable?
- [Web attack and Defense] WAF detection technology map
- Copy mode DMA
- [binary tree] insufficient nodes on the root to leaf path
- MySQL queries the latest qualified data rows
- [first lecture on robot coordinate system]
- Timestamp strtotime the day before or after the date
- ternary operator
- CMake教程Step5(添加系统自检)
猜你喜欢
Oracle缩表空间的完整解决实例
ECU introduction
Complete solution instance of Oracle shrink table space
Application of threshold homomorphic encryption in privacy Computing: Interpretation
Copy mode DMA
深入理解Redis内存淘汰策略
Redis+caffeine two-level cache enables smooth access speed
The two ways of domestic chip industry chain go hand in hand. ASML really panicked and increased cooperation on a large scale
winedt常用快捷键 修改快捷键latex编译按钮
Deeply cultivate 5g, and smart core continues to promote 5g applications
随机推荐
Error in composer installation: no composer lock file present.
Is it safe and reliable to open futures accounts on koufu.com? How to distinguish whether the platform is safe?
C (WinForm) the current thread is not in a single threaded unit, so ActiveX controls cannot be instantiated
Use byte stream to read Chinese from file to console display
The first lesson of EasyX learning
深耕5G,芯讯通持续推动5G应用百花齐放
Timestamp strtotime the day before or after the date
ThoughtWorks global CTO: build the architecture according to needs, and excessive engineering will only "waste people and money"
MySQL queries the latest qualified data rows
Redis+caffeine two-level cache enables smooth access speed
Allusions of King Xuan of Qi Dynasty
Is it safe for qiniu business school to open a stock account? Is it reliable?
High number | summary of calculation methods of volume of rotating body, double integral calculation of volume of rotating body
Copy mode DMA
华为云云原生容器综合竞争力,中国第一!
WR | Jufeng group of West Lake University revealed the impact of microplastics pollution on the flora and denitrification function of constructed wetlands
Example tutorial of SQL deduplication
Is it safe to open an account for digging wealth stocks? How is it safe to open a stock account?
菜刀,蚁剑,冰蝎,哥斯拉的流量特征
Summary of optimization scheme for implementing delay queue based on redis