算法的设计与分析:递归关系

时间:2014-02-26 15:14:30

标签: algorithm analysis recurrence

我对解决这种递归关系非常怀疑。任何人都可以为我提供解决方案吗?

关系:

T(n)= Sumation i = 1到N T(i)+1 ......,

enter image description here

bigOh订单是什么?

2 个答案:

答案 0 :(得分:2)

获取第一顺序差异可以让你摆脱总和。

T(n) - T(n-1) = (Sum(1<=i<n: T(i)) + 1) - (Sum(1<=i<n-1: T(i)) + 1) = T(n-1)

因此

T(n) = 2.T(n-1)

答案 1 :(得分:0)

递归关系描述了一个数字序列。明确指定了早期术语,后来的术语则表示为其前身的功能。作为一个简单的例子,此重复描述了序列1、2、3等:

    void Sample(int n)
    {
        if (n > 0) {
            Sample(n-1);
            System.out.println('here');
        } else {
            return 1;
        }
    }

    Sample(3);

在这里,第一个术语定义为1,而每个后续术语都比其前任多一个。为了分析递归关系,我们需要知道每行代码的执行时间,在上面的示例中:

    void Sample(int n)
    {
               if (n > 0) {
     // T(n-1)      Sample(n-1);
     // 1           System.out.println('here');
               } else {
                   return 1;
               }
    } 

我们将T(n)定义为:

alt text

对于求解T(n)= T(n-1)+1,如果我们知道T(n-1)是什么,那么我们可以用它代替并得到答案,然后用n代替它,我们将得到:

T(n-1)= T(n-1-1)+1 => T(n-2)+1
//in continue
T(n)=[T(n-2)+1]+1 => T(n-2)+2
//and again
T(n)=[T(n-3)+2]+1 => T(n-3)+3
.
.
.
// if repeat it k times, while it ends
T(n)= T(n-k)+k

您看到它在每一步中都增加了1,如果我们进行k次,则T(n)= T(n-k)+k。现在,我们需要知道最小值(函数停止时,始终必须是停止点)。在此问题中,零是递归堆栈的结尾。正弦,我们假设我们走k次达到零,解决方案将是:

// if n-k is final step
n-k = 0 => n = k
// replace k with n
T(n)= T(n-n)+n => T(n)= T(0)+n;
// we know
T(0) = 1;
T(n) = 1+n => O(n)

大的On,这意味着这种递归算法在最坏的情况下运行了n次。