我无法理解分区集合 S 中的元素数量与第 k 个最小数字的关系。假设我有这个伪代码:
Select (k,S)
if |S|=1 then return a in S
Choose random a in S
Let S1,S2,S3 be sets of elements in S (<,=,> to a)
If |S1|>=k then return Select(k,S1)
Else if |S1| + |S2| >= k then return a
Else return Select(k-|S1|-|S2|, S3)
据我所知,为了找到第 k 个最小的元素,我选择了一个枢轴并对枢轴周围的数字进行排序,使得所有较小的数字都在左侧,所有更大的数字都在枢轴的右侧。然后,如果我想找到第 k 个最小的数字,我将它与枢轴的位置进行比较,如果枢轴的位置大于 k,我会查看枢轴的左侧,如果枢轴的位置小于 k ,我从那里向右看并递归。
但是,在上面的伪代码中,我看不到上面与 pivot 和 k 的比较发生在哪里。我的意思是,它不应该与 >= k 而不是 |S1| 进行比较 >= k,因为 a 是支点?
与 k 的比较如何影响集合中的元素数量?