写点什么

从一个 8G 大文件中取出 k 个最大值,面试官看我不会还给我讲了一下

作者:知识浅谈
  • 2022 年 9 月 25 日
    吉林
  • 本文字数:648 字

    阅读完需:约 2 分钟

从一个8G大文件中取出k个最大值,面试官看我不会还给我讲了一下

🍁 作者:知识浅谈,CSDN 博客专家,阿里云签约博主,InfoQ 签约博主,华为云云享专家

📌 擅长领域:全栈工程师、爬虫、ACM 算法

💒 公众号:知识浅谈


从一个 8G 大文件中取出 k 个最大值解决方法总结🤞这次都给他拿下🤞我们都知道一个大文件的话不能够一次读到内存当中进行排序,所以i我们要另寻他法


正菜来了⛳⛳⛳

🎈第一种方法:使用优先队列

这个是我已经说出来的解决方法,但是因为之前理解错了,所以给面试官说优先队列也说错了,面试后才算真正懂了,但是这次面试也 G 了。


正确的方法:我们创建一个 k 个数量的优先队列,最小堆的那种类型,然后遍历文件中的数据经过判断添加到优先队列中即可,就是这个地方容易理解错,我们要取出最大的 k 个值,为什么要用最小堆,而不是最大堆呢,最大堆不是存放的大值吗,其实应该这么理解,最小堆堆顶存放的是最小值,当遍历数据的时候,分别与堆顶元素比较,如果比堆顶元素大,把堆顶元素删除,插入当前元素,重新调整堆,遍历完之后队列中就是最大的 k 个值。

🎈第二种方法:归并排序

温馨提醒:这个才是最好的方法因为上一个每一个元素都要和堆顶元素比较,还可能有插入堆,调整堆的步骤。正解:第一步:把这个大文件拆分成小文件,要能够一次内存中能加在两个小文件的大小即可。第二步:每次加载两个小文件规定排序,取出前 k 个,然后再把前两个的前 k 个最大值和后两个的前 k 个去 k 个最大值,之后的文件类型,就是一个归并的路径。

🍚总结

以上就是关于从一个 8G 大文件中取出 k 个最大值的两种解决方法,希望有所帮助,第一种好理解,第二种只要按照归并排序的方法理解就可以。

发布于: 刚刚阅读数: 3
用户头像

知识浅谈

关注

公众号:知识浅谈 2022.06.22 加入

🍁 作者:知识浅谈,InfoQ签约作者,CSDN博客专家/签约讲师,华为云云享专家,阿里云签约博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥 联系方式vx:zsqtcc

评论

发布
暂无评论
从一个8G大文件中取出k个最大值,面试官看我不会还给我讲了一下_优先队列_知识浅谈_InfoQ写作社区