Time complexity GCD迭代欧氏算法的时间复杂度

Time complexity GCD迭代欧氏算法的时间复杂度,time-complexity,Time Complexity,下面是计算m和n的最大公约数的欧几里德算法的迭代实现 while(m!=n) { 如果(m>n) m=m-n; 其他的 n=n-m; } 上述代码的时间复杂度是多少?最坏的情况至少在n+m中是线性的(因此输入的大小是指数的),因为我们可以选择m>1和n=1,以便该算法在精确的m-1迭代中正确地确定GCD(m,n)=1。这意味着最坏的情况是ω(m+n)=ω(2^k),其中k是输入编码中的位数 最坏的情况在m+n中最多是线性的(因此输入的大小是指数的),因为在每个步骤中,m或n至少减少1(假设

下面是计算
m
n
的最大公约数的欧几里德算法的迭代实现

while(m!=n)
{ 
如果(m>n)
m=m-n;
其他的
n=n-m;
} 

上述代码的时间复杂度是多少?

最坏的情况至少在n+m中是线性的(因此输入的大小是指数的),因为我们可以选择m>1和n=1,以便该算法在精确的m-1迭代中正确地确定GCD(m,n)=1。这意味着最坏的情况是ω(m+n)=ω(2^k),其中k是输入编码中的位数

最坏的情况在m+n中最多是线性的(因此输入的大小是指数的),因为在每个步骤中,m或n至少减少1(假设n,m>0)。因此,循环最多可以迭代m+n次(事实上,它永远不会迭代那么多次,但肯定不会迭代更多)。这意味着最坏的情况是O(m+n)=O(2^k),其中k是输入编码中的位数

因此,最坏的情况在m+n中是完全线性的,也就是说,输入k的大小是指数的:它是θ(m+n)=θ(2^k)


当一个以数字作为输入的算法的运行时间与输入值成多项式关系,但与输入编码的大小(如二进制)成指数关系时,该算法被称为在伪多项式时间内运行。

这里的输入是大小
log2(n)的数字
n
m
log2(m)
。时间复杂度表示为输入大小的函数。
一般来说,欧几里德算法的时间复杂度在输入大小上是线性的(例如,请检查),但在这种实现中,您有一个指数级的最坏情况运行时

假设
n>m
m=1
。这意味着代码将变为以下内容:

while (m != n) 
    { 
        n = n - m; 
    } 

在最坏的情况下,您的迭代次数等于输入大小的指数

我想你在这里用‘n’表示两种不同的意思;在第一个示例中,您说n=1,然后它进行n-1次迭代。@kaya3您是对的,从外观上看应该是m-1。在这种情况下,如果我用O(n)等作为线性的同义词,可能也会让人困惑。比我的答案更好。输入大小实际上是位数,而不是输入数字的值。这只是伪多项式。