假设我有一个数组,我想从数组中随机选择元素,但有些数组元素为null,如下所示:
[0, 1, 3, null, 3, 2, null, 9, 12]
如果我随机选择它们(使用一个好的,无偏的随机数生成器),然后降落,那么我会随机选择,直到找到一个非空元素。我这样做是为了避免在我的选择中引入偏见。
问题是:这种选择的时间复杂度(以大O表示法或更合适的时间复杂度表示法)是什么?
显然,如果所有元素都为null,那么它将永远不会完成,如果没有元素为null,那么它是O(1),但我不清楚如何在两者之间表达值。
我知道组织数组的另一种方法是避免漏洞,然后它总是O(1):我不是问如何更好地实现它,我问怎么样表达这种复杂性。
答案 0 :(得分:2)
正如您所指出的,在最坏的情况下,此算法永远不会终止,因此T(n)
未定义(或无穷大)。
您可能对average-case time complexity更感兴趣,randomized algorithms比最坏情况复杂度更常用于描述{{3}},例如您的。{/ p>