排列组合

排列组合

排列组合 #

可能出现的情况总数。

  1. 排列:是指从给定个数的元素中取出指定个数的元素进行排序。– n个中取m个,需要考虑排序:n!/(n-m)!

  2. 组合:是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。– n个中取m个,不考虑排序:n!/m!*(n-m)!

例如 #

  1. 3个球里取1个,有多少种排列呢?根据公式有:3*2*1/2*1 = 3,跟直觉一致。组合呢?根据公式有:3*2*1/1*2*1 = 3.

当取1个的时候,排列和组合是一样的,因为此时m! = 1.

  1. 3个球里取2个,排列:3*2*1/(3-2) = 6; 组合:3*2*1/2*1*1 = 3.

此时,排列数比组合数多。

如果用A、B、C分别表示3个球,则排列情况有:AB、AC、BC、BA、CA、CB;组合情况有:AB、AC、BC

  1. 当n和m都很大时,需要借助计算机来计算:
package main

func factorial(n int) (s int) {
	s = 1
	for i := 1; i <= n; i++ {
		s *= i
	}
	return
}

func main() {
	s := factorial(10) / factorial(10-4)
	println("10个取4个的排列", s) // 10个取4个的排列 5040

	p := factorial(10) / factorial(10-4) * factorial(4)
	println("10个取4个的组合", p) // 10个取4个的组合 120960
}

执行