从段落中导出重复关系

时间:2017-09-13 05:03:45

标签: algorithm runtime recurrence

我最近重新开始学习离散数学。我在大学注册了一门课程,并且无法再次掌握一些问题,特别是在从单词问题中获得复发关系时。我很想知道如何这样做的一些提示。

例如(我已经改变了家庭作业问题中的数字,所以如果这不能解决,请告诉我):如果Jean划分大小的输入 n 分为三个大小为n / 5的子集,并将它们组合在 theta(n)时间,运行时是什么时候?我得到3T(n / 5)+ theta(n)作为递归关系,我不知道运行时是什么,我觉得这些都是不正确的。

我发现这个网站(https://users.cs.duke.edu/~ola/ap/recurrence.html)有助于将重复关系分解为一个可靠的运行时,但我仍然没有得到如何从第一个单词问题中获得递归关系地点。谢谢!

1 个答案:

答案 0 :(得分:0)

将问题视为每个级别上具有节点的树结构。每个节点将包含您在特定时间处理的问题大小的数字,并且在每个级别您将拥有一些节点。这个数字可以是1,2,.......每个级别最多n个节点。

现在从顶级开始。您将拥有1个节点,其中的值将为' n'(因为在起点,我们将有' n'要处理的元素。)

现在降到第二级。在上面的问题中说,在任何时间点将问题(元素)分成三个部分,因此第2级上的节点数将为3.每个节点中的值将为' n / 5'(因为问题说每个子集的大小是父节点上存在的元素数除以5)。树将看起来像: -

         (n)
     |     |     |
    (n/5)(n/5) (n/5)

现在进一步降到第3级,树看起来像

                             (n)                                 level(1)
           |                  |                 |
        (n/5)               (n/5)             (n/5)              level(2)
      |   |   |          |    |    |      |     |     |
  (n/25)(n/25)(n/25) (n/25)(n/25)(n/25) (n/25)(n/25)(n/25)       level(3)

你将一直持续到最后一个级别,它只包含1个元素,节点总数将是' n'。

因此,如果您需要编写递归,请参阅级别1和级别2。

Time taken to solve problem with 'n1' element is written as T(n1).
Time taken to solve problem with 'n2' element is written as T(n2).

Now number of elements in level 1 is n1=n

(Time taken to solve problem on first level)=(Time taken to solve 1st 
node of level 2)+(Time taken to solve 2nd node of level 2)+(Time taken 
to solve last node of level 2) + (It also takes time to combine these 
three nodes given in question i.e.  theta(number of total elements(n))

T(n)=T(n/5)+T(n/5)+T(n/5)+theta(n)
=>T(n)=3T(n/5)+theta(n)