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

举报
知识浅谈 发表于 2022/09/25 10:50:18 2022/09/25
【摘要】 从一个8G大文件中取出k个最大值,面试官看我不会还给我讲了一下

在这里插入图片描述

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

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

正菜来了⛳⛳⛳

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

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

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

🎈第二种方法:归并排序

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

🍚总结

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。