我从冒泡排序算法中的数据结构书中得到了这个公式。
我知道我们是(n-1)*(n次),但为什么除以2?
任何人都可以向我解释一下或提供详细的证明。
谢谢
答案 0 :(得分:19)
从三角形开始...
*
**
***
****
到目前为止代表1 + 2 + 3 + 4。沿着一个维度将三角形切成两半......
*
**
* **
** **
将较小的部分旋转180度,并将其粘贴在较大部分的顶部......
**
*
*
**
**
**
关闭间隙以获得矩形。
乍一看,这只有在矩形底部长度均匀的情况下才有效 - 但如果它有一个奇数长度,你只需将中间一列切成两半 - 它仍可以半个单位宽度两次 - 如-tall(仍为整数区域)条带在矩形的一侧。
无论三角形的底边是什么,矩形的宽度为(base / 2)
,高度为(base + 1)
,为((base + 1) * base) / 2
。
但是,我的base
是您的n-1
,因为冒泡排序一次比较一对项目,因此仅针对第一个循环迭代(n-1)个位置。
答案 1 :(得分:14)
(N-1) + (N-2) +...+ 2 + 1
是N-1项的总和。现在重新排序项目,以便在第一个到达最后一个,然后是第二个,然后是第二个到最后一个,即(N-1) + 1 + (N-2) + 2 +..
。现在订购商品的方式你可以看到这些商品中的每一对都等于N(N-1 + 1是N,N-2 + 2是N)。由于存在N-1个项目,因此存在(N-1)/ 2个这样的对。所以你要加N(N-1)/ 2次,所以总值为N*(N-1)/2
。
答案 2 :(得分:8)
尝试从集合中生成数字对。第一个+最后一个;第二个+前一个。这意味着n-1 + 1; n-2 + 2.结果总是n。由于您要将两个数字相加,因此只有(n-1)/ 2对可以由(n-1)个数组成。
所以它就像(N-1)/ 2 * N.
答案 3 :(得分:7)
请参阅triangle numbers。
答案 4 :(得分:4)
我知道我们是(n-1)*(n次),但为什么除以2?
如果你使用天真的气泡,它只有(n - 1) * n
。如果您发现以下情况,可以节省大笔费用:
每次比较和交换后,您遇到的最大元素将位于您所在的最后一个位置。
第一次传球后,最大的元素将位于最后位置;在k th 通过之后,k th 最大元素将位于k th 最后位置。
因此,您不必每次都对整个事物进行排序:您只需要第二次排序n - 2个元素,第三次排序n - 3个元素,依此类推。这意味着您必须执行的比较/交换总数为(n - 1) + (n - 2) + ...
。这是一个 arithmetic series ,总次数的等式是(n - 1)* n / 2.
示例:如果列表的大小为N = 5,则执行4 + 3 + 2 + 1 = 10次交换 - 并注意10与4 * 5相同2。
答案 5 :(得分:2)
这是一个很常见的证据。证明这一点的一种方法是使用数学归纳法。这是一个链接:http://zimmer.csufresno.edu/~larryc/proofs/proofs.mathinduction.html
答案 6 :(得分:1)
算术进展的总和
(A1 + AN)/ 2 * N =(1 +(N-1))/ 2 *(N-1)= N *(N-1)/ 2
答案 7 :(得分:1)
假设n = 2。然后我们左侧2-1 = 1,右侧2 * 1/2 = 1。
表示f(n)=(n-1)+(n-2)+(n-3)+ ... + 1
现在假设我们已经测试了n = k。然后我们必须测试n = k + 1。
在左侧我们有k +(k-1)+(k-2)+ ... + 1,所以它是f(k)+ k
在右侧,我们有(k + 1)* k / 2 =(k ^ 2 + k)/ 2 =(k ^ 2 + 2k - k)/ 2 = k +(k-1) k / 2 = k f(k)
所以这必须适用于每一个k,这就证明了这一点。
答案 8 :(得分:1)
这是一个归纳证明,考虑N
条款,但N - 1
也是如此:
对于N = 0
,公式显然是正确的。
假设某些自然1 + 2 + 3 + ... + N = N(N + 1) / 2
N
为真。
通过使用我们之前的假设,我们将证明1 + 2 + 3 + ... + N + (N + 1) = (N + 1)(N + 2) / 2
也是正确的:
1 + 2 + 3 + ... + N + (N + 1) = (N(N + 1) / 2) + (N + 1)
= (N + 1)((N / 2) + 1)
= (N + 1)(N + 2) / 2
。
因此公式适用于所有N
。