1
通过随机分区进行集中选择?
在数字的数组中查找中值元素的常用简单算法是:AAAnnn 从采样元素并替换为n3/4n3/4n^{3/4}AAABBB 排序并找到排名元素和的BBB|B|±n−−√|B|±n|B|\pm \sqrt{n}lllrrrBBB 检查和在的中位数的相对侧,并且对于某些适当的常数在和与之间最多有元素。如果没有发生,则失败。lllrrrAAACn−−√CnC\sqrt{n}AAAlllrrrC>0C>0C > 0 否则,通过在和之间对的元素进行排序来找到中位数AAAlllrrr 不难看出这是线性运行的,并且成功的可能性很高。(所有不良事件与二项式的期望值相差很大。) 针对相同问题的另一种算法,这里描述的是一种更自然的方法,可以教给看过快速排序的学生:随机选择 还很容易看出,该循环的预期运行时间是线性的:说“回合”是一系列递归调用,当一个人进行1 / 4-3 / 4分割时结束,然后观察到一个回合最多为2。(在第一回合中,成功分割的概率为1/2,然后实际上增加了,因为描述了算法,所以回合长度受几何随机变量支配。) 所以现在的问题是: 是否有可能表明随机选择在线性时间内运行的可能性很高? 我们有回合,并且每个回合的长度至少为,概率最大为,因此并集约束得出运行时间为以概率。k 2 − k + 1 O (n log log n )1 − 1 / O (log n )O(logn)O(logn)O(\log n)kkk2−k+12−k+12^{-k+1}O(nloglogn)O(nloglogn)O(n\log\log n)1−1/O(logn)1−1/O(logn)1-1/O(\log n) 这有点令人不满意,但实际上是真的吗?