博客
关于我
优化 Karatsuba 乘法(老物)
阅读量:429 次
发布时间:2019-03-06

本文共 807 字,大约阅读时间需要 2 分钟。

虽然写好了我自己用的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^(2*pos) + ((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,返回直接相乘的结果。

转载地址:http://ajbyz.baihongyu.com/

你可能感兴趣的文章
Mysql 整形列的字节与存储范围
查看>>
mysql 断电数据损坏,无法启动
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>
MySQL 是怎样运行的 - InnoDB数据页结构
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 查询数据库所有表的字段信息
查看>>
【Java基础】什么是面向对象?
查看>>
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>
mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
查看>>