【问题标题】:Recurrence equation - Recursion inside for loop递归方程 - for 循环内的递归
【发布时间】:2023-04-13 21:24:01
【问题描述】:

我试图解决关于递归方程和计算复杂性的大学问题,但我不明白如何设置递归方程。

static void comb(int[] a, int i, int max) {
    if(i < 0) {
        for(int h = 0; h < a.length; h++)
            System.out.print((char)(’a’+a[h]));
        System.out.print("\n");
        return;
    }
    for(int v = max; v >= i; v--) {
        a[i] = v;
        comb(a, i-1, v-1);
    }
}

static void comb(int[] a, int n) { // a.length <= n
    comb(a, a.length-1, n - 1);
    return;
}

我尝试设置以下等式

                O(n) + c                     if i < 0 
T (n, i, j) = { 
               (j-i) T(n, i-1, j-1)         otherwise

解决

T(n, i, j) = (j-i) T(n, i-1, j-1) = 
(j-i) (j-1-i+1) T(n, i-2, j-2) = 
(j-i)^k T(n, i-k, j-k)

此时我被卡住了,我不知道如何继续。

感谢和抱歉我的英语不好。

路易吉

【问题讨论】:

  • 抱歉,问题的哪一部分需要改进?
  • 要越过你卡住的地方是终止条件 i

标签: algorithm recursion recurrence


【解决方案1】:

用你的推导

T(n, i, j) = ... = (j-i)^k T(n, i-k, j-k)

你快完成了!只需设置k = i+1 即可:

T(n, i, j) = (j-i)^(i+1) T(n,-1,j-i-1) = (j-i)^(i+1) O(n) =
O(n (j-i)^(i+1))

【讨论】: