【问题标题】:3 Recursions to Recurrence T(n) and Master Theorem3 递归 T(n) 和主定理的递归
【发布时间】:2021-12-21 13:36:34
【问题描述】:

假设我有以下代码,我的任务是找到重复T(n) 及其最差运行时间。如果 n 是列表的长度,则该值。

在这种情况下,我们有 3 个递归,mystery(mylist[:len(mylist)-t-1])mystery(mylist[t:len(mylist)- 1])mystery(mylist[:len(mylist)-t-1])

def mystery(mylist):
   if len(L) <= 1:
       return
   if len(mylist) >= 3:
       t = len(mylist) // 3
       mystery(mylist[:len(mylist)-t-1])
       mystery(mylist[t:len(mylist)- 1])
       mystery(mylist[:len(mylist)-t-1])

对于递归的情况,我的观察是因为递归是在一起的,所以递归是:

T(n) = T(floor(2n/3)) + T(floor(n/3)) + T(floor(2n/3)) = 2T(floor(2n/3)) + T(floor(n/3))

现在是困难的部分,要弄清楚 f(n),所以我扩展了递归 T(n),我得到了越来越多的 T(n)s。我怎样才能算出 f(n)

对于基本情况,T(0)T(1) 为 1,因为第一个 if 语句和 T(2) = 0,因为 n=2 没有 if 语句。

我的评估是否正确?

谢谢!

【问题讨论】:

  • 最好在您遇到无法解决的特定编程问题、寻求指导的一般性问题不符合 SO 的目标时使用此站点。
  • 对我来说似乎是主题。他们正在尝试推导算法的递归关系,并且已经展示了一种尝试。
  • 大家好,这是一个特定的编程问题。我已经尝试解决这个问题并询问我的理解是否有错误。谢谢!
  • 我只是将 itprorh66 报告给 Stackoverflow,因为他一直说它不适合我之前 3 个问题中的特定编程问题,尽管 3 个问题中的每一个都是一个特定问题,我没有我的思维过程,只需要专家检查思维过程是否正确。

标签: python recursion logic recurrence master-theorem


【解决方案1】:

您对基本情况的看法是正确的。您甚至可以将 T(2) 分组。它仍然是 O(1),因为您至少要评估两个条件语句,实际上没有任何 O(0) 函数调用。

您的递归中的 f(n) 项只是您在递归情况下在生成递归调用之外所做的所有工作的表达。在这里,您有 O(1) t = len(mylist) // 3 语句和评估两个条件语句的 O(1) 成本:总共 O(1) 工作。但是,将列表分成三部分以传递给递归调用也有 O(n) 成本。这给出了 f(n) = O(n) + O(1) = O(n)。由此,我们可以将整体递归表示为:

T(n) = 2T(2n/3) + T(n/3) + O(n) if n >=3
T(n) = 1                        otherwise

但是,主定理不适用于这种情况,因为您有递归调用可以处理不同的子问题大小:您不能隔离单个 ab 值来应用主定理。对于这样的重复,您可以应用称为Akra-Bazzi Method 的主定理的推广,参数为:

  • a1=2,a2=1
  • b1=2/3,b2=1/3
  • g(n) = n
  • h1(n) = h2(n) = 0

按照该方法,对p求解2(2/3)^p + (1/3)^p = 1,然后求积分:

用 g(u) = u (as g(n) = n) 来确定复杂度等级。

如果您不需要精确的复杂度类,而只想用主定理推导出更简单的上界,您可以使用 3T(2n /3) >= 2T(2n/3) + T(n/3):

T(n) <= 3T(2n/3) + O(n) if n >=3
T(n)  = 1               otherwise

然后,您可以使用主定理求解时间复杂度的上限,其中 a=3、b=3/2 和 f(n)= n^c = n^1 以导出 Big- O(而不是 Big-Theta)复杂度类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2013-06-19
    • 2012-06-08
    相关资源
    最近更新 更多