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