博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BFPRT线性查找算法
阅读量:7236 次
发布时间:2019-06-29

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

hot3.png

介绍:

BFPRT算法解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分 析,BFPRT可以保证在最坏情况下仍为线性时间复杂度。该算法的思想与快速排序思想相似,当然,为使得算法在最坏情况下,依然能达到o(n)的时间复杂 度,五位算法作者做了精妙的处理。

时间复杂度

O(N)

算法步骤:

1. 将n个元素每5个一组,分成n/5(上界)组。

2. 取出每一组的中位数,任意排序方法,比如插入排序。

3. 递归的调用selection算法查找上一步中所有中位数的中位数,设为x,偶数个中位数的情况下设定为选取中间小的一个

4. 用x来分割数组,设小于等于x的个数为k,大于x的个数即为n-k。

5. 若i==k,返回x;若i<k,在小于x的元素中递归查找第i小的元素;若i>k,在大于x的元素中递归查找第i-k小的元素。

终止条件:n=1时,返回的即是i小元素。

测试结果:

数组里有10000个随机数, 执行500次后花费的毫秒数

最大毫秒数为208
最小毫秒数为86
平均毫秒数为102
查找失败次数0

疑问:

这里的代码示例耗时过长,高达100ms,比排序获取第k小的数字还慢,不知道哪里出了问题,请大家指教。

代码示例:

BFPRT线性查找算法

转载于:https://my.oschina.net/arrowing/blog/296670

你可能感兴趣的文章
如何解决SQL Server 2008 R2中“阻止保存要求重新创建表的更改”的问题!
查看>>
cloudstack 4管理器安装备忘
查看>>
sentry日志管理系统安装以及使用教程
查看>>
python-pip : Depends: python-setuptools (>= 0.6c1) 问题
查看>>
iptables外网一端口通过NAT转发内网一服务器端口上
查看>>
新书推荐
查看>>
程序与生活:生活要持续更新
查看>>
网络安全系列之四十九 IIS6.0权限设置
查看>>
VSphere client 虚拟机克隆及网卡报错处理
查看>>
【第一期】如何打造属于自己的网站编辑器——CKEditor与UEditor之争
查看>>
linux下卷组管理
查看>>
17个Linux系统高频率常用命令行和shell小脚本
查看>>
VisualSvn Server介绍
查看>>
Nginx性能测试工具之http_load
查看>>
为httpd服务器上单一的网站做客户机地址限制和用户授权限制知识补充
查看>>
Windows Server 2008终端服务详解系列4:TS网关的部署
查看>>
路由器通过NVI解决内网访问内部服务器的外部映射地址测试
查看>>
系统架构师-基础到企业应用架构-分层[上篇]
查看>>
【斗医】【2】Web应用开发20天
查看>>
Exchange 2010迁移Exchange 2013(一)共存部署
查看>>