找出一个数组的最大值和最小值是比较容易的,我们只需遍历一次数组即可。但是寻找一个数组的第i小或者第i大,就需要一些技巧使得查找的时间尽可能小。随机化划分选择算法是一个时间复杂度为O(n)的算法。

int fIndmax(int a[],int p,int r,int i)
{if(p==r)return a[p];int q = RandPartition(a, p, r); // A[q]作为主元将A[p...r]进行划分。int k = q - p + 1;           //假设k是要查找的第i小的元素if(i==k)                        //如果K=i则主元就是目标元素,如果i<k,则递归地求解左边的序列,如果i>k则递归求解右边的序列return a[q];else if(i<k){return fIndmax(a, p, q-1, i);}elsereturn fIndmax(a, q+1, r, i-k);
}

这个算法的缺点是:如果一个数组中又重复元素,那么得到的结果不是我们期望的结果。解决方法是先删除数组中重复的元素,再利用本算法。 应该还有更好地方法!

转载于:https://www.cnblogs.com/cliviazhou/p/3757929.html

中位数和顺序统计,以线性期望时间做选择相关推荐

  1. 【思维】中位数与顺序统计

    算法定义 在统计学中,中值(又称中位数)代表一个样本.种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分.对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中值.如果观察 ...

  2. 《算法导论》读书笔记之第9章 中位数和顺序统计学

    摘要: 本章所讨论的问题是在一个由n个不同数值构成的集合中选择第i个顺序统计量问题.主要讲的内容是如何在线性时间内O(n)时间内在集合S中选择第i小的元素,最基本的是选择集合的最大值和最小值.一般情况 ...

  3. 算法设计与分析——顺序统计量:期望为线性时间的选择算法

    分类目录:<算法设计与分析>总目录 相关文章: · 顺序统计量:最大值与最小值 · 顺序统计量:期望为线性时间的选择算法 · 顺序统计量:最坏情况为线性时间的选择算法 选择算法指的是在一个 ...

  4. 最坏情况为线性时间的选择算法

    最坏情况为线性时间的选择算法 参考:[算法]算法导论:https://www.bilibili.com/video/BV1Tb411M7FA?p=6 提出问题:从一个数组中找到第K个最大数字,即TOP ...

  5. c语言存储的逻辑顺序,栈是不是顺序储存的线性结构啊?

    栈是不是顺序储存的线性结构啊?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 栈是不是顺序储存的线性结构啊? 呃~弄明白 ...

  6. 最坏情况为线性时间的选择算法(SELECT)

    该文章参考(代码参考进行修改已经验证)--来源作者博客 算法思想 1.将数组的 n 个元素划分为 [n/5](向下取整)组,每一组5个元素,且至多只有一组由剩下的 n mod 5 个元素组成 2.寻找 ...

  7. 线性连续时间状态空间模型的离散化及实例

    线性连续时间状态空间模型的离散化(Discretization of Linear Continuous-Time State-Space Models) 1 .状态空间模型 非线性连续时间状态空间模 ...

  8. pandas基于时序数据计算模型预测推理需要的统计数据(累计时间、长度变化、变化率、方差、均值、最大、最小等):范围内的统计量、变化率、获得数据集最后的几条数据的统计量、变化率、获得范围内的统计量

    pandas基于时序数据计算模型预测推理需要的统计数据(累计时间.长度变化.变化率.方差.均值.最大.最小等):范围内的统计量.变化率.获得数据集最后的几条数据的统计量.变化率.获得范围内的统计量 目 ...

  9. pandas基于时序数据计算模型预测推理需要的统计数据(累计时间、长度变化、变化率、方差、均值、最大、最小等):数据持续的时间(分钟)、获得某一节点之后的数据总变化量、获得范围内的统计量

    pandas基于时序数据计算模型预测推理需要的统计数据(累计时间.长度变化.变化率.方差.均值.最大.最小等):数据持续的时间(分钟).获得某一节点之后的数据总变化量.获得范围内的统计量 目录

  10. SQL Server 查找统计信息的采样时间与采样比例

    SQL Server 查找统计信息的采样时间与采样比例 原文:SQL Server 查找统计信息的采样时间与采样比例 有时候我们会遇到,由于统计信息不准确导致优化器生成了一个错误的执行计划(或者这样表 ...

最新文章

  1. /usr/local/lib/libz.a: could not read symbols: Bad value(64 位 Linux)
  2. 有效快速的学习微信小程序
  3. 超详细的java生成excel文件并下载
  4. Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序
  5. 绑定Service的三种实现方式之使用Messenger
  6. boost::endian::detail::is_scoped_enum用法的测试程序
  7. C++包含头文件几种方式
  8. XSS挑战赛--Writeup(共16题)
  9. ajax和jquery教程pdf,ajax和jquery教程pdf
  10. linux c null头文件,linux c malloc函数定义及用法详解
  11. 强化学习笔记 Ornstein-Uhlenbeck 噪声和DDPG
  12. Linux进程间通信-消息队列
  13. 要怎么在计算机里清除桌面内存,告诉你电脑内存怎么清理
  14. 骄傲地宣布一件事:月入3万的目标还没实现
  15. springboot 实现长链接转短链接
  16. Golang publish module
  17. 全球约有 150 亿台设备在运行 Java,收费后还能用吗?
  18. 中国移动、联动、电信
  19. matlab trangle,Triangle-of-Point-Cloud Matlab 三维点云三角化 不是平面域的三角化 是三维点云三角化 亲身测试绝对可用! - 下载 - 搜珍网...
  20. 初始Ext.net(二)

热门文章

  1. 居家隔离的第5天,我们整了个六边形战士
  2. python—IFrame:在jupyter notebook中展示某个网页的情况
  3. 利用python进行数据分析—8.数据清洗与准备
  4. Python —os.listdir() 方法
  5. 8种最差的预测建模技术,你认同吗?
  6. 写一本Linux内核方面的书籍
  7. 《Java程序员职场全功略:从小工到专家》连载五:当今主流公司的企业文化
  8. 3.概率分布函数与概率密度函数
  9. 学习Hadoop需要哪些预备知识?Java是否必须会?
  10. 有趣的算法(六):3分钟看懂插入排序(C语言实现)