考虑在一组 N 个独立且同分布的浮点值中找到前 k 个元素的任务。通过使用优先级队列/堆,我们可以对所有 N 个元素进行一次迭代,并通过以下操作维护一个 top-k 集合:
如果元素 x 比堆头“差”:丢弃 x ⇒ 复杂度 O(1)
如果元素 x 比堆的头部“更好”:移除头部并插入 x ⇒ 复杂度 O(log k)
这种方法最坏情况的时间复杂度显然是O(N log k),但是平均时间复杂度呢?由于 iid 假设,O(1) 操作的概率随着时间的推移而增加,我们很少需要执行代价高昂的 O(log k),尤其是对于 k << N。
这个平均时间复杂度是否记录在任何可引用的参考资料中?平均时间复杂度是多少?如果您的答案有可引用的参考资料,请附上。