【问题标题】:Time Complexity of Euclid Algorithm by SubtractionEuclid算法的时间复杂度减法
【发布时间】:2021-05-13 18:31:36
【问题描述】:
 int gcd(int a, int b)
{
    while(a!=b)
    {
        if(a > b)
            a = a - b;
        else
            b = b - a; 
    }

    return a;
}

这个算法的时间复杂度是多少?谁能给个详细的解释?

【问题讨论】:

  • 如果 a = 1 且 b = 0,此算法永远不会终止。
  • @templatetypedef nope,对于欧几里得减法算法,ab 必须是正整数。
  • @Anatolii 修改算法以处理其中一个为零的输入不是很简单吗?
  • @templatetypedef 当然,你是对的,但我不知道 OP 有什么确切要求。至少,OP 可以使用unsigned 类型作为参数和函数返回类型。

标签: time-complexity euclidean-algorithm


【解决方案1】:

对于欧几里得减法算法,ab 是正整数。

最坏的情况是a = nb = 1。然后,将采取n - 1 步骤来计算GCD。因此,时间复杂度为 O(max(a,b)) 或 O(n)(如果根据迭代次数计算)。

顺便说一句,您还应该修复您的函数,以便它验证 ab 是否真的是正整数。或者更好的是,您可以将返回值和参数类型更改为 unsigned longunsigned int 或类似的,并按照 @templatetypedef 的建议分别处理 a = 0b = 0 的情况。

【讨论】:

    猜你喜欢
    • 2019-04-21
    • 2015-06-24
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    相关资源
    最近更新 更多