假设A(n)是算法的平均运行时间,W(n)是最差的。
是否正确?A(n) = O(W(n))
总是如此?
答案 0 :(得分:2)
Big O表示法有点棘手,因为它只定义了给定算法执行时间的上限。
这意味着,如果f(x) = O(g(x))
,那么对于其他所有功能h(x)
,g(x) < h(x)
您将拥有f(x) = O(h(x))
A(n) = O(W(n))
。问题是那些超过预期的执行时间是否有用?并且明确的答案根本没有。你通常认为的是“最小的”
你可以获得上限,但在定义中并不严格要求,所以你可以使用它。
您可以使用其他符号(例如Big Theta)获得更严格的约束,因为您可以阅读here。
因此,您的问题的答案是肯定的,{{1}},但这并没有提供有关该算法的任何有用信息。
答案 1 :(得分:1)
如果你提到A(n)和W(n)是函数 - 那么,是的,你可以在常见情况下做这样的陈述 - 这是因为big-o formal definition。
请注意,就big-o而言,采取这种方式是没有意义的 - 因为它会让真正的复杂性变得更糟。 (一般情况下,三个案例 - 最差,平均,最好 - 正好表示复杂性更加清晰)
答案 2 :(得分:1)
是的,这样说是不错的。
人们使用渐近符号来根据输入大小来表示特定情况下运行时间的增长。为了比较平均情况复杂性和最差情况,复杂性并没有提供对理解函数在任何一种情况下增长的深入了解。 />
虽然没有错,但它没有提供比我们已经知道的更多的信息。
答案 3 :(得分:0)
我不确定你究竟要问什么,但请记住以下内容。
用于显示平均和最差情况下运行时复杂度之间差异的典型算法是快速排序,选择不当的支点。
对于未分类数据的随机样本,运行时复杂度为n log(n)
。但是,对于已经排序的数据集,其中从列表的前端/末端获取枢轴,运行时复杂性为n^2
。