为什么中位数算法算法不能使用块大小3?

时间:2012-02-01 03:31:49

标签: algorithm selection complexity-theory big-o

我正在研究确定性中位数发现的分析,假设输入分为3个而不是5个,问题是它在哪里分解?

确定性中位数发现算法:

SELECT(i,n)

  1. 将n个元素分成5个组。 通过死记硬背查找每个5元素组的中位数。

  2. 递归地选择⎣n/5⎦的中位数x 将中位数作为支点。

  3. 围绕枢轴x进行分区。设k = rank(x)

  4. 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少。在这里我认为算法会崩溃!!

    我的想法是否正确?

1 个答案:

答案 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,这还不足以实现收支平衡。