if语句的平均运行时间

时间:2017-07-12 05:50:11

标签: algorithm big-o analysis

我的算法看起来像这样:

if condition 
    O(1) algorithm 
else
    O(n)

当条件始终为false时,最坏情况运行时为O(n)。然而,在实践中,条件通常是正确的。如何分析此算法的平均运行时复杂度?或者甚至不适用?摊销分析更合适吗?

4 个答案:

答案 0 :(得分:3)

该算法渐近 O(n) ,因为随着n的增长,复杂性也在线性增长。但是,根据O(n)案例的概率,系数会非常低。

它不能是O(1),因为这意味着更改n不会影响预期的算法时间 - 而且它不是真的。

更新:如果O(n)的情况只发生在一小部分时间内怎么办?

如果false预期,即使很少,那么我仍然会说O(n)。 如果它是某种意外情况,例外情况,那么它可能被称为O(1)

例如,如果0.0001%的值为false,则为O(n),因为增加n仍会增加算法时间。
如果它总是true ,除非存在问题/特殊"错误"输入案例/例外/错误,在好的情况下,你永远不会得到false,然后是O(1)。 这就是我的看法,我可能错了:)

答案 1 :(得分:1)

Big-O分析用于描述最坏情况的复杂性,因此该算法的总体大O为O(n)。

您的if条件只是一种优化 - 您可以简单地在分析中说明您希望优化在当时 x%时有效...

答案 2 :(得分:1)

首先,我认为"平凡的复杂性是O(n)"这是一个正确的陈述,因为平均复杂度不应该比最坏情况的复杂性差。

如果您想找到更好的数字,您需要根据平均案例复杂度的定义来定义平均值。它通常与输入的分配有关。一旦你发现条件错误的概率"平均而言#34;你可以找出复杂性。 我建议你看看这个例子。 https://en.wikipedia.org/wiki/Amortized_analysis#Dynamic_Array

如果您告诉我们有关条件/算法的更多信息,也会有所帮助。

事实上,我想也许你想要的不是理论上的复杂性。我想你想要用现实生活数据进行基准/时间分析。

答案 3 :(得分:0)

设x =条件为假的次数。

如果x可以用常数绑定,则算法为O(1)。否则它是O(n)。

相关问题