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

Posted

技术标签:

【中文标题】确定性选择算法的递归关系【英文标题】:Recurrence Relation for Deterministic Selection Algorithm 【发布时间】:2020-06-15 03:40:17 【问题描述】:

存在用于选择的线性时间确定性算法。我读了这个link,分而治之的方法看起来像:T(n)

但是,我不明白为什么必须是 T(7n/10)。链接本身已经提到分区的每一半都有大小(3n/10),所以算法在(6n/10)上递归。即使我们从中位数的中位数组中包含 5 个元素,递归仍然在 (6n/10+5) 上。我知道 7n/10 是递归大小的有效上限,但这里的上限不是太弱了吗?

【问题讨论】:

但是这些已经算在(3/10n)的两个分区中了。 如果你遍历算法,它是隐含的。因为 3n/10 表示每个中值元素加上该组中的 2 个元素。 【参考方案1】:

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

来自链接:

用丢弃的元素(不包括在调用中)来谈论这个更容易。

参数是递归调用是在一个较短的列表上进行的,该列表由 not 组成,包括一些元素。通过显示 至少 3n/10 元素被排除在列表之外,因此 至多 7n/10 元素被包括在内,并且由于@987654326 的限制是紧密的@bound 很紧。

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

【讨论】:

以上是关于确定性选择算法的递归关系的主要内容,如果未能解决你的问题,请参考以下文章

贪心算法及其理论依据——拟阵

算法总结之递推与递归

基础算法| 快速排序 (C++ 和 python实现)

基础算法| 快速排序

Java算法 选择排序算法 -- 选择排序算法的非递归和递归形式实现

算法计数排序 + 各个排序算法的稳定性