从具有空值的数组中随机选择非空元素的复杂性是多少?

时间:2014-04-08 22:15:45

标签: arrays random time-complexity big-o

假设我有一个数组,我想从数组中随机选择元素,但有些数组元素为null,如下所示:

[0, 1, 3, null, 3, 2, null, 9, 12]

如果我随机选择它们(使用一个好的,无偏的随机数生成器),然后降落,那么我会随机选择,直到找到一个非空元素。我这样做是为了避免在我的选择中引入偏见。

问题是:这种选择的时间复杂度(以大O表示法或更合适的时间复杂度表示法)是什么?

显然,如果所有元素都为null,那么它将永远不会完成,如果没有元素为null,那么它是O(1),但我不清楚如何在两者之间表达值。

我知道组织数组的另一种方法是避免漏洞,然后它总是O(1):我不是问如何更好地实现它,我问怎么样表达这种复杂性。

1 个答案:

答案 0 :(得分:2)

正如您所指出的,在最坏的情况下,此算法永远不会终止,因此T(n)未定义(或无穷大)。

您可能对average-case time complexity更感兴趣,randomized algorithms比最坏情况复杂度更常用于描述{{3}},例如您的。{/ p>