【问题标题】:Solve T(n)=T(n-1)+2n by backwards iteration method用反向迭代法求解T(n)=T(n-1)+2n
【发布时间】:2016-06-14 19:01:28
【问题描述】:

谁能帮我解决这个问题。 T(1)=5,T(n)=T(n-1)+2n 步骤说明会很好。

【问题讨论】:

  • 你想要一片吐司来回答你的作业吗?
  • 我想自己做,但是我的好老师没有解释任何事情。
  • @Headzik077:什么编程语言?
  • 我们在我需要做的类中使用伪代码:通过使用向后迭代指定复杂性类:T(1)=5, T(n)=T(n-1)+2n方法
  • 自己做:从已知的T(1)开始,使用递推公式推导出T(2)。那么T(3),T(4)...一定要避免执行加法,以免出现模式。

标签: algorithm iteration recurrence


【解决方案1】:

迭代方法

您可以通过简单的迭代 (Java) 来解决这个问题:

public static int T (int n) {
    if(n <= 0) {
        throw new IllegalArgumentException("n must be larger or equal to one.");
    }
    int result = 5;
    for(int i = 2; i <= n; i++) {
        result = result + 2*i;
    }
    return result;
}

jDoodle

程序工作如下:首先我们执行边界检查:如果 n 小于或等于 0,则结​​果未定义。接下来我们将5 分配给result。现在在我们进入for循环之前,result等于T(n),接下来对于for循环中的每次迭代,我们计算T(i) em> 基于T(i-1)(在那个时间点等于result)。由于for 循环迭代直到(包括)n,所以在迭代结束时result 等于T(n)

恒定时间方法

基于迭代案例,我们可以简化这个逻辑using WolframAlpha

因此我们可以简化我们的程序,使其在恒定时间内运行:

public static int T (int n) {
    if(n <= 0) {
        throw new IllegalArgumentException("n must be larger or equal to one.");
    }
    return n*n+n+3;
}

【讨论】:

    【解决方案2】:

    要计算 T 的每个下一个值,您必须知道前一个值。这就是“迭代”的意思。您必须经过一个循环,在每个步骤中您计算 T(n),从 T(2)、T(3) 等开始,直到到达某个目标元素。变量 T 应该是一个数组。

    【讨论】:

    • 这个怎么样?这有可能这样做吗? T(n) = T(n-1) + 2n T(n-1) =T(n-2) + 2n-1 T(n-2) = T(n-3) + 2n-2
    • T(1)=5, T(2)=T(1)+2, T(3)=T(2)+4, T(4)=T(3)+6 , ... 直到你达到某个被宣布为最后一个的数字 n
    • 如果我想获得复杂的类别(如果我能用我的语言翻译成这样的话)。我该怎么做?
    • 复杂度是O(n),线性时间,但是这个问题需要用到递归吗?因为对我来说,递归不是迭代
    • 任务是:使用向后迭代的方法指定复杂度为:T(1)=5, T(n)=T(n-1)+2n
    猜你喜欢
    • 2012-11-20
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2017-10-03
    • 2011-02-14
    • 2019-04-15
    • 2017-12-22
    相关资源
    最近更新 更多