俄式乘法
2015-06-05 15:01 星星之火✨🔥 阅读(1508) 评论(0) 收藏 举报所谓俄式乘法说白了就是给你两个正整数m 和n,让你计算两者的乘积。如果我们以n 作为输入规模的度量的话(或者以m 作为度量也可以,两者不过是时间复杂度有差异罢了,分别为log 以2 为底n 或m 的对数),那么计算n * m 的值,可以根据n 的奇偶性分成两部分,分别对原来规模一半的n/2 进行处理,因此它是一个减常因子算法。
- 如果n 是偶数,显然有 n · m = n/2 · 2m
- 如果n 是奇数,则有 n · m = (n-1) / 2 · 2m + m
我们可以用递归或者循环迭代来实现该算法(以n = 1 作为终止条件)。值得注意的是该算法只包括折半、加倍和相加这几个简单的操作,由于该算法的这个特性,这个算法也使得硬件实现的速度非常快,因为使用移位——这个机器层次上最基本的操作,就可以完成二进制数的折半和加倍。
Reference:《算法设计与分析基础》_Anany Levitin