堆和堆排序在笔试题面试题中的应用

时间:2020-11-26 18:16:12 笔试经验 我要投稿

堆和堆排序在笔试题面试题中的应用

   堆和堆排序在笔试题面试题中的应用;

堆和堆排序在笔试题面试题中的应用

      使用堆解决可以解决下列几个问题,它们在笔试面试题中可以称为经典和烫手的:

  1. 构建哈夫曼代码怎样提升性能?

  我们知道在构建哈夫曼树时,每次要选择集合中两个最小的元素,然后将元素值相加,合并为一个新节点,此时两个最小的元素的.取出可以用HeapExtractMin函数来实现,产出的新节点需要插入到堆中 我们有MinHeapInsert函数来实现。

  之前我们遇到哈夫曼编码,往往关注的是其思想,然而每次取出最小的2个元素的过程,却涉及到排序、求极值的问题。这时候用堆来维护这个队列,每次还能将取出的两个最小值的和插到堆里,非常方便,减少了运行时间。

  2. 计算大型浮点数集合的和

  有一个很普遍的情况,我们知道浮点数的存储都有精度,遇到大浮点数和小浮点数相加,很可能会造成精度误差。所以可以每次从优先级队列中取出最小的两个数相加,和1的实现差不多。

  3. 在具有10亿个数值的集合中找到100万个最大的数

  这个就是TOP(K)问题了,可以建立100万个元素的最小二叉堆,后面的数和根部进行比较,如果大于根部,进行堆调整

  4. 将多个小型有序文件合并到一个大型有序文件中

  该问题我整理成了另一篇文章。里面附有源码测试;

  假设有 n个 小型有序文件,建立一个大小为n的最小堆,每个有序文件贡献一个(如果有的话),每次取出最小值插入到大型文件中,并且去掉该最小元素,并将它在文件中的后续元素插入到堆中,能够在o(lgn)的时间内从n个文件中选择要插入到大型文件中的元素。

  意思就是,维护一个堆,该堆存放了所有小文件的最小值。每次取出最小值min(属于小文件A),将小文件A的下一个最小值再插入到A。持续下去,问题解决。

其他的相关笔试经验:

农村商业银行笔试分享    女大学生应聘银行心得    经验客服笔试题让你思维灵活

【堆和堆排序在笔试题面试题中的应用】相关文章:

关于php堆排序实现原理与应用方法11-19

逻辑学知识在政治判断题中的应用论文12-06

世界500强企业英语面试题中英文12-11

浅谈经济问题中的数学建模应用10-12

浅谈土工合成材料在新建堆石坝及病险库加固中的应用10-27

关于Java堆、栈和常量池的介绍10-05

360笔试题目07-11

华为2017笔试题08-16

关于理赔专员面试技巧和试题12-18

分享在步步高vivo2018校招笔的面试经验01-18