确定性选择算法的递归关系
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 中的一个 - 而不是两者 - 将它们的大小加在一起是没有意义的。
【讨论】:
以上是关于确定性选择算法的递归关系的主要内容,如果未能解决你的问题,请参考以下文章