算法/程序是否有可能具有相同的最坏情况和最佳情况时间?
例如:
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)
答案 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)。