【问题标题】:Inductive Proof that a recurrence isn't O(n) by showing it is Omega(nlogn)通过证明递归不是 O(n) 的归纳证明是 Omega(nlogn)
【发布时间】:2015-08-20 21:10:56
【问题描述】:

注意:这与家庭作业有关。

我试图证明T(n/3) + T(2n/3) + n >= cn , for all c > 0

当我尝试这样做时,基本情况失败(T(1) = 1 >= cn, for all c > 0,不正确)。所以为了解决这个问题,我想表明问题的下限高于O(n)。这是否构成正确的证明?

【问题讨论】:

  • 问题中是否有要求n从1开始?由于 Big-O 表示法真正关心的是找到极限,因此它从哪里开始通常不是什么大问题。
  • 嗯,这与“中位数的中位数”问题有关。我想它并没有说它必须从一个开始,但对我来说,基本情况应该是一个大小为 1 的数组似乎是最合乎逻辑的。
  • 从一个大小为 1 的数组开始似乎是合乎逻辑的,但这并不意味着它需要进行 Big-O 分析。由于大小为 1 的数组是一个非常无趣的案例,因此跳过它以揭示其余案例的模式非常有用(而且准确)。

标签: math big-o time-complexity proof induction


【解决方案1】:

作为提示,请尝试添加更多术语。假设你的函数满足

T(n) ≥ k1n log n + k2n + k3

现在,当您插入 n = 1 时,可以通过适当设置 k2 和 k3 使右侧非零。这种技术在对上限和下限函数使用归纳法时很常见并且很有效,因为这些低阶项与大 O 表示法无关,并且可以优雅地处理较小的情况。

【讨论】:

  • 所以,如果这样做,我想我可以按照“T(1) = k >= cn, for all k >= c > 0”这样说,然后显示“T(n /3) + T(2n/3) + kn >= cn" 正如我最初尝试的那样。我仍然想知道:显示一个函数具有 Omega(nlogn) 的下限是否证明它不是 O(n)?
  • 不,你不会那样做。相反,您将归纳证明 T(1) >= k2 + k3 对于 k2 和 k3 的某些选择,然后证明 T(n/3) + T(2n/3) + n >= k1 n log n + k2 n + k3 在 T(n/3) = k1 (n/3) log(n/3) + k2 (n/3) + k3 和 T(2n/3) = k1 (2n/3) 的归纳假设下) 对数 (2n/3) + k2 (2n/3) + k3。当你这样做时,你会发现有一些常数 k1、k2 和 k3 使这个工作有效,但你必须小心。另外,是的,您最初证明该函数是 Omega(n log n) 的想法确实证明了它不是 O(n);区别在于包括低阶项。