我正在阅读Robert Sedgewick的C ++算法。它被提到的基本复发部分这是一个递归程序,它循环输入以消除一个项目 Cn = cn-1 + N,N> = 2,C1 = 1。
Cn约为Nsquare / 2。评估总和1 + 2 + ... + N是基本的。除了以下陈述之外。 “这个结果 - 所寻求的价值的两倍 - 由N个项组成,每个项总和为N + 1
我需要帮助理解abouve声明这里的N个术语以及每个术语的总和 N + 1,“所寻求的价值的两倍”意味着什么。
感谢您的帮助
答案 0 :(得分:1)
我认为他指的是计算这个总和的基本数学技巧。虽然,很难从你引用的这么短的段落中得出任何结论。
我们假设N = 100
。例如,总和为1 + 2 + 3 + .. + 99 + 100
现在,让我们将元素对分组为101
:1 + 100
,2 + 99
,3 + 98
,...,50 + 51
。这为我们50
(N/2
)对提供了101
(N + 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正在做的事情。