Python 如何获得n(n-1)(n-2)/6的结果
在我的Python书中,这个问题要求在运行以下代码后证明Python 如何获得n(n-1)(n-2)/6的结果,python,algorithm,Python,Algorithm,在我的Python书中,这个问题要求在运行以下代码后证明x的值: x = 0 for i in range(n): for j in range(i+1, n): for k in range(j+1, n): x += 1 我能看到的是: i = 0; j=1; k=2: from 2 to n, x+=1, (n-2) times 1 i = 1; j=2; k=3: from 3 to n, x+=1, (n-3) times
x
的值:
x = 0
for i in range(n):
for j in range(i+1, n):
for k in range(j+1, n):
x += 1
我能看到的是:
i = 0; j=1; k=2: from 2 to n, x+=1, (n-2) times 1
i = 1; j=2; k=3: from 3 to n, x+=1, (n-3) times 1
...
i=n-3; j=n-2; k=n-1: from n-1 to n, x+=1, just 1
i=n-2; j=n-1; k=n doesn't add 1
因此,x
似乎是(n-2)+(n-3)+…+系列的总和1.
我不知道如何找到
n(n-1)(n-2)/6
的答案 只需将循环的写成sigma:S=sum{i=1}^n sum{j=i+1}^n sum{k=j+1}^n(1)
尝试将总和从内部扩展到外部:
[代码>S>S>S>S>S>S>S>S>S>S>S>S=及及[[[[[音]人士人士{{{{{{{{{{{{{{i{{{{{{{{{{{{{i{{{{i{{i{i{i{i{i{i{1}{1}{n n(n-i)n(n-i)n-i))-(,(,(,(,(i+1+1+1+1+1+1++++1+1++2+++2+++++++++++++++++1++++++1)及[[[[[[1]人士人士人士人士人士人士人士]]1]1]1]]]及[[[[[[1]]]]]]]]]]]]]]及{{{{{{{{{{求和{i=1}^n(i^2/2+i/2-n*i)
。
如果打开此总和并对其进行简化(很简单),您将得到
S=n(n-1)(n-2)/6
查看此结果的一种方法是,您有n
值和三个嵌套循环,它们被构造为具有非重叠范围。因此,可能的迭代次数等于从n
项或=n!中选择三个唯一值的方法数/(3!(n-3)!
=n(n-1)(n-2)/3*2*1
=n(n-1)(n-2)/6
谢谢pjs,这绝对是一种明智的查看方式!