两个复数的乘积少于 3 次

Posted

技术标签:

【中文标题】两个复数的乘积少于 3 次【英文标题】:Product of two complex numbers in less than 3 multiplications 【发布时间】:2016-11-29 03:25:22 【问题描述】:

有人可以帮我分析一下吗?为什么不能在两次乘法中完成?

复数的乘法

如果将计算所需的乘法次数视为其难度的衡量标准,并且这些计算是使用复数执行的,那么自然会问需要多少次实数乘法才能 评估复杂产品的实部和虚部。自然的 形成复数乘积的方法需要四次实数乘法。 但是,它可以用三个而不是两个乘法来完成。

(a+bi)(c+di) = (ac-bd) + (ad+bc)i

a(c+d) - d(a+b) = ac - bd
 (1)      (2)

a(c+d) + c(b-a) = ad + bc
          (3)

定理 - 计算两个复数的乘积需要三个实数乘法,即使乘以实数常数不计算在内。

证明草图 由于复数乘法的实数部分和复数部分都不能在一次实数乘法中确定,如果此计算可以在两次乘法中完成,则可以选择Ci、Wi、Xi、Yi 和 Zi以下列方式。

ac - bd = C₁(W₁a+X₁b+Y₁c+Z₁d)
            (W₂a+X₂b+Y₂c+Z₂d)
        + C₂(W₃a+X₃b+Y₃c+Z₃d)
            (W₄a+X₄b+Y₄c+Z₄d)
ad + bc = C₃(W₁a+X₁b+Y₁c+Z₁d)
            (W₂a+X₂b+Y₂c+Z₂d)
        + C₄(W₃a+X₃b+Y₃c+Z₃d)
            (W₄a+X₄b+Y₄c+Z₄d)

这导致了 20 个未知数中的 20 个非线性方程,Ci、Wi、Xi、Y i 和 Zi 其中 (i = 1,2,3,4),它们没有实数解,因此无法在两个实数乘法中执行复数乘法 p>

来源:

门罗,伊恩。 “40-44。” http://dl.acm.org/。过程。第三届 ACM 计算理论年度研讨会论文集,俄亥俄州,Shaker Heights。埃德。 Michael A. Harrison、Ranan B. Banerji 和 Jeffrey D. Ullman。 ACM,1971 年 5 月 3 日。网络。 2016 年 11 月 26 日。http://dl.acm.org/citation.cfm?doid=800157.805036.

【问题讨论】:

你能引用这句话的出处吗?还有,你能不能用'>'把引文隔开,这样就清楚是引文了? 这是关于编程的。特别是 karatsuba 算法。 @HighPerformanceMark @ruakh 我刚才引用了。 【参考方案1】:

所以,这里要证明的定理基本上是,“即使你可以随心所欲地做任意多的加法、减法和乘法运算,你也无法计算 ac−bd em> 和 ad+bc 没有进行至少三个乘以二的-预定数量。”

(注意:此后,我将“两个非预定量的乘法”缩写为“MNPQ(s)”。)

证明首先指出你肯定不能只用一个 MNPQ 计算 ac−bd, ad+bc 中的任何一个。因此,您可以仅使用 两个 MNPQ 来计算 both 的唯一方法是,如果您能够以某种方式“共享”这些 MNPQ,同时在 ac−bd, ad+bc .

证明依赖于一个未说明的前提,顺便说一下,如果你所拥有的只是加法、减法和乘以预定常数,那么最终你所做的任何事情都只是你的线性组合输入。 (你明白为什么吗?)所以这两个 MNPQ 都是 a, b, c, 的线性组合的乘积d ,而您“分享”他们的结果的方式将是 ac−bd, ad+bc 是两个不同的线性组合这些 MNPQ 的结果。 (一个完整证明需要一个更彻底的论证,即一个 MNPQ 的结果可能是另一个 MNPQ 的论证的可能性,以及最终线性组合不仅包含MNPQ 还有 a, b, c, d ;但这只是标记为“草图证明”,所以我想它不必担心这些事情。)

如果你接受这个前提,那么我们可以将这两个 MNPQ 写成 (W₁a+X₁b+Y₁c+Z₁d)·(W₂a+X₂b+Y₂c+Z₂d) 和 (W₃a+X₃b+Y₃c+Z₃d)·(W₄a+ X₄b+Y₄c+Z₄d),以及它们的两个线性组合 (ac−bdad+bc) 为 C₁(MNPQ)₁+C₂(MNPQ)₂ 和 C₃( MNPQ)₃+C₄(MNPQ)₄。如果你把所有的东西都相乘,你会得到一个方程组来求解——未知数是神奇的常数 W₁、X₂、C₃ 等——但事实证明,这个方程组实际上没有解.因此,没有一组神奇的常数可以启用这种方法,因此这种方法是不可能的,因此您需要执行至少三个 MNPQ 才能计算 ac−bdad+bc。

【讨论】:

(W₁a+X₁b+Y₁c+Z₁d)·(W₂a+X₂b+Y₂c+Z₂d) 怎么算一次乘法?每个括号中都有神奇的常数需要计算并且不是预先确定的。 @SuperCell:我不知道你为什么这么认为。事实上,这在术语上是矛盾的:“常数”的定义是它预先确定的。 (W₁a+X₁b+Y₁c+Z₁d) 和 (W₂a+X₂b+Y₂c+Z₂d) 只是 a, b, c, d . 我是说魔法常数需要分别乘以 a b c d。 @SuperCell:是的,但这是特别允许的,正如我在这个答案的第一段中指出的那样。 (正如 Munro 所说,“不计算乘以实常数”。) 好吧公平,但这怎么证明它不能用两次乘法来完成?【参考方案2】:

证明是矛盾的。

假设我们可以计算两个复数乘以 2 个实数相乘,那么你需要计算 ac-bdad +bc 使用 2 次乘法。

它应该具有您发布的方式,其中两个评估由完全相同的两个乘法组成,具有不同的实常数系数 C1、C2、C3、C4 其中 Xi、Yi、Zi、Wi也应该是实数。

由于 a^2, b^2, c^2, d^2, ab, ac, ad, bc, bd, cd 的系数应该在两个方程中匹配,我们有20 个非线性方程,20 个未知数。例如 C1*W1*W2 + C2*W3*W4 = 0 对于 a^2 在第一次评估 ac-bd em>。该证明进一步声称该系统没有真正的解决方案,因此该假设不成立。

【讨论】:

为什么要包含 C 系数?为什么将 a b c d 与 x y z w 相乘?那2乘法又如何? C1(W1a+X1b+Y1c+Z1d ) (W2a+X2b+Y2c+Z2d) 不是 25 次乘法吗? 就像@ruakh 所说的那样,语句本身声明将 a,b,c,d 与常数相乘不算作乘法。只有 a,b,c,d 之间的乘法被视为乘法。放入 Ci 和 Xi、Yi、Zi、Wi 是因为您想以某种方式排列 a、b、c、d,这样您就可以准确地得到 ac-bd 和 ad+bc,就像所示的 3 次乘法示例一样。

以上是关于两个复数的乘积少于 3 次的主要内容,如果未能解决你的问题,请参考以下文章

复数运算

[PTA]实验5-1 使用函数计算两个复数之积

1051. 复数乘法 (15)

1051. 复数乘法 (15)

1051. 复数乘法 (15)

1051. 复数乘法 (15)