目录
前言
今天是坚持写博客的第五天
为自己送上一点掌声
那么今天的博主就为大家带来分治法实现大整数乘法
分治法
分治法的定义
首先我们来简单看一看分治法的定义:分治法是将一个难度很大的大问题划分为几个规模较小且难度相对低的子问题,然后对各个子问题进行求解,最后将各个规模和难度更小的子问题的答案合并成为规模和难度较大的原问题的解的思想。
但是需要注意分治法可能会把大问题分解成重复的小问题,最终重复求解相同的问题,造成效率下降。
分治法的应用
因为分治法的基本思想是把大问题拆分成小问题进行求解, 因此我们时常可以运用分治法的思想解决快速/归并排序、最大子段、最近点对等问题(如果大家想要听我讲解可以在评论区留下想法或点个关注,有生之年也许就会出现在我的动态),其中也包括我们今天要讲的大整数乘法。
好啦,废话不多说,我们赶紧进入正题
大整数乘法
首先我们先上例题,例题如下:
由题可知,有两个整数x和y,分别为7479和9986,他们都是“长度”为4的整数。如果我们不使用分治法,那么我们需要进行16次运算,即6*9,6*7,6*4……,此时的复杂度较高,如果数字的位数更多,那么相应的运算次数也会更多。因此此时我们就可以使用分治法完成大整数乘法,提升效率。
使用分治法完成题目的大致思路如下:
- 将已有的整数拆分成两个(n/2)的整数,如7479我们拆分成74和79,9986分成99和86,并将拆封成的整数写成A=74,B=79,C=99,D=86......的形式。此时x=A*10^2+B,y=C*10^2+D。
- 我们计算x*y,并把上面画下划线的式子带入x*y。
- 代入后计算我们会发现一个新奇的式子,且式子中仍然存在多个两位数,此时我们需要重复第一步,对存在的两位数拆解,直到最后仅剩下个位数相乘。
图解如下,看完你可能就会理解:
使用分治法-大整数乘法进行计算可以很大程度上减少乘法运算的次数,从而提升效率。但是使用该方法容易对于位数较多的大整数还是会有一定误差,有兴趣的小伙伴可以思考使用字符串的方式求解问题,提升精度。
以上就是今天对分治法解决大整数乘法的讲解,有生之年博主可能会推出通过字符串方式下的分治法思想实现大整数乘法。最后如果对您有所帮助,希望您可以为我留下一个点赞和关注,这对我真的很重要,谢谢!