c# - 大 O 符号和算法

标签 c# algorithm big-o

我目前正在研究并尝试实现一些算法。我试图理解 Big O 表示法,但我无法计算出以下算法的 Big O 复杂度:

while (a != 0 && b != 0)
{
    if (a > b)
        a %= b;
    else
        b %= a;
}

if (a == 0)
    common=b;
else
    common=a;

最佳答案

很容易看出,经过两次迭代后,最小的数字至少变小两倍。如果一开始等于m,那么经过2K次迭代后不会超过m/2^K。如果我们将 K = [log_2(m)] + 1 放在这里,我们将看到在 2K 次迭代之后,最小的数字变为零,循环终止。因此迭代次数不超过 2(log_2 m + 1) = O(log m)。

关于c# - 大 O 符号和算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4535434/

相关文章:

algorithm - 为什么排序算法可以正常工作?

algorithm - 时间太复杂的算法示例?

c# - T4 模板 : Import namespace in host assembly

c# - 在 ASP.NET 中发布后将状态消息返回到页面

javascript - window.open() 没有以我传递给它的高度打开

c# - 比较两个类型为 T 的 System.Enum

Java:将一组整数的所有可能组合放在矩阵列表中的算法

algorithm - 分析序列的算法

algorithm - 算法简介,练习 10.2-4

algorithm - 何时(而不是如何或为什么)计算算法的大 O