线性时间查找及排序的下界笔记(不完全)
来源:互联网 发布:java get post 编辑:程序博客网 时间:2024/05/18 00:50
问题阐述
在选择问题中, 我们需要输出含有
我们可以通过对数组进行排序以
problem in linear
算法描述
算法中的一个关键子过程是围绕一个关键元素对数组进行划分(关键元素在(Kleinberg和Tardos的著作中被称为”划分子”), 该子过程选取了数组
以关键元素作为临界点进行划分有两个原因, 一是可以降低问题的规模, 而是可以在线性时间内对其进行求解. 一个比较容易的实现方式是对数组
这里有一个巧妙的方式使用重复的交换对数组进行”原地”排序(即, 不必引入第二个数组
Select
(0) If
(1)
(2)
(3) 假设
(3a) 如果
(3b) 如果
(3c) 否则返回 Select(
确保你理解了递归调用背后的合理性(比如思考一下何时
算法的运行时间依赖于ChoosePivot过程挑选出来的关键元素的质量.
例如, 如果ChoosePivot总是返回数组
因此关键就是运用ChoosePivot使得总能返回一个很好的关键元素—-可以进行一个”平衡”的划分. 当然, 最好可能的关键元素是中位数, 这就是我们之前努力寻找的, 似乎我们陷入了SQ1复原的双重困境.
算法的中心思想就是执行ChoosePivot过程使得迅速找到一个很好的关键元素. 我们很好的关键元素将会是”中位数中的中位数”, 在如下的意义中. ChoosePivot过程输入是数组
- 线性时间查找及排序的下界笔记(不完全)
- 简单排序算法的时间下界
- 线性时间的排序
- 《算法导论》笔记 第8章 8.1排序算法时间的下界
- 线性时间的排序算法
- 线性时间的计数排序
- 各种查找和排序的定义及时间复杂度
- 各种查找和排序的定义及时间复杂度
- 线性时间查找固定频率的元素
- 线性时间的中位数查找算法
- 线性时间的中位数查找算法
- 线性时间查找
- 【算法导论-学习笔记】以线性时间增长的排序——计数排序
- 二分查找下界 下界
- 基于比较排序时间复杂度下界
- 插入排序和时间复杂度下界
- [算法学习笔记]线性时间排序----计数排序
- 线性时间排序的性能比较
- ASP.net项目创建
- 小试Googletest记一
- Codeforces 779B-Weird Rounding
- 单链表
- 设计模式(二)-Java单例模式(Singleton模式)
- 线性时间查找及排序的下界笔记(不完全)
- TensorFlow——变量的初始化
- 安卓开发选择图片并裁剪
- c++29、断言和静态断言
- FRANK MULLER 有声书
- MongoDB和Redis的区别
- iOS10新特性之UIRefreshControl的使用
- Nginx转发地址解决跨域问题
- 【2017网络协议编程与分析课程设计】(一)开始写程序之前的一些准备