算法导论--在平均线性时间下选择元素
来源:互联网 发布:软件项目实施规范 编辑:程序博客网 时间:2024/04/30 15:03
一般的选择问题比简单的选择最小值要难的多。但是,随着n的增大,它们所消耗的时间都是O(n)。这一次我们介绍一个基于分治法的算法来解决这个问题,叫做随机选择算法,英文名叫,RANDOMIZED-SELECT。这个算法跟快速排序很像,只不过它只在一边执行partition算法。这个区别导致这样的分析:苏日安快速排序的时间复杂度是O(nlgn),但是RANDOM-SELECT算法的平均时间是O(n),在元素都是互不相同的假设下。
RANDOMIZED-SELECT 用RANDOMIZED-PARTITION程序。就像随机化快速排序,这是一个随机化的算法。因为它的部分行为是基于一个随机数产生器产生的随机数的。以下的伪代码返回i th smallest, 即是第i小的元素,在一个数组里。
来解释以下:
第1-2行:这里是递归的返回条件之一,当A[p…r]之间包含的只有一个元素的时候,这种情况下,i == 1, 并且我们在第2行就直接返回A[p],就是i th smallest 元素。
第3行:调用随机化partition算法,这时候A[p…q-1]小于等于A[q],并且A[q+1….r]大于A[q]。就像快速排序,我们将A[q]命名为pivot元素
第4行:计算子数组A[p..q]的元素个数k
第5行:检查A[q]是否是i th smallest元素,如果是,就直接返回A[q],否则的话,算法需要决定i th smallest元素在哪个子数组里,A[p…q-1]或者是A[q+1….r]
第7-9行:判断我们想要的元素在哪个子数组,然后递归执行。
时间复杂度:最坏情况下这个算法的时间复杂度是O(n^2),也就是我们特别倒霉,每次划分都划分出了最大的剩下的元素。但是平均情况下,这个算法有着线性的复杂度O(n),这里就不证明了。
阅读全文
0 0
- 算法导论--在平均线性时间下选择元素
- 分治算法;随机化划分函数;快速排序;线性时间选择第K小元素;快速排序平均时间复杂度nlgn;
- 算法导论,9.3,最坏情线性时间的选择算法
- 算法导论 第2版 9.2 线性时间做选择
- 线性时间排序-算法导论
- 算法导论--线性时间排序
- 线性时间选择算法
- 线性时间选择算法
- 线性时间选择算法
- 线性时间选择算法
- 线性时间选择算法
- 寻找 最小的k个数 线性选择算法 平均时间复杂度 O(n)
- 【算法导论】线性时间选择---从数组中选择第i小的数
- 线性选择算法(算法导论p109)
- 算法导论第9章最坏情况为线性时间的选择算法
- 算法导论 第9章 中位数和顺序统计学(线性时间选择算法)
- 算法导论 最坏情况为线性时间的选择算法 9.3-8 9.3-9
- 最坏情况为线性时间的选择算法---算法导论学习笔记(2)
- bzoj 2165 大楼
- mysql数据库连接错误的奇葩原因
- UVALive5369 UVa732 HDU1515 ZOJ1004 Anagrams by Stack【DFS+堆栈】
- 抽象类和抽象方法以及和接口的区别
- Java参数传递方式
- 算法导论--在平均线性时间下选择元素
- Ubuntu16.04下利用Pycharm和Anaconda搭建Python IDE(集成开发环境)
- 线程中异常抛出的一些问题
- css学习笔记(一)选择器hack的使用
- JS的DOM(二)节点操作
- 算法--06年华为面试:求两个数组的最小差值(Java实现)
- javascript的征程五---特殊的引用类型Bollean、Number、String(未完待续)
- tp框架默认将数据库中的字段都变成了小写,怎么解决?
- Scala高阶函数与隐式转换