使用Extended Euclid进行多变量gcd计算的复杂性

问题描述 投票:0回答:1

CLRS的第31.2-7条运动的一部分

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

我无法弄清楚复杂性表达可能来自何处。

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

因此,它的上限是O(n * lg(max {a0,a1 ... an}):n调用双变量扩展Euclid,每个最多取lg(max {a0,a1 ... an递归步骤。那么在世界上哪里可以获得n加lg(max {a0,a1 ... an}运行时?是因为在调用Extended Euclid时,无论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个回答
0
投票

我对O(n * lg max {a0 ... an})的推理是不正确的。即使我们调用双变量扩展euclid n次,所有这些调用中的较小参数b实际上是严格减少的,即使在不同的Extended euclid调用中也是如此;不会像我原先假设的那样每次重置一些顶级值aj。

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

© www.soinside.com 2019 - 2024. All rights reserved.