首页 > 其他 > 详细

(上古遗产)优化长乘法 Karatsuba乘法

时间:2019-09-02 21:37:03      阅读:223      评论:0      收藏:0      [点我收藏+]

虽然写好了我自己用的a*启发函数但还是有些不尽人意,如果通过数学分析确定不出问题可以工作了的话应该就会发出来了

//Karatsuba 递归式距离推导
//h(x) = f(x) * g(x)://x为拆分后余出的10^x
//h(x) = (a * x + b) * (c * x + d) = a * c * (x^2) + (a * d + b * c) * x + b * d
//(a * d + b * c) = (a + b) * (c + d) - a * c - b * d = a * c + a * d + b * c + b * d - a c - b d
//综合起来就是h(x) = a * c * (x^2) + ((a + b) * (c + d) - a * c - b * d) * x + b * d

//Karatsuba 相乘算法例 : 1234 * 5678
//x = 1234, y = 5678, pos = 2(取较大者的折半位), x1 = 12, x0 = 34, y1 = 56, y0 = 78
//根据该式进行下两数乘法操作 h(x) = (x1 * y1) * (10^(2pos) + ((x1 + x0) (y1 + y0) - (x1 * y1) - (x0 * y0)) * 10^pos + (x0 + y0)
//拆分为(12 * 10^2 + 34) * (56 * 10^2 + 78) = 12 * 56 * 10^2 + ((12 + 34) * (56 + 78) - (12 * 56) - (34 * 78)) * 10^2 + (34 + 78)
//(12 * 56) 与 (34 * 78) 会被继续展开,在那之前先保存,避免多次重复递归,而递归结束的条件为a * b 的两者均小于0,返回直接相乘的结果。

(上古遗产)优化长乘法 Karatsuba乘法

原文:https://www.cnblogs.com/juwan/p/11449020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!