[笔记] #排列 #组合

基本公式

A(n,m)为排列数公式
A(n,m)为排列数公式。
C(n,m)为组合数公式
C(n,m)为组合数公式。
意思是:在n个一模一样的物品里选出(满)m个物品。

组合的递推公式

公式:C(n,m)=C(n-1,m-1)+C(n-1,m)
注意:n 在下面,m在上面

推导一:

1、可以理解为:
	假设我们现在只有有n-1个物品,
		第一种情况:我们可以在这n-1个物品之外再添加一个新的物品(记为第n个),就要先在n-1个物品里选m-1个,再加上第n个。
								而这种方法所得的数量与C(n-1,m-1)是一样的,于是我们要加上C(n-1,m-1)的数量。
		第二种情况:假设我们并不想选新加进来的第n个物品,那就在原来的n-1个物品里面选m个来凑成m个物品。于是我们要加上C(n-1,m)的数量。
		那么综合起来,就是C(n,m)=C(n-1,m-1)+C(n-1,m)。
		
2、也可以理解为:
		假设我们按位置来看,对每一位的物品只有选与不选两种方案;
			第一种方案:我们选这一位的物品。
				那么就留一个位置给某个物品(可以理解为第m个物品),那么就剩下m-1个位置,对吧?那就请在剩下的n-1个物品里选择m-1个物品补上空位就好了。那这种方案就有C(n-1,m-1)种可能。
			第二种方案:我们不选这一位的物品。
				那么我们是不是要将这一位的物品排除掉?不选它嘛。那么这m个空位就只能在n-1个物品里面选咯。于是有C(n-1,m)种方案。
		那么综合起来,就还是C(n,m)=C(n-1,m-1)+C(n-1,m)。

巧的是,这个递推式子可以看做一个杨辉三角
所以C++里写作C(n,m)=C(n-1,m-1)+C(n-1,m),n代表行,m代表列。

推导二:

摘自博客 :博客地址

组合数递推式为:

C(k,n)=(n−k+1/k)*C(k−1,n)

它可以很明显的用组合数公式证明,但是它的实际意义却并不明显。
为了更好理解,我们写出组合数递推式的等价形式:

C(k+1,n)=(n−k/k+1)*C(k,n)

推导过程
0、我们知道组合数 C(k,n) 表示 n 个不同元素中选出 k 个元素的方法数。
1、我们如果已知 C(k,n) 的值,在每个被选中的 k 个元素的 组合,添加一个没有被选中的元素(没有被选中的元素个数为 n−k ),
这样就得到了 (n−k)*C(k,n) (这样每个组合中有 k+1 个元素)。

所以推出:C(k+1,n)=(n−k/k+1)*C(k,n)

2、但是这样选出的组合中有重复的情况

例如形成的 k+1 个元素的组合 a1,a2,...,ak,ak+1 ,可能是
a1 添加了 a2,a3,...,ak,ak+1 形成的或者
a2 添加了 a1,a3,...,ak,ak+1 形成的或者
….........
ak 添加了 a1,a2,...,ak−1,ak+1 形成的或者
ak+1 添加了 a1,a,2...,ak−1,ak 形成的。

这样对于每一个 k+1 个元素的组合重复计数了 (k + 1)次,
所以需要除以 k+1 ,得到 C(k+1,n)= n−k/k+1 C(k,n) 。


~20.8.24

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值