算法复习——分而治之篇之次序选择问题
以下内容主要参考中国大学MOOC《算法设计与分析》,墙裂推荐希望入门算法的童鞋学习!
1. 问题背景
最小值查找:
-
例如给定数组 A [ 1..16 ] A[1..16] A[1..16],寻找其中最小值,如下图所示。

-
依次扫描,记录最小值

那么,对问题稍加改变,如何求得数组中第 k k k小的元素?
2. 问题定义
次序选择问题(Selection Problem)
输入:
- 包含 n n n个不同元素的数组 A [ 1.. n ] A[1..n] A[1..n]
- 整数 k ( 1 ≤ k ≤ n ) k(1\leq k \leq n) k(1≤k≤n)
输出:
- 数组 A [ 1.. n ] A[1..n] A[1..n]中第 k k k小的元素 ( 1 ≤ k ≤ n ) (1 \leq k \leq n) (1

本文围绕次序选择问题展开,即求数组中第k小的元素。先介绍问题背景与定义,指出排序求解虽可行但非最优。受快速排序启发,提出固定位置划分和随机位置划分两种分治求解方法,还给出伪代码,并分析了时间复杂度,随机位置划分期望时间复杂度为O(n)。
871

被折叠的 条评论
为什么被折叠?



