快速 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 最小的元素。