【问题标题】:Why can we assume that for T(n) = 2T(n/2) + theta(1), n is a power of 2?为什么我们可以假设对于 T(n) = 2T(n/2) + theta(1),n 是 2 的幂?
【发布时间】:2015-06-23 06:10:46
【问题描述】:

最近我对算法很感兴趣,并且一直在观看麻省理工学院发布的视频系列。不过,我遇到了一些关于复发的问题。

https://www.youtube.com/watch?v=-EQTVuAhSFY

附加链接是视频的来源。 07:10,教授提到由于某个定理,可以使用T(n/2) in T(n) = 2T(n/2) + theta(1),尽管使用T(n/2的下限)或T(the ceiling of n/2)会更准确。

这个定理到底是什么?实际上我有点困惑,因为n/2 可能不会为某些 n 生成基本情况输入。

例如一些不是 2 的幂 的初始输入。

【问题讨论】:

  • 建议将您的标题更改为更具体的内容,例如“为什么我们可以假设对于 T(n) = 2T(n/2) + theta(1),n 是 2 的幂?”
  • 重要的见解是 2^ceil(log_2(n)) = O(n)。等式的左侧最多为 2n,因此您始终可以将输入填充为 2^k 大小

标签: algorithm recurrence


【解决方案1】:

很好的问题。我相信你在那节课中了解了 Big-O,所以我不会详细说明。 (我的解释将使用 O(N) ,为了便于解释,可以假设与 theta(N) 相同,但它们是不同的!)

Big-O(和 theta)的重要部分是意义。例如,O(N) 总是比 O(1) 更重要,即使它是 99999*O(1) 与 O(N)。

所以,你的教授想说的是,当你做 n/2 时,你不必把它放在地板上或天花板上,因为你去掉的额外部分并不显着。您正在处理的是 Big-O 场景中的运行时,它不关心细节。我们假设 N 是HUGE,而你花在尝试降低或限制 N 上的一点点额外时间是无法比拟的。

基本上对于 Big-O,您需要全面概括,这意味着您可以假设 n 是 2 的幂!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-09
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2011-11-27
    • 2012-08-20
    相关资源
    最近更新 更多