Algorithm 使用最小堆查找第k个最大元素

Algorithm 使用最小堆查找第k个最大元素,algorithm,sorting,data-structures,heap,min-heap,Algorithm,Sorting,Data Structures,Heap,Min Heap,我有一个关于使用最小堆查找第k个最大元素的问题。算法如下: 我们获取第一个k元素并构建一个minheap 设Sk为S中的最小元素 从剩余的n-k元素中看一个新元素 如果新元素大于Sk,那么它将在S中替换它,并对堆进行重新排序 然后将有一个新的最小元素 在看了所有其他元素之后,Sk就是答案 我不懂这个算法。例如,让数字为1、2、3、4。我们想找到第四大,也就是第四大。但是当我们使用该算法时,我们取前4个元素,构建minheap,Sk为1 我做错了什么?如果有人能帮忙,我将不胜感激。谢谢我想你对术语

我有一个关于使用最小堆查找第k个最大元素的问题。算法如下:

  • 我们获取第一个k元素并构建一个minheap

  • 设Sk为S中的最小元素

  • 从剩余的n-k元素中看一个新元素

  • 如果新元素大于Sk,那么它将在S中替换它,并对堆进行重新排序

  • 然后将有一个新的最小元素

  • 在看了所有其他元素之后,Sk就是答案

  • 我不懂这个算法。例如,让数字为1、2、3、4。我们想找到第四大,也就是第四大。但是当我们使用该算法时,我们取前4个元素,构建minheap,Sk为1


    我做错了什么?如果有人能帮忙,我将不胜感激。谢谢

    我想你对术语感到困惑。序列1、2、3、4中最大的元素是数字4。第二大元素是3,第三大元素是2,第四大元素是1。由于该算法返回1,因此工作正常

    然而,4是序列中的第k个最小元素。如果您想找到第k个最小的元素,您可以将最小堆与最大堆交换,并对算法进行适当的调整


    希望这有帮助

    哦,是的,我想我的大脑停止工作了一段时间。这是一个愚蠢的错误。谢谢大家!@用户1941394-不用担心!我花了大约五分钟的时间试图弄清楚到底发生了什么,所以我认为这是一个很容易犯的错误。