【问题标题】:complexity of using Extended Euclid for multivariate gcd computations使用扩展欧几里得进行多变量 gcd 计算的复杂性
【发布时间】:2018-06-06 03:20:47
【问题描述】:

CLRS 状态练习 31.2-7 的一部分

展示如何求整数 x0, x1...xn 使得 gcd(a0, a1...an) = a0x0 + a1x1..an xn。证明您的算法执行的除法次数为 O(n + lg(max{a0, a1...an})

我不知道那个复杂性表达式可能来自哪里。

可以在扩展 Euclid 的 Wikipedia 页面中的“超过两个数字的情况”部分下找到想到的算法。特别是,我们有 gcd(a0, a1...an) = gcd(a0, gcd(a1...gcd(a_n-1, an)))...)。因此,重复应用二变量扩展欧几里得来获得所有 n+1 个参数的系数。对双变量扩展欧几里德的每次调用都需要 O(lg(b)) 除法,其中 b 是两个参数中较小的一个。

因此,它的上限是 O(n * lg(max{a0, a1...an}):n 次调用双变量扩展 Euclid,每个调用最多 lg(max{a0, a1. ..an}) 递归步骤。那么在世界上哪里可以得到一个 n plus lg(max{a0, a1...an} 运行时?是因为在对扩展欧几里德的调用中,无论 b 的值是什么,两者中较小的一个,都会非常迅速地衰减,因此对于大多数调用而言,b 基本上是 O(1)?

另外,有趣的是,Knuth TAOCP 第 2 卷,第 4.5.3 节(第 364 页)问题 45 给出了这个问题:

开发用于计算三个或更多整数的最大公约数的算法分析。

该问题的难度等级为“HM48”(其中 HM 的意思是“需要书中未讨论的更高水平的数学,48 是满分 50 分,其中 50 是在“证明费马大定理”之类的水平上)。

【问题讨论】:

    标签: algorithm time-complexity number-theory modular-arithmetic


    【解决方案1】:

    我对 O(n * lg max{a0...an} ) 的推理不正确。即使我们调用二变量扩展欧几里得 n 次,所有这些调用中较小的参数 b 实际上是严格递减的,即使在扩展欧几里得的不同调用中也是如此; 不是每次都重置为我最初假设的某个顶级值 aj。

    因此,复杂度中的两个项 n + lg max{a0...an} 在不同的情况下占主导地位; n 项用于大 n,lg max{a0...an} 用于小 n 和大 a0, a1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-15
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多