博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
比列的数目更多,以便找到第一k小值
阅读量:5827 次
发布时间:2019-06-18

本文共 654 字,大约阅读时间需要 2 分钟。

        问题叙述性说明:现有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

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

你可能感兴趣的文章
Lucene系列:(2)LuceneUtils工具封装
查看>>
shell的历史、作用和职责
查看>>
MySQL 安装遇到的问题集
查看>>
网站开发JS学习总结
查看>>
mysql使用时的一些常用命令
查看>>
ajax传输json到后台
查看>>
控制器加载的玄机
查看>>
res索引讲解(drawable、layout、values)等目录的分辨率和layout的横竖屏
查看>>
team链路聚合,
查看>>
利用SQL对度假区进行评分
查看>>
好快时间,时间好快,追的上吗?
查看>>
轻松教你如何用自己的电脑做服务器
查看>>
企业“云”
查看>>
我的友情链接
查看>>
storm supervisor挂掉错误
查看>>
Linux man命令的使用方法
查看>>
hbase region in transition
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
jfianl中将验证码做成拦截器,可以重复使用
查看>>