组合数学
加法原理、乘法原理
加法原理:如果完成一个任务有 类方法(每类方法都可以单独完成任务),第 类方法有 种不同的方法,那么完成这个任务一共有 种方法。
例如从 3 个红球和 2 个蓝球中选一个,有两类方法:选红或者选蓝。选红有 3 种选法,选蓝有 2 种选法,所以总共有 种选法。
乘法原理相当于加法原理的推论:如果完成一个任务有 步(有严格的先后顺序),第 步有 种不同的方法,那么完成这个任务一共有 种方法。
考虑有 2 步的情况,第一步有 种方法,第二步有 种方法,那么有多少类方法可以解决这个问题呢?我们把在第一步选择方法 看成是第 类,那么对于第 类问题,我们还要从第二步的方法中选一种,即这类方法有 种方法。所以总方法数就是 。
例如从 3 个红球和 2 个蓝球中各选一个,红球有 3 种选法,蓝球有 2 中选法,所以总共有 种选法。
排列组合
-
线排列:从 个数中不重复地取出 个组成一个排列,排列的方案数记为 :
-
圆排列:从 个数中不重复地取出 个数组成一个环,环的方案数记为 :
因为这是一个环,相当于在线排列的基础上,循环右移 个位置,得到的排列视为等价的, 可以取 ,所以要除以 。
-
组合数:从 个数中选 种,选法总数记为 或 :
我比较喜欢 这种写法。
鸽巢原理 / 抽屉原理
我比较喜欢用抽屉来描述:
-
基本:有 个物品放到 个抽屉里,那么至少有一个抽屉里有 或以上个物品。
-
推广:有 个物品放到 个抽屉里,那么至少有一个抽屉里有 或以上个物品。
应用的基本思路是插入法:即往若干个抽屉里放物品,考虑覆盖情况。我们需要考虑 “抽屉” 是什么(怎么建模)。