我很难理解分区集合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,则查找枢轴右侧,然后递归。
但是,在上面的伪代码中,我不明白枢轴和k之间的比较在哪里发生。我的意思是,它不应该与&a;>= k进行比较吗,而不是|S1| >= k,因为a是枢轴?
集合中元素的数量如何影响与k的比较?