1. 组合数的等价转换
- 递推关系(降低规模):
拆分成两项
(nk)=(n−1k)+(n−1k−1) ( n k ) = ( n − 1 k ) + ( n − 1 k − 1 )有如下两种形式的证明:
- 根据组合数的定义( (nk)=n!k!(n−k)! ( n k ) = n ! k ! ( n − k ) ! ),各自展开进行证明;
《算法导论》提供了另外的思路,从实际意义出发, (nk) ( n k ) 表示 n n 个对象中选择 个。考虑全体 n n 个对象中的任意一个(是否被选中),根据其是否在最终选择的 个之中,可将 (nk) ( n k ) 拆分成两项,
- 在 k k 中,即从余下的 个对象中选择 k−1 k − 1 个对象: (n−1k−1) ( n − 1 k − 1 )
- 不在 k k 中,即从余下的 个对象中选择 k k 个对象:
因此有: (nk)=(n−1k)+(n−1k−1) ( n k ) = ( n − 1 k ) + ( n − 1 k − 1 )