部分排序以找到第k个最大/最小元素

杜比

资料来源:维基百科

使用堆或其他优先级队列数据结构,也可以进行流式单遍部分排序。首先,将输入的前k个元素插入结构中。然后遍历其余元素,依次将每个元素添加到结构中,并删除最大的元素。每次插入操作还需要O(log k)时间,因此总共需要O(n log k)时间。

  1. 这与我们先在O(n)时间内对整个输入数组进行堆然后提取k次最小堆的情况有什么不同。
  2. 我不明白它说的那部分make one pass over the remaining elements, add each to the structure in turn, and remove the largest element这与1)中描述的方法不一样吗?
弗雷德·富

建议的方法是流式传输。考虑到空间复杂度为O(k),它不需要将所有项目都存储在内存中即可运行heapify算法(但它只能找到前k个项目)。

该算法的更明确的描述(另请参见WP提供参考)是

  • 给定一个项目流:
  • 在流中的前k个元素中堆放一堆
  • 对于第一个k之后的每个元素
    • 把它推到堆上,
    • 从堆中提取最大(或最小)的元素并将其丢弃,
  • 最后返回堆中剩余k个值。

通过构造,堆永远不会增长到超过k + 1个元素。可以从磁盘,通过网络等流式传输项目,而使用heapify算法则无法实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

部分排序以找到第k个最大/最小元素

来自分类Dev

从两个排序的数组中找到第k个最小的元素

来自分类Dev

如何在不对列表进行排序的情况下找到列表的第k个最小元素?

来自分类Dev

在O(log n)中找到第k个最小元素

来自分类Dev

最大堆查找第 k 个最小元素

来自分类Dev

给定一个大小为n的整数数组,找到第k个最大元素而不对整个数组进行排序

来自分类Dev

两个排序数组的并集中的第k个最小元素

来自分类Dev

两个排序数组的并集中的第k个最小元素

来自分类Dev

返回第k个最小元素的函数

来自分类Dev

通过随机枢轴法找到第K个最小元素。一些奇怪的错误

来自分类Dev

向数组中插入绝对差后,找到数组中的第k个最大元素

来自分类Dev

numpy:在两组之间找到二维数组中第k个最大或最小的数组

来自分类Dev

快速选择算法以找到第k个最小数的实现

来自分类Dev

快速选择算法以找到第k个最小数的实现

来自分类Dev

使用快速排序的变体的第k个最小数

来自分类Dev

使用快速排序的变体的第k个最小数

来自分类Dev

找出既不是第k个最大值也不是第k个最小值的元素的时间复杂度?

来自分类Dev

在数组中找到第K个最大的整数

来自分类Dev

如何找到具有第k个最大和的对?

来自分类Dev

使用分区的数组中第K个最小元素

来自分类Dev

递归获得数组中第k个最小的元素

来自分类Dev

在SQL中找到第N个最大元素

来自分类Dev

不了解中位数算法以找到第k个元素

来自分类Dev

“部分排序”的数学定义

来自分类Dev

C ++部分排序错误

来自分类Dev

数组的K个最大元素,排序算法

来自分类Dev

在数组中找到第k个最大元素,两个不同的priority_queue解决方案时间复杂度

来自分类Dev

最小堆中大于或等于x的第K个最小元素

来自分类Dev

考虑到数组未排序且 n 是数组的大小,如何在 nk 个比较中找到 k 个最小元素之一

Related 相关文章

  1. 1

    部分排序以找到第k个最大/最小元素

  2. 2

    从两个排序的数组中找到第k个最小的元素

  3. 3

    如何在不对列表进行排序的情况下找到列表的第k个最小元素?

  4. 4

    在O(log n)中找到第k个最小元素

  5. 5

    最大堆查找第 k 个最小元素

  6. 6

    给定一个大小为n的整数数组,找到第k个最大元素而不对整个数组进行排序

  7. 7

    两个排序数组的并集中的第k个最小元素

  8. 8

    两个排序数组的并集中的第k个最小元素

  9. 9

    返回第k个最小元素的函数

  10. 10

    通过随机枢轴法找到第K个最小元素。一些奇怪的错误

  11. 11

    向数组中插入绝对差后,找到数组中的第k个最大元素

  12. 12

    numpy:在两组之间找到二维数组中第k个最大或最小的数组

  13. 13

    快速选择算法以找到第k个最小数的实现

  14. 14

    快速选择算法以找到第k个最小数的实现

  15. 15

    使用快速排序的变体的第k个最小数

  16. 16

    使用快速排序的变体的第k个最小数

  17. 17

    找出既不是第k个最大值也不是第k个最小值的元素的时间复杂度?

  18. 18

    在数组中找到第K个最大的整数

  19. 19

    如何找到具有第k个最大和的对?

  20. 20

    使用分区的数组中第K个最小元素

  21. 21

    递归获得数组中第k个最小的元素

  22. 22

    在SQL中找到第N个最大元素

  23. 23

    不了解中位数算法以找到第k个元素

  24. 24

    “部分排序”的数学定义

  25. 25

    C ++部分排序错误

  26. 26

    数组的K个最大元素,排序算法

  27. 27

    在数组中找到第k个最大元素,两个不同的priority_queue解决方案时间复杂度

  28. 28

    最小堆中大于或等于x的第K个最小元素

  29. 29

    考虑到数组未排序且 n 是数组的大小,如何在 nk 个比较中找到 k 个最小元素之一

热门标签

归档