【问题标题】:Solve the recurrence equation T(n) = T(n/3) + O(1) using iteration or substitution使用迭代或替换求解递归方程 T(n) = T(n/3) + O(1)
【发布时间】:2020-03-05 21:26:57
【问题描述】:

我意识到用大师定理解决这个问题给出了 Big Theta(log n) 的答案。但是,我想了解更多并找到对数的底。我尝试阅读更多关于大师定理的信息以了解基础,但在维基百科 (https://en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms)) 上找不到更多信息。

如何使用递归树或替换方法来解决这个问题? 您可以假设 n = 2^K 和 T(0) = 0。

【问题讨论】:

    标签: algorithm recursion time-complexity recurrence


    【解决方案1】:

    不要设置n=2^k,而是设置n=3^k

    因此T(3^k) = T(3^{k-1}) + c

    recurrence 变成w_k = w_{k-1} + c

    假设T(1) = 1 总称:w_k = ck+1w_0 = 1

    你总结T(n) = clog_3(n) + 1

    因此T(n) = O(log_3(n))

    【讨论】:

      【解决方案2】:
      T(n) = T(n/3) + O(1) = T(n/9) + O(1) + O(1) = T(n/27) + O(1) + O(1) + O(1) = …
      

      log3(n) 步骤之后,术语T 消失,T(n) = O(log(n))

      【讨论】:

      • 我理解终止递归树需要 log3(n) 个步骤。这里的对数底是不是代表T(n) = O(log(n))中对数的底?
      • log_3(n) 的基数是3log(n) 的基数是e。您可以使用log_3(n) = log(n)/log(3) 更改基础。现在O(log_3(n)) = O(log(n)/log(3)) = O(log(n))
      • Big-O 不关心乘法常数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 2017-12-22
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      相关资源
      最近更新 更多