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

【10大基础算法】线性查找算法-NO5相关推荐

  1. 算法工程师必知必会10大基础算法!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Cricode  博客园 来源:博客园 链接:http://kb. ...

  2. 程序员必须知道的10大基础实用算法及其讲解

    2014-06-17 WEB开发者 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但 ...

  3. 【随笔】游戏程序开发必知的10大基础实用算法及其讲解

    算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n logn)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常 ...

  4. dijkstra算法原理_这 10 大基础算法,程序员必知必会!

    来源:博客园原文地址:http://kb.cnblogs.com/page/210687/算法一:快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序n个项目要Ο(nlogn)次 ...

  5. 《转》程序员必须知道的10大基础实用算法及其讲解

    来源: Cricode  发布时间: 2014-06-19 08:27  阅读: 2018 次  推荐: 8   原文链接   [收藏] 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算 ...

  6. 第10章 基础API与常见算法

    第10章 基础API与常见算法 学习目标 了解数学相关API 了解日期时间API 了解系统类API 掌握数组基础算法 掌握数组工具类的使用 熟练掌握String类的API 熟练掌握StringBuil ...

  7. 产品经理10大基础技能(5):读透神经网络和机器学习

    本篇先介绍许多热门的行业均在产生AI产品经理岗位的需求,再详细介绍AI产品经理必懂的AI技能,接着撰写什么是神经网络?什么是机器学习?最后用一个案例详细拆解AI产品经理如何用机器视觉识别手写字体的整体 ...

  8. 产品经理必懂的技术那点事儿 pdf_产品经理10大基础技能(5):读透神经网络和机器学习...

    本篇先介绍许多热门的行业均在产生AI产品经理岗位的需求,再详细介绍AI产品经理必懂的AI技能,接着撰写什么是神经网络?什么是机器学习?最后用一个案例详细拆解AI产品经理如何用机器视觉识别手写字体的整体 ...

  9. sql统计表中各类型金额_产品经理市场需求旺盛的10大基础技能——第1篇读透SQL...

    本篇灵感源自援引<经济学人>最近发表的一篇文章,预计2020年将成为AI技术全面成为主流的一年而起,先撰写比较火热的数据产品经理岗位,在数据产品经理岗位里有对产品经理必须要懂的技术SQL. ...

  10. cb32a_c++_STL_算法_查找算法_(5)adjacent_find

    cb32a_c++_STL_算法_查找算法_(5)adjacent_find adjacent_find(b,e),b,begin(),e,end() adjacent_find(b,e,p),p-p ...

最新文章

  1. 深入理解C语言-二级指针三种内存模型
  2. centos 日志切割_CentOS下的日志切割
  3. synchronsized修饰方法的使用
  4. java.lang.Long cannot be cast to java.lang.Integer解决办法
  5. SAP Spartacus cxPageTemplateStyle Directive的作用
  6. 用treeview遍历文件夹(vb)
  7. RxJava学习总结
  8. 韦东山第3期嵌入式Linux项目-视频监控-2-从零写USB摄像头驱动(UVC驱动)
  9. 无法从服务器获取视频文件,视频从云服务器获取视频文件
  10. 【题解】【AcWing】1526. 洗牌机
  11. 最小二乘法拟合二次曲线 C语言
  12. 部署harbor服务器(https/http)
  13. Maltego 版本类型重新选择
  14. Python 使用 matplotlib绘制3D图形
  15. 轻量化中文版linux,MX Linux:一款专注于简洁性的中等体量发行版 | Linux 中国
  16. NLP文本提取中打标签列表和方案
  17. EVA(新世纪福音战士)经典语句
  18. html学习之路教程001
  19. [转]在 Azure 云服务上设计大规模服务的最佳实践
  20. python文件操作和异常之文件的操作

热门文章

  1. Vue图表(v-charts, e-charts)入门安装使用
  2. html混淆压缩,JavaScript的压缩和混淆
  3. 上海图书馆及分馆特色
  4. 通用css样式模板,
  5. 智慧灯杆解决方案之智慧景区(园区)建设
  6. FLV视频合并-JAVA代码
  7. nofollow标签的写法与作用
  8. 机器学习-单层感知器不能实现异或运算的原因
  9. git合并某个分支的某次提交(cherry-pick)
  10. 面试百问:项目上线后才发现bug怎么办?