Algorithm 两个复数相乘的大O?

Algorithm 两个复数相乘的大O?,algorithm,numbers,Algorithm,Numbers,两个复数相乘的时间复杂度是多少? 例如(35+12i)*(45+23i)渐近复杂性与组件相乘的复杂性相同 (35 + 12i) * (45 + 23i) == 35*45 + 45*12i + 35*23i - 12*23 == (35*45 - 12*23) + (45*12 + 35*23)i 只有4个实数乘法和2个实数加法 所以,如果实数乘法是O(1),那么复数乘法也是 如果实数乘法不是常数(就像任意精度值的情况一样),那么复数乘法也不是。

两个复数相乘的时间复杂度是多少?
例如(35+12i)*(45+23i)

渐近复杂性与组件相乘的复杂性相同

(35 + 12i) * (45 + 23i) == 35*45 + 45*12i + 35*23i - 12*23
                        == (35*45 - 12*23) + (45*12 + 35*23)i
只有4个实数乘法和2个实数加法

所以,如果实数乘法是O(1),那么复数乘法也是


如果实数乘法不是常数(就像任意精度值的情况一样),那么复数乘法也不是。

如果将两个复数(a+bi)和(c+di)相乘,计算结果为(ac-bd,adi+bci),总共需要四次乘法和两次减法。加法和减法比乘法花费更少的时间,因此主要的成本是在这里进行的四次乘法。由于四是一个常数,与实数情况相比,这不会改变执行多应用程序的大O运行时

假设有两个数字n1和n2,每个数字都是d位数。如果您使用小学方法将这些数字相乘,您将执行以下操作:

for each digit d1 of n2, in reverse:
    let carry = 0
    for each digit d2 of n1, in reverse:
        let product = d1 * d2 + carry
        write down product mod 10
        set carry = product / 10, rounding down

add up all d of the d-digit numbers you wrote in step 1
第一个循环在时间Θ(d2)中运行,因为n2中的每个数字与n1中的每个数字配对并相乘,每个数字都做O(1)功。结果是d个不同的d位数字。将这些数字相加需要时间Θ(d2),因为您必须精确地扫描每个数字的每个数字一次。总的来说,这需要时间(d2)

请注意,此运行时是n1和n2中有多少位的函数,而不是n1和n2本身。一个数字n中的位数是Θ(logn),所以如果将两个数字n1和n2相乘,那么这个运行时实际上是O((logmax{n1,n2})2)


这不是最快的乘法方法,尽管有一段时间有人猜测它是。在时间O((log max{n1,n2})log3 4中运行,其中指数约为1.7ish。有更多的现代算法运行得更快,它是否能在没有指数的时间O(logd)内完成是一个公开的问题

两个复数相乘只需要三次实数乘法

设p=a*c,q=b*d,r=(a+b)*(c+d)

然后(a+bi)*(c+di)=(p-q)+i(r-p-q)


另请参见。

您对此做过任何研究吗?而且,这不是一个真正的编程问题,更像是一个计算机科学问题。数字有多大?基本上,需要4次乘法,1次加法,1次减法。大小可以是different@Nik在得到答案后,不要实质性地改变问题。这是O(n^2)吗?否;无论值有多大,仍然只有4次乘法。如果你想添加一个源,我不相信这是正确的——在大小为n的输入上,实数乘法不需要时间O(logn)。还有,你谈论复数有什么原因吗?OP编辑了这个问题;过去是关于复数的。我同意O(lg n)是不对的,但感冒药阻止了我给出更好的答案。让我们假设它是ω(1):)在这种情况下,还需要一个实加法,不是吗?但是与上面回答的典型的4次实数乘法和2次减法相比,它所花费的时间更少?