算法可以具有相同的最佳和最差情况时间复杂度吗?

时间:2011-06-27 05:20:10

标签: java algorithm time complexity-theory

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

例如:

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

Big - O: 为O(n)

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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