【问题标题】:How do I prove or disprove that this function is Ω(n^1.5)?我如何证明或反驳这个函数是 Ω(n^1.5)?
【发布时间】:2017-08-06 18:27:22
【问题描述】:

所以我有这个递归函数: T(n) = T(log(n)) + T(n-log(n)) + n

我已经尝试了很多次解决它,但我就是没有成功。 (寻找 Theta) 基本上,我证明或反驳它是否是 n^1,5 (Ω(n^1.5)) 的 Omega 就足够了

我们将不胜感激,在此先感谢!

tl;博士:

给定 T(n) = T(log(n)) + T(n-log(n)) + n

证明或反驳:T(n) = Ω(n^1.5)

【问题讨论】:

  • 它很可能被否决,因为您没有为解决问题付出任何努力。
  • 我已经用谷歌搜索和堆栈溢出了 2 天的问题。根本没有与此类似的东西。有很多使用常量的例子,例如:T(n) = T(n/4) + T(3n/4) + n。但是没有一个在调用本身中使用 FUNCTIONS 。更难分析最终与 (log(n-log(n-log(n-log))) (等等)有关的函数
  • 看起来更适合 cs.SE。
  • @JeroenMostert 那是什么?
  • SE 是 Stack Exchange,所以 cs.SE 是 cs.stackexchange.com,我们的姐妹社区之一。

标签: data-structures time-complexity big-o


【解决方案1】:

假设T(n)n 的某个值处不会突然变为负数,如果我们忽略第一项,我们可以给出左侧的下限:

我们定义了一个新函数S(n),这样:

我们可以立即看到它有 术语(忽略一个等)。因此,如果我们继续扩展:

在这个阶段,由于我们知道log(n) << n 对应于任何大的n,我们可以对S(n) 的递归调用中的第三项应用泰勒展开:

我们实际上也可以忽略第二项。将此近似值应用于每个S(n) 调用:

现在,我们知道了:

b显然可以是1.5;因此:


编辑:一些数值测试来确认这个结果 -

代码:

uint64_t T(int n) {
  return n <= 1 ? 0 : T(n - log(n)) + T(log(n)) + (uint64_t)n;
}

结果:

N           T(N)
--------------------------
2           2
4           6
8           18
16          60
32          181
64          578
128         1911
256         6331
512         22011
1024        79304
2048        279719
4096        1016217
8192        3814210
16384       13902832
32768       51540129
65536       195366441
131072      732435510
262144      2744988819
524288      10457580914
1048576     39910628826

N^2/log(N)T(N) 的图:

关系是线性的,这意味着

...确认给定的结果。

【讨论】:

  • 非常小的格式说明:\text{LHS}(或\mathit,如果你想要斜体)可以防止间距问题,因为在数学模式中普通的LHS 被格式化为一个乘法表达式(给出奇怪的-寻找LHS 之间的间距)。否则,通过内联图片在 StackOverflow 上进行数学计算,这很不方便。 (这对于 cs.SE 来说是一个更好的问题的另一个原因。)
  • @JeroenMostert 啊谢谢你的提示;这个问题真的触发了我的强迫症。
  • @JeroenMostert 非常感谢您的帮助!
  • @Elie:我想你应该感谢 meowgoesthedog,我几乎什么都没做。
  • 你是对的,我错误地输入了你的名字。谢谢@meowgoesthedog
猜你喜欢
  • 1970-01-01
  • 2013-09-14
  • 2018-01-20
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2020-08-05
相关资源
最近更新 更多