递归算法的递推关系

时间:2015-09-03 11:07:05

标签: recursion time-complexity pseudocode recurrence

我已经给出了一个伪代码算法,我应该找到一个递归关系,并解决这个关系来分析它的复杂性。

算法:

<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.css" rel="stylesheet" />
<h1 class="text-center">Button Test Bed</h1>
<div class="container-fluid">
  <button type="button" class="btn btn-default go" id='_edit'><i class="fa fa-pencil-square-o"> Edit</i> 
  </button>
</div>

考虑到这个代码的基本操作应该是两个比较if(p == r)和if(temp1&lt; = temp2),我想出的重现是[T(n)= 2T(n / 2)+ 2c],c是进行一次比较所花费的时间。

以下是我采取的步骤:

Find(A[p..r])
{
  if(p == r)
    return A[p];

  else
  {
    temp1 = Find(A[p..((p + r)/2)]);
    temp2 = Find(A[(((p + r)/2) + 1)..r]);

    if(temp1 <= temp2)
      return temp1;
    else
      return temp2;
  }
}

此时,我注意到我可以使用几何公式a(1 - r ^ i)/(1 - r)简化常数c的求和,从而得出以下结果:

1: T(n) = 2T(n/2) + 2c

2: T(n/2) = 2(2T(n/2^2) + 2c) + 2c
          = 2^2T(n/2^2) + 2^2c + 2c

3: T(n/4) = 2(2^2T(n/2^3) + 2c) + 2c
          = 2^3*T(n/2^3) + 2^3c + 2^2c + 2c

由于T(1)= c,因为那时我们只进行一次比较,n = 2 ^ i,lg n = i,

我解决了与以下内容的关系:

Relation = 2^i*T(n/2^i) - c(1 - 2^i)

在这种情况下,T(n)= O(n)。

我想知道是否有人会介意看我的工作,看看我是否因为工作而错过了什么?非常感谢你的帮助,伙计们!

P.S:为了证实我的怀疑,所有这个算法都是为了寻找存储在数组中的最小值,对吗?

P.P.S:如果有人想知道,在这种情况下,ln的基数将是2。

0 个答案:

没有答案