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