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


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

  • 相关阅读:
    第四次实验报告
    第三次实验报告
    第五章 循环结构课后反思
    第二次实验报告
    第一次实验报告
    第一次作业
    第九章实验报告(构造数据类型)
    第八章实验报告(指针实验)
    第七章实验报告(数组实验)
    第六章 函数和宏定义实验(2)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4852344.html
Copyright © 2011-2022 走看看