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。 ..}}}递归步骤。那么世界上哪里可以得到一个n plus lg(max {a0,a1 ... an}运行时?是因为在调用Extended Euclid时,无论b的值是多少,两者中的较小值都会非常迅速地衰减,因此对于大多数呼叫来说b基本上都是O(1)?
另外,有趣的是,Knuth TAOCP第2卷第4.5.3节(第364页)问题45给出了这个问题:
开发用于计算三个或更多整数的最大公约数的算法分析。
问题难以评定“HM48”(其中HM表示“需要更高水平的数学,书中没有讨论过,而48是50分,其中50分是”证明费马的最后定理“ )。
答案 0 :(得分: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。