在解决重复问题时,地板和天花板何时重要?
Posted
技术标签:
【中文标题】在解决重复问题时,地板和天花板何时重要?【英文标题】:When do floors and ceilings matter while solving recurrences? 【发布时间】:2012-04-21 06:01:35 【问题描述】:我在解决重复问题时遇到了忽略地板和天花板的地方。
示例来自CLRS(第 4 章,第 83 页),其中忽略了楼层:
Here(pg.2,练习 4.1–1)是忽略上限的示例: (编辑:我从公众舆论中得知这有点可疑。)
实际上在CLRS (pg.88) 中提到:
“解决重复问题时,地板和天花板通常无关紧要”
我的问题:
-
这里的“通常”是指所有情况吗?如果是的话,我可以一直忘记它们。
如果不是,那么在解决重复问题时,地板和天花板何时真正计算在内?
注意:这不是作业问题。我在刷新我的 DS 和算法概念时想到了它。
【问题讨论】:
在你的例子中,它没有被忽视。 @Oli Charlesworth:是的..这就是我迄今为止所看到的,它被忽视了。甚至 CLRS 也提到“它通常被忽视”。我想知道地板和天花板什么时候真的很麻烦?还是我可以一直忽视他们? ……另外,这是一道数学题,不是编程题。乍一看,地板/天花板被不平等消除的原因是正在检查渐近行为;复发根本没有解决。 @Potatoswatter :我已经看到关于重复、大哦等的问题。算法的东西被张贴在 SO 上,这些东西与编程没有直接关系。如果这里不适合发布我的问题,您能推荐一个好地方吗? @TejasP math.stackexchange.com 【参考方案1】:对于所有 x,地板和天花板函数满足以下不等式:
x−1 x⌋ ≤ x
x ≤ ⌈x⌉ x+1
因此,在第一个示例中,我们有 ⌊n / 2⌋ ≤ n / 2。此外,由于对数是单调递增函数,我们知道lg ⌊n / 2⌋ ≤ lg(n / 2)。把这些放在一起,我们得到第一个不等式 2(c ⌊n / 2⌋ lg ⌊n / 2⌋) + n ≤ cn lg(n / 2) + n.
第二个例子实际上包含一个错误:c lg ⌈n / 2⌉ + 1 is never less than but can be equal to c lg(n / 2) + 1. 然而,c lg ⌈n / 2 是 ⌉ + 1 ≤ c lg(n / 2 + 1) + 1,然后我们可以从上面通过 c lg (n / 2) + 2(假设 n ≥ 2),从而得出期望的结论 T(n i>) ∈ O(lg n).
事实上,第二个示例也包含其他错误:即使使用以下段落中所述的假设(您没有引用),最后一个 = 符号应该是 ≤。
(Ps。唷,没有 LaTeX 打字真的很痛苦。这就是为什么最好在 math.SE 上提出这些问题。)
【讨论】:
@ilmariKaronen:谢谢解释。那么我可以说在使用替代方法时永远不能忽略天花板吗? @TejasP:对于楼层,对于任何单调递增函数 f,f(⌊x⌋) ≤ f(x)。这不适用于天花板,但我们总是可以使用 f(⌈x⌉) ≤ f(x+1) 来代替。 @lava_07: f(x) = 42 是一个单调递增函数(虽然不是严格递增)。如果 f 严格递增,则 f(⌈x⌉) @lava_07:是的,对数函数是严格递增的,至少在数学上是这样定义的。在我的脑海中,我不能 100% 确定即使在考虑了浮点不准确性之后,它是否仍然可以保证,但我怀疑它不是。 (再说一次,对于浮点,你甚至不能保证 x+1 ≥ x。) @lava_07:嗯,x 【参考方案2】:您的两个示例都可以通过主定理进行分析。 Akra–Bazzi theorem 概括了主定理,并给出了何时可以忽略小扰动的充分条件(扰动 h(x) 为 O(x/log2 x))。对于 Akra–Bazzi 可分析的整数索引递归,您可以总是忽略地板和天花板,因为它们的扰动最多为 1。
Akra–Bazzi 未涵盖的每个重复在算法和数据结构的上下文中都是非常奇特的。
【讨论】:
thnkx 指向 Akra–Bazzi 定理。我以前不知道......我可以对替代方法说同样的话吗(即地板和天花板总是被忽略)? 如果您对 T 的猜测单调增加并且您对上限感到满意,那么您始终可以忽略下限。要正式处理上限,通常必须将 T(ceil(...)) 分析为 T(...) + ... 其中第二个 ... 是低阶项。例如,如果您的猜测是 T(n) = n^2,那么 T(ceil(n/2)) ≤ T(n/2 + 1) = T(n/2) + n + 1。 ,一个人可以完成整个算法博士学位,而无需使用替换方法解决单个递归。以上是关于在解决重复问题时,地板和天花板何时重要?的主要内容,如果未能解决你的问题,请参考以下文章