我有一个关于使用小根堆查找第k大元素的问题。算法如下:
1. 取前k个元素并构建小根堆 2. 令Sk为S中最小元素 3. 查看新元素,从剩余的n-k个元素中选择 4. 如果新元素比Sk大,则用它替换Sk,并重新排序堆 5. S将会有一个新的最小元素 6. 在查看所有其他元素之后,Sk就是答案
我不理解这个算法。例如,我们有数字1、2、3、4。我们想找到第4个最大的元素,即4。但当我们使用该算法时,我们取前4个元素构建小根堆,并且Sk是1。
我做错了什么?如果有人能帮忙解答,我会很感激。谢谢。
1. 取前k个元素并构建小根堆 2. 令Sk为S中最小元素 3. 查看新元素,从剩余的n-k个元素中选择 4. 如果新元素比Sk大,则用它替换Sk,并重新排序堆 5. S将会有一个新的最小元素 6. 在查看所有其他元素之后,Sk就是答案
我不理解这个算法。例如,我们有数字1、2、3、4。我们想找到第4个最大的元素,即4。但当我们使用该算法时,我们取前4个元素构建小根堆,并且Sk是1。
我做错了什么?如果有人能帮忙解答,我会很感激。谢谢。