我正在研究确定性中位数发现的分析,假设输入分为3个而不是5个,问题是它在哪里分解?
确定性中位数发现算法:
SELECT(i,n)
将n个元素分成5个组。 通过死记硬背查找每个5元素组的中位数。
递归地选择⎣n/5⎦的中位数x 将中位数作为支点。
围绕枢轴x进行分区。设k = rank(x)
4.如果i = k,则返回x
elseif i< k
然后递归地选择第i个 下部的最小元素
否则递归地选择第(i-k)个 上部的最小元素
我对算法进行了分析,我相信第1步和第3步将采用O(n),只需要一段时间来找到5个元素的中位数,Step2需要T(n / 5).so至少3/10的元素≤p,并且阵列中至少3/10是≥p,因此,步骤4将为T(7n / 10)并将得到重现。 T(n)≤cn+ T(n / 5)+ T(7n / 10), 但是当我将元素分成3的goroup时,让我们说9个元素,然后我将它们分成组:
{1,2,10} {4,11,14},{15,20,22}
我得到了中位数2,11,20和p = 11.
一般来说,一组五个让我们说g = n / 5组,至少⌈g/2⌉ 其中(中位数≤p的那些组)至少有五个元素中的三个是≤p。所以元素总数≤p至少为3⌈g/2⌉≥3n/ 10。但是在3组中我们可以得到所有三个元素可能比p少。在这里我认为算法会崩溃!!
我的想法是否正确?
答案 0 :(得分:8)
在3组中,对于5组,大约一半的组的中值元素将小于中位数的中位数,因此在这些组中,您可以丢弃小于中位数的元素。在你的情况下,(1,2,10)的中位数小于11,所以你可以丢弃1和2。
我认为,对于3人一组而言,事情发生了分析。 3(大约3n / 10的楼层(楼层(n / 5)/ 2-2)变成2(楼层(楼层(n / 3)/ 2 -2)左右,大致为n / 3。这意味着7n / 10变为2n / 3. floor(n / 5)变为floor(n / 3),所以不是7cn / 10 + 2cn / 10 = 9cn / 10你只得到2cn / 3 + cn / 3 = cn,而不是T(n)< = cn,你将需要仔细查看不涉及c的术语,并且最终可能会显示它不是线性的。
看起来你实际上在递归的每个阶段都会丢弃更多的元素,但是递归将剩下的工作量除以3而不是5,这还不足以实现收支平衡。