为什么是 n(n+1)/2 ?
n(n+1)/2是一个数列的元素两两运算后的不重复结果数。如图:

假如数列a = 1,2,3....n。那么该数列内的元素两两相乘,则会构建出上图中的表格,这个表格应该有n x n 个元素。
用程序写出来大概就是这样:
for (int i=; i<n; i++){
for (int j=; j<n; j++){
table[i][j] = a[i]*a[j];
}
}
这段程序准确的描述了我们手工填表的过程,填满整个表一共执行了n*n次操作,产生了一个n*n的结果集,当然也包含大量重复元素。
那么到底有多少重复元素呢? 其实可以通过跟踪整个运算流程来观察出其中的规律。
1.当i=1时, a1 * a1, a1*a2.....a1*an 一切正常。
2.当i=2时, a2 * a1, a2*a2.....a2*an 看到第一项了么,在第一步时已经计算过一次了。
3.当i=3时,a3 * a1, a3*a2, a3* a3....a3*an 第一项在i=1时计算过,第二项在i=2时计算过。
依次类推,可以发现,当i=n的时候,除了an * an 需要计算以外,其他项全都已经计算过了。
现在让我们来一次时光倒流:从i=n的时候开始,他只有最后一次计算是不重复的(an*an),其余n-1次运算都是"徒劳",所以它产生了n-1个重复元素。
然后是i=n-1的时候,他只有最后两次运算是不重复的(an-1 * an-1, an-1 * an),余下的n-2个计算结果都是重复的。
一直进行到当i=2的时候,也就是上面描述的第二步,当第一个重复数出现的时候。
然后就可以把他们都加起来,他们的和就是所有重复数了:r = 1+2+...+n-1
1 + 2 + ... + n-1 =r
2 n-1 + n-2 + ... + 1 =r
将1式和2式相加=> 2r = n(n-1) => r = n(n-1)/2
得到了重复数r,那么剩下多少不重复的呢? n*n - r = n(n+1)/2 wala~ QED
----Note---
这其实是一个可重复的N choose M 组合问题,而这里的M是2,有时间的话想好好证明一下这个问题
随机推荐
- 一个IP多个https站点配置
在一台主机上放置一个https网站,究竟该怎么配置?对于IIS和Apache以及Nginx等不同的服务器,方法是不同的,网上有很多教程,在此就不再赘述了. 至于一台主机,如何配置多个https网站呢? ...
- Closest Binary Search Tree Value I & II
Closest Binary Search Tree Value Given a non-empty binary search tree and a target value, find the v ...
- Python模块之optparse
参考: http://www.cnblogs.com/captain_jack/archive/2011/01/11/1933366.html https://docs.python.org/2/li ...
- html常用标签的使用方法
1 html标题 <h1> to <h6> <!DOCTYPE html> <html lang="en"> <head&g ...
- the XMLHttpRequest Object
Ajax的核心是XMLHttpRequest对象.XMLHttpRequest对象允许异步发送请求并且以文本的形式返回结果.发送什么样的请求(what),在服务器端怎样处理这个请求(how),返回什么 ...
- zpf框架的business使用方法
2015年3月9日 10:58:42 controller 是接受数据分派任务的地方 model 接收controller来的数据, 获取并处理数据库中的数据, 然后再返回给controller 的业 ...
- Linux下编译安装Apache 2.4
Linux一般会自带httpd服务,但是版本一般不是最新,性能也不是最好,生产中建议手动安装官方源码包,安装Apache官方包之前首先要停止之前的httpd服务,停止后也可以卸载之前的版本 准备工作做 ...
- 全能直播王PC版-0707-full_codecs
全能直播王是一款高清流畅的全平台的电视直播应用,让您随时随地看高清电视直播. [全能特色] 1. 收录全国1400多个直播频道,包括湖南卫视.江苏卫视.浙江卫视等热门频道. 2. 频道多线路自动选择, ...
- [Android]如何获取当前用户设置的时区
方法:TimeZone.getDefault().getDisplayName(true, TimeZone.SHORT);获取的值如GMT+08:00,GMT-04:00,EDT 另附:国家码查询 ...
- Mysql 基础 高级查询
在西面内容中 car 和 nation 都表示 表名 1.无论 高级查询还是简单查询 都用 select.. from..语句 from 后面 加表名 可以使一张表也可以是 ...