如何理解中位数算法的中位数复杂度?

时间:2018-09-23 19:53:59

标签: algorithm selection

我正在按照此处描述的说明进行操作 https://brilliant.org/wiki/median-finding-algorithm/ 中位数算法部分的复杂性 它描述了大约3n / 10的最佳情况和7n / 10的较差情况 我不明白它是如何得到3n / 10和7n / 10零件的?虽然它提到“对于每个元素,都有两个小于它的元素(因为这些元素是五个元素列表中的中位数,两个元素较小,两个元素较大)。”

2 个答案:

答案 0 :(得分:1)

在将列表分为5个n/5组并找到中位数p之后,您需要确定最坏的情况,即仍然需要多少个元素来寻找真实的中位数

考虑列表中有多少个元素必须小于p(或等于,在更简单的不同元素列表中情况只有p

n/5组中的一半的中位数小于p。在这些组中,有3个元素(中位数和两个较小的值)必须小于p。我们不知道较大的元素是否大于p,并且不知道中位数大于p的组中是否有元素小于p

因此,在最坏的情况下,我们确定1/2 * n/5个组-n/10个组-每个组都有3个元素,这些元素肯定小于p。那就是3n/10元素。在最坏的情况下,所有其他元素都大于p,这会使7n/10元素大于p来递归地执行此算法。

答案 1 :(得分:0)

该算法成功的关键在于每一步都将丢弃恒定比例的元素。

2k+1的中位数在两边都有k个元素。然后(2k+1)(2l+1)个元素的中位数肯定在两侧都有(k+1)(l+1)-1个元素(每个中位数都不小于k+1个元素,并且有l+1个中位数,均不小于中位数的中位数。

分数是((k+1)(l+1)-1)/(2k+1)(2l+1)。对于k=2,我们有(3(l+1)-1)/5(2l+1) ~ 3l/10