这些功能的平均复杂度是多少?

时间:2018-12-14 01:18:04

标签: time-complexity complexity-theory

我不确定如何计算平均复杂度。

textView.setBackgroundColor(color)

给定该函数的给定条件,如果它的条件为99.9999999999999%的时间为假,则如何计算其复杂度;假70%? 50%? 10%? 0.00000001%

1 个答案:

答案 0 :(得分:1)

如果我们用p(和p > 0)来表示您的情况的概率,并且do stuff是恒定时间操作,那么算法的时间复杂度将为{{1 }}。

在这种情况下,您选择的概率对时间复杂度没有影响的事实确实可能引起一些混乱。当然,如果使用O(p*n) = O(n),该算法将平均运行一半的时间,就好像p = 0.5一样。但是big-O是衡量函数增长的速率的量度,这就是为什么常数项不起作用的原因。

但是,平均时间复杂度比这有趣得多。特别是如果概率取决于输入,则很容易构造一个有趣的事情发生的示例。请考虑以下算法:

p=1

现在,foor循环将以r = a uniformly random integer from 1 to n if (r==1) { for (1 : n) { do stuff } } 的概率执行,因此平均时间复杂度将为1/n。请注意,最坏​​情况下的时间复杂度仍为O(1/n * n) = O(1)

有关更实际的示例,请考虑Quicksort algorithm。它的平均时间复杂度为O(n),而最坏情况下的时间复杂度为O(n*log(n))。在这里,影响概率的是输入列表中的元素,而不是其长度O(n^2)