选择问题(选最大,选最小,选第k小)

原创 2015年05月08日 22:20:19

选择问题:一个含有n个不相等实数的集合,输出集合中的第i小元素

如果i=1,则为寻找最小元素
如果i=n,则为寻找最大元素
如果i处在集合序列的中间,则为寻找中位数

选最大

算法:顺序比较,首先假定第一个元素为最大,接着最大元素与第二个元素比较,若最大元素小于第二个元素,则两者交换,否则继续与第三个元素比较

最多需要做n-1次比较运算
最坏情况下时间复杂度:W(n)= n-1

选最大最小

同时求最大元素与最小元素

通常算法

  • 先选最大元素
  • 再在剩下的元素中选最小元素(与选最大类似)

时间复杂度:W(n) = n-1 + n -2 = 2n-3

分组算法

  • 将n个元素两两一组,分成n/2组(假设n为偶数)
  • 每组中的两个元素比较,分成较大的跟较小的,所有较大的元素放到一组,较小的元素放到一组,这样就得到n/2个较大元素与n/2个较小元素
  • 在较大的元素中寻找最大元素
  • 在较小的元素中寻找最小元素

时间复杂度:将元素分成较大一组与较小一组一共需要做n/2次比较,在较大元素中寻找最大元素需要做n/2 - 1次比较,寻找最小同理也需要n/2 - 1次比较
所以一共需要:W(n) = 3n/2 - 2

分治算法

  • 将数组从中间划分成两个数组L1与L2
  • 递归地在L1中寻找最大max1与min1
  • 递归地在L2中寻找最大max2与min2
  • max{max1,max2},min{min1,min2}

时间复杂度:W(n) = 2W(n/2) + 2, W(2) = 1
W(n) = 3n/2 -2

选第k小元素

方法1

做k次选最小的算法,时间复杂度W(n) = O(kn)

方法2

先排序然后再输出第k小元素
时间复杂度:O(nlogn)

方法3(分治)

  • 用某个元素m,将数组S分为小于m的部分S1,与大于m的部分S2
  • 如果S1中的元素个数n1>k,则就在S1中寻找第k小的元素,
  • 如果n1 + 1 == k,则m就是第k小的元素
  • 如果(n1 + 1)< k,则就在S2(元素个数n2)中寻找第(k-n1-1)小的元素

但是算法的效率取决于子问题的规模,如何通过m来控制子问题的规模?

  • 可以将数组S分组,比如5个数一组,分成n/5组,每组由大到小排序,中位数放到一个集合M中,取集合M中的中位数作为m来控制子问题规模
版权声明:本文为博主原创文章,未经博主允许不得转载。

(十三)、ZooKeeper 选主流程

zookeeper 核心机制包括:恢复模式(选主流程)和广播模式(同步流程)。当服务刚启动、leader 崩溃、follower 不足半数时,系统就进入选主流程,此时不对外提供服务;当 leader被...
  • liuyuehu
  • liuyuehu
  • 2016年10月30日 16:15
  • 2321

ZooKeeper的选主机制

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式式应用程序可以基于它实现同步服务,配置维护和命名服务等。ZooKeeper是Hadoop的一个子项目。...
  • yaozaiyuanfang
  • yaozaiyuanfang
  • 2016年04月09日 19:11
  • 943

HTML5与JQuery混合应用:选座功能逻辑简单实现

功能目标: 假设为了实现一个选座功能,用HTML5和JQuery来实现: 首先要将座位分布画出来,但往往是大量的座位,因此要借助JQuery语句通过循环来实现; 然后用户点击其中一个座位后,要得到该座...
  • cordova
  • cordova
  • 2016年03月11日 09:47
  • 3514

选择问题(第k小元素)(分治法)

Selection algorithm 选择问题即第k小元素问题。 解决该问题的基本思想与快速排序算法相同,通过选择基元进行划分,从而知道第k小元素在哪里。 原始数据使用随机函数生成。 采用结构化程...
  • tigerisland45
  • tigerisland45
  • 2016年04月22日 07:22
  • 1899

硬件还是软件,让爱好来选择

大三了,该选硬件还是软件?让爱好来选择
  • yangkuiwu
  • yangkuiwu
  • 2016年09月21日 21:44
  • 412

android 自定义view之选座功能

效果图: 界面比较粗糙,主要看原理。这个界面主要包括以下几部分 1、座位 2、左边的排数 3、左上方的缩略图 4、缩略图中的红色区域 5、手指移动时跟随移动 6、两个手指缩放时跟随缩放主...
  • asd1031
  • asd1031
  • 2016年11月07日 17:46
  • 5032

5-28 猴子选大王 (20分)

一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不...
  • qq_26570353
  • qq_26570353
  • 2016年04月03日 15:58
  • 2573

[洛谷 P1036]选数

题目描述已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时...
  • dxyinme
  • dxyinme
  • 2017年06月26日 11:58
  • 312

用JQuery实现全选、全不选、反选

$(function () { $('#allOrNone').click(function () { //点击“选择状态”,实现全选与全不选 ...
  • Joyhen
  • Joyhen
  • 2013年08月01日 09:28
  • 1062

Jsp页面的全选、反选、批量删除、

为大家提供一个表单的jsp页面,含有全选、 反选和批量删除Code,用的时候粘一下就ok,拿来学习也可以。 【文档最后附表单body】 【全选】         function al...
  • Maxwell_Chia
  • Maxwell_Chia
  • 2015年01月17日 10:43
  • 709
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:选择问题(选最大,选最小,选第k小)
举报原因:
原因补充:

(最多只允许输入30个字)