【问题标题】:Solving a recurrence: T(n)=3T(n/2)+n求解递归:T(n)=3T(n/2)+n
【发布时间】:2013-09-19 23:46:42
【问题描述】:

我需要找到 n 的递归解,如果 T(n)=3T(n/2)+n 为 n>1,则为 2 的幂,否则为 T(n)=1。

使用n=2^m,S(m)=T(2^(m-1)) 的替换我可以开始:

S(m)=2^m+3*2^(m-1)+3^2*2^(m-2)+⋯+3^(m-1) 2^1+3^m

但我不知道如何简单地做到这一点。

【问题讨论】:

    标签: algorithm time-complexity computer-science recurrence


    【解决方案1】:

    这样的问题可以使用Masters theorem来解决。

    在您的情况下,a = 3、b = 2 和 f(n) = n。

    所以c = log_b(a) = log_2(3),大于1,因此你属于第一种情况。所以你的复杂性是:

    O(n^{log_2(3)}) = O(n^{1.58})

    【讨论】:

      【解决方案2】:

      您可以使用 Masters theorem 解决此问题,也可以通过以下方式打开递归树:

      • 在递归树的根部,您将拥有 n 个工作。
      • 在第二阶段,树分为三部分,每部分的工作都是 n / 2。
      • 继续前进,直到到达树叶。整个工作叶将为:O (1) = O (n / 2 ^ k) 当:n = 2 ^ k。
      • 请注意,在每一步 m 有 3 ^ m 个拆分。
      • 现在我们将使用几何级数和对数规则将所有步骤组合在一起。最后,你会得到: T(n) = 3T(n/2)+n = 2n^(log3)-2n the calculation

      【讨论】:

      • 在最后一行计算中,您将(3/2)^logN 减少到N^log(3/2),IMO 这看起来不对。
      【解决方案3】:

      这些类型的递归最容易被 Master Theorem 解决,用于分析算法,解释如下:

      令a为大于等于1的整数,b为大于1的实数,c为正数实数。鉴于形式的重复 -

      T (n) = a * T(n/b) + nc 其中 n > 1,则对于 n 是 b 的幂em>,如果

      1. 对数ba c);
      2. Lo​​gba = c, T (n) = Θ(nc * Log n);
      3. Lo​​gba > c, T (n) = Θ(nlogba)。

      您的复发的英文翻译

      Master Theorem 中最关键要理解的就是递归中提到的常数a、b、c。让我们以您自己的重复 - T(n) = 3T(n/2) + n - 为例。

      这个递归其实是说它所代表的算法是这样的,

      (解决大小为 n 的问题的时间) = (解决 3 个大小为 n/2 的问题所花费的时间) + n

      最后的 n 是合并那些 3 n/2 个大小问题的结果的成本。


      现在,您可以直观地理解:

      • 如果“解决 3 个大小为 n/2 的问题”的成本比“n”的权重更大,那么第一项将确定整体复杂性;
      • 如果成本“n”比“解决 3 个大小为 n/2 的问题”具有更大的权重,则第二项将确定整体复杂性;并且,
      • 如果两个部分的权重相同,则解决子问题并合并它们的结果将具有整体复合权重。

      从以上三个直观的理解,只出现了主定理的三种情况。


      在您的示例中,a = 3,b = 2 和 c = 1。因此它属于 case-3,因为 Logba = Log23 这是大于 1(c 的值)。

      因此复杂性很简单 - Θ(nlogba) = Θ(nlog23 )。

      【讨论】:

        【解决方案4】:

        在此处查看第 60 页http://www.cs.columbia.edu/~cs4205/files/CM2.pdf。

        也许你应该在这里问https://math.stackexchange.com/

        【讨论】:

        • 感谢您的链接,但我仍然不知道如何继续。我不明白你怎么能简单地使用两个不同的基地。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-02
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 2013-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多