确定性选择算法的递归关系

时间:2020-03-02 19:52:54

标签: algorithm selection recurrence divide-and-conquer quickselect

存在用于选择的线性时间确定性算法。我读了link,分而治之的方法看起来像这样:T(n)<= 12n / 5 + T(n / 5)+ T(7n / 10)

但是,我不明白为什么它一定是T(7n / 10)。链接本身已经提到分区的每个部分的大小为(3n / 10),因此算法在(6n / 10)上递归。即使我们包括中位数中位数组中的5个元素,递归仍为(6n / 10 + 5)。我确实知道7n / 10是递归大小的有效上限,但是这里的上限不是太弱吗?

1 个答案:

答案 0 :(得分:0)

7n/10不是3n/10 + 3n/10 + n/10的结果;它来自做n - 3n/10

通过链接:

就扔掉的元素(不包括在通话中)而言,谈论这一点更容易。

该论点是,递归调用是在由 not 组成的较短列表上进行的,其中包括一些元素。通过显示列表中至少排除了 3n/10个元素,得出了最多包括了 7n/10个元素,并且该边界很严格因为3n/10的边界很紧。

因此,通过显示L1和L3各自包含来自每个3n/10子集的至少3个元素,可以表明L1和L3的大小都至少为n/10;然后将L1或L3中的一个从递归调用中排除,得到结果。由于仅排除了L1或L3中的一个(不是两个),因此将它们的大小加在一起是没有意义的。