我正在学习考试而且我不知道如何获得这种关系产生的递归树的高度:
T(n)= 3T(n / 2)+ n
我知道树看起来像这样,我必须添加所有条款:
c*n
/ | \
/ | \
c*n/2 c*n/2 c*n/2
. . .
. . .
谢谢!
答案 0 :(得分:1)
如果您有表单的重复关系
T(n)= aT(n / b)+ f(n)
然后递归树的高度仅取决于b的选择(当然,假设a> 0)。这样做的原因是树中的每个节点都表示当您展开上述重复时发生的情况,并且上述重复中您可以展开某些内容的唯一位置是T(n / b)项。如果增加或减少a,您将增加或减少树的分支因子(例如,2T(n / b)表示展开节点时将生成两个节点,3T(n / b)表示扩展节点时会生成三个节点,但树的分支因子与级别数无关。它只是告诉你将有多少级别。同样,改变f(n)只会增加或减少每个节点完成的工作总量,这不会影响递归树的形状。
那么b如何具体影响树的高度?那么,在这种递归关系中,每次我们扩展T时,我们最终将输入的大小除以b因子。这意味着在树的顶层,我们将遇到大小为n的问题。下面是尺寸为n / b的问题。下面是尺寸问题(n / b)/ b = n / b 2 。通常,在树的k级,问题大小将是n / b k 。当问题大小下降到0或1时,递归停止,这发生在k = log b n时。换句话说,递归树的高度将为O(log b n)。
现在,只知道树高不会告诉你完成的工作总量,因为我们还需要知道分支因子和每个级别完成的工作。这些可以通过很多不同的方式相互作用,但幸运的是有一个很好的定理叫master theorem,它可以让你通过查看a,b和f(n)来非常优雅地读出解决方案。在您的情况下,重复是
T(n)= 3T(n / 2)+ O(n)
将其插入主定理,我们看到复发的解是T(n)= O(n log 2 3 )。这大约是O(n 1.58 )。