【发布时间】:2013-07-21 10:30:10
【问题描述】:
我无法理解分区集合 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 的比较发生在哪里。我的意思是,它不应该与 >= k 而不是 |S1| 进行比较>= k,因为 a 是支点?
在与 k 的比较中,集合中的元素数量如何发挥作用?
【问题讨论】:
-
Let S1,S2,S3 be sets of elements in S (<,=,> to a)a>b 和c>b意味着c>a。 数学又来了
标签: algorithm