请大虾帮我看看这段伪码,谢谢!
mcmib 2003-10-18 12:15:41 select(L,k)
{
if (L has 10 or fewer elements)
{
sort L
return the element in the kth position
}
partition L into subsets S[i] of five elements each
(there will be n/5 subsets total).
for (i = 1 to n/5) do
x[i] = select(S[i],3)
M = select({x[i]}, n/10)
partition L into L1<M, L2=M, L3>M
if (k <= length(L1))
return select(L1,k)
else if (k > length(L1)+length(L2))
return select(L3,k-length(L1)-length(L2))
else return M
}
小弟找到上面这段关于deterministic linear time selection algorithm(Median-of-medians algorithm)的伪码,但是下面两句看不太懂。
for (i = 1 to n/5) do
x[i] = select(S[i],3)<----这里为什么要用3来再分组?
M = select({x[i]}, n/10)<-----这里为什么是n/10而不是n/5?
还请哪位大虾讲解一下,如有可能还麻烦能不能帮小弟把伪码换成java的代码,小弟对看伪码实在没有心得。万分感谢!