快速 Select 澄清
Quick Select Clarification
Quick Select 的这张幻灯片中的“k”到底是什么意思?
假设您取了一个数字 x
。
令L
为数组中小于x
的数字集合,集合大小为|L|
设E
为数组中等于x
的数字集合,集合的大小为|E|
设G
为数组中大于x
的数字集合,集合大小为|G|
让我们想象一下排序数组,前 |L|
个数字 (1 -> |L|)
包含在集合 L
.
中
以下 |E|
个数字 (|L|+1 -> |L|+|E|)
包含在集合 E
中。
集合 G
中包含以下 |G|
个数字 (|L|+|E|+1 -> end)
。
我们正在寻找 kth
最小的数字,所以我们有 3 个案例:
1) k <= |L|
这意味着我们要查找的数字在排序数组中的前 |L|
个数字中,因此我们在 kth
中搜索最小的数字=11=].
2) |L| < k <= |L|+|E|
这意味着我们要查找的数字在排序数组中位于 (|L|+1 -> |L|+|E|)
之间的位置,因此它是 E
中的一个元素。由于E
的所有元素都等于x
,我们知道kth
最小的数等于x
。
3) k > |L|+|E|
这意味着我们要查找的数字在排序数组中位于 (|L|+|E|+1 -> end)
之间的位置,因此它是 'G' 中的一个元素。由于已经有|L|+|E|
个数字小于kth
个最小的数字,我们可以用k
减去|L|+|E|
,我们称它为k'
(k' = k - |L| - |E|
),并在 G
中搜索 k'th
最小的元素。
Quick Select 的这张幻灯片中的“k”到底是什么意思?
假设您取了一个数字 x
。
令L
为数组中小于x
的数字集合,集合大小为|L|
设E
为数组中等于x
的数字集合,集合的大小为|E|
设G
为数组中大于x
的数字集合,集合大小为|G|
让我们想象一下排序数组,前 |L|
个数字 (1 -> |L|)
包含在集合 L
.
以下 |E|
个数字 (|L|+1 -> |L|+|E|)
包含在集合 E
中。
集合 G
中包含以下 |G|
个数字 (|L|+|E|+1 -> end)
。
我们正在寻找 kth
最小的数字,所以我们有 3 个案例:
1) k <= |L|
这意味着我们要查找的数字在排序数组中的前 |L|
个数字中,因此我们在 kth
中搜索最小的数字=11=].
2) |L| < k <= |L|+|E|
这意味着我们要查找的数字在排序数组中位于 (|L|+1 -> |L|+|E|)
之间的位置,因此它是 E
中的一个元素。由于E
的所有元素都等于x
,我们知道kth
最小的数等于x
。
3) k > |L|+|E|
这意味着我们要查找的数字在排序数组中位于 (|L|+|E|+1 -> end)
之间的位置,因此它是 'G' 中的一个元素。由于已经有|L|+|E|
个数字小于kth
个最小的数字,我们可以用k
减去|L|+|E|
,我们称它为k'
(k' = k - |L| - |E|
),并在 G
中搜索 k'th
最小的元素。