算法递推公式

时间:2010-10-23 13:41:17

标签: algorithm analysis

我正在阅读Robert Sedgewick的C ++算法。它被提到的基本复发部分这是一个递归程序,它循环输入以消除一个项目                               Cn = cn-1 + N,N> = 2,C1 = 1。

Cn约为Nsquare / 2。评估总和1 + 2 + ... + N是基本的。除了以下陈述之外。           “这个结果 - 所寻求的价值的两倍 - 由N个项组成,每个项总和为N + 1

我需要帮助理解abouve声明这里的N个术语以及每个术语的总和 N + 1,“所寻求的价值的两倍”意味着什么。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我认为他指的是计算这个总和的基本数学技巧。虽然,很难从你引用的这么短的段落中得出任何结论。

我们假设N = 100。例如,总和为1 + 2 + 3 + .. + 99 + 100 现在,让我们将元素对分组为1011 + 1002 + 993 + 98,...,50 + 51。这为我们50N/2)对提供了101N + 1}总和:因此总和为50*101

无论如何,你能为这句话提供更多的背景吗?

答案 1 :(得分:0)

递推公式表示:

C1 = 1
C2 = C1 + 2 = 1 + 2 = 3
C3 = C2 + 3 = 3 + 3 = 6
C4 = C3 + 4 = 6 + 4 = 10
C5 = C4 + 5 = 10 + 5 = 15
etc.

但你也可以直接写它:     C5 = 1 + 2 + 3 + 4 + 5 = 15

然后使用旧技巧:

  1 +   2 +   3 + ... + N
+ N + N-1 + N-2 + ... + 1
-------------------------
 (N+1) ...             (N+1)

=(N + 1)* N

从那里我们得到:1 + 2 + ... N = N *(N + 1)/ 2

对于轶事,上述公式是由伟大的数学家Carl Friedrich Gauss在学校时发现的。

从那里我们可以推断出一个递归算法是O(N平方),这可能就是Robert Sedgewick正在做的事情。