zoukankan      html  css  js  c++  java
  • 比列的数目更多,以便找到第一k小值

            问题叙述性说明:现有n作为一个有序序列(2,3,9),(3,5,11,23),(1,4,7,9,15,17,20),(8,15,35,9),(20,30,40),第k小值。


         问题分析:可用多路归并排序将全部序列进行排序后取第k个值,可是仅仅要求求出第k小值将全部数组排序未免显得有点浪费,所以我们能够使用包括k个元素的堆完毕,对于每组元素取出前k小的。依次进行比較,得到总的前k小


         运行步骤:

    一、建初堆:从第一组数中取出前k小的元素建初始大根堆(若不足k个则取所有元素)。

    二、

    1 、补充堆:若堆中元素不足k个,则从下一组数中获取来补足

    2、与该组元素比較:否则从下一组的第一个元素開始,依次与堆顶元素比較。

           (1)若小于堆顶元素,则将该元素与堆顶元素交换,调整堆,从该组的下一个元素開始反复第2部的操作一直到该组的第k个数

          (2)剪枝:若大于堆顶元素。说明后面的均会大于堆顶元素。则结束该组的比較操作

    三、循环进行二的操作,直到全部数组比較完成

    四、堆顶元素即为第k小的元素


        举例说明:以题目序列为例。k为5

    一、建初堆,由于数组一仅仅有三个元素,全部初始堆为三个元素


    1、补充堆,由于堆中元素不足5个,全部用第二组元素将堆补充完整,得:


    2、第二组第三个元素为11,大于堆顶元素9,属于第(2)种情况,要剪枝,所以第二组后面元素不再与堆顶元素比較

    三、从第三组数到第n组数。依次运行第二步的操作

    四、终于得出的堆为


    所以第五大元素为堆顶元素4


    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    vue-cli
    使用git push命令如何忽略不想提交的文件夹或者文件
    Ajax实现的城市二级联动三
    Ajax实现的城市二级联动二
    Ajax实现的城市二级联动一
    DOM之城市二级联动
    如何把SVG小图片转换为 html字体图表
    vue权威指南笔记01——样式的设置
    2018年前端年末小结
    Array常用方法总结
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4852344.html
Copyright © 2011-2022 走看看