【问题标题】:How to find 5 biggest elements in extremely big array optimally如何在极大的数组中最优地找到 5 个最大的元素
【发布时间】:2015-11-09 15:15:17
【问题描述】:

我有一个非常大的数组。我必须找到该数组中前 5 个最大的元素。执行此操作的最佳/最佳算法是什么?

请注意,我不必进行排序,它是一个未排序的数组

【问题讨论】:

  • 使用大小为 5 的堆,如果元素大于最小的堆,则将其放入该堆(并删除它)。
  • @JonH 选择算法是O(n),但代码复杂且常量可怕。如果您在 nm 大得多的 n 未排序数组中寻找 m 元素,那么 Nico 建议的堆解决方案在实践中将会快得多。

标签: c# arrays algorithm data-structures


【解决方案1】:

如果数组未排序,最有效的算法是遍历列表并将 5 个最大的元素存储在 SortedList 中。当迭代中的当前元素大于最小元素(SortedList 中的第一个元素)时,删除最小元素并将当前元素添加到列表中。复杂度为O(n)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 2019-08-31
  • 2020-09-22
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多