【问题标题】:Can algorithms have the same best- and worst-case time complexity?算法能否具有相同的最佳和最坏情况时间复杂度?
【发布时间】:2011-09-23 05:59:59
【问题描述】:

算法/程序是否有可能具有相同的最坏情况和最佳情况时间?

例如:

public static int factorial(int number)
{
    factorial = 1; 
    for (i = 1; i <= number; i++) 
        factorial = factorial * i;
}

这是阶乘问题的程序段,我试图解决时间复杂度问题。它似乎没有最坏和最好的情况时间,因为无论你有什么输入,它仍然会通过其余的代码,这与你有 if-else 语句时不同。

如果是这种情况,我是否应该假设我从这段代码中得到的结果是最好的、最坏的和平均的情况时间?

我做对了吗?

public static int factorial(int number)
    {
        factorial = 1;                   // 1
        for (i = 1; i <= number; i++)    // 1+3n
            factorial = factorial * i;   // 2
        return factorial;                // 1
    }

最坏情况/最佳情况: 3n+5

大 - O : O(n)

【问题讨论】:

    标签: java algorithm time complexity-theory


    【解决方案1】:

    当然。大 O 描述了一个上界,而小 o 描述了某个渐近量的下界(例如算法的时间复杂度)。实际上有一个特殊的符号来给出渐近紧密的边界(这是当大 o 与小 o 相同时得到的),称为大 theta 符号。

    【讨论】:

    • 不准确。大 O 是上限,小 O 是下限,而 theta 是两者的聚合,但这就是定义的范围(用外行的话来说)。但是,您可以为最坏情况计算、最佳情况计算等定义 Theta 函数...
    • @Yaneeve:当然!相同的符号可用于渐近时间复杂度分析(例如数论或实数分析)之外的许多情况。我将答案编辑得更清楚。
    【解决方案2】:

    在您的情况下,当"number" 固定时,您的程序没有最坏或最好的情况 - 它总是进行"number" 迭代,因此它具有线性复杂度。
    有关正式的数学定义,请参阅以下文章:
    http://en.wikipedia.org/wiki/Analysis_of_algorithms
    http://en.wikipedia.org/wiki/Big_O_notation

    【讨论】:

    • 所以我可以假设这是最坏和最好的情况吗?
    • 哦..我明白了...我仍然对那个感到困惑..:) 感谢您的回答! :)
    • 我有一个后续问题..它在我的问题中......底部部分
    【解决方案3】:

    在这种情况下,最坏情况的复杂度与最坏情况的复杂度相同 = O(n)。 正是因为你指出的原因。无论输入是什么,算法总是执行相同的操作(没有 if/else)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多