高斯4次乘法化为3次乘法

来源:互联网 发布:权力的游戏山姆知乎 编辑:程序博客网 时间:2024/05/18 03:28

设两个复数a + bi,c + di。我们先来看三个辅助的量t1 = (a - b) * (c + d),t2 = a * d,t3 = b * c。两个复数相乘的结果实部为a * c – b * d,虚部为a * d + b * c。而实部可以表示为t1 – t2 + t3,虚部可以表示为t2 + t3。这样就可以用三次乘法完成复数相乘了。其思想是用加减代替了乘法。

好了让我们再看看上面的4次乘法,如法炮制:f1 = 2^(n/2)(xL + xR) * (yL + yR),f2 = xL * yL,f3 = xR * yR。

则x * y = f1 – 2^(n/2) f2 + f2 - 2^(n/2) f3 + f3。

这样我们就只做了3次规模为n/2的乘法,即3/4*n^2,这样的结果还比较满意,也许你觉得这样的优化微不足道,但我们可以一直这么分下去,最后得到递推表达式:T(N) = 3T(n/2) + O(n)。当n趋于无穷大时你会发现时间复杂度降到了O(n^lg3),这已经非常可观了,高斯果然牛X。

0 0
原创粉丝点击