【发布时间】:2014-01-09 12:39:34
【问题描述】:
考虑在一组 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
这个平均时间复杂度是否记录在任何可引用的参考文献中?平均时间复杂度是多少?如果您的答案有可引用的参考资料,请附上。
【问题讨论】:
-
IMO for k
-
@Dukeling:我不是在寻求推荐。我应该以具有唯一答案的方式修改问题吗?例如,通过请求包含此结果的 first 发布?对我来说,问题更多的是这样的参考是否存在。
-
对可引用参考的请求与此网络无关。问“我怎么做/找到这个/这是什么”这个问题很好,但如果你真的寻求研究帮助,那就不合适了。
-
元讨论here.
-
与其要求引用,为什么问题不只是“平均时间复杂度是多少?”从第一原则中弄清楚并不难(例如:见我的回答)。
标签: algorithm heap complexity-theory time-complexity top-n