容斥原理一般用于解决‘至少’型问题,是一种很好用的计数方法。下面通过两个问题来了解容斥原理解决的问题类型,并推广容斥原理。
问题1:某班考了数学和语文两门课程,其中数学满分的共15人,语文满分的共10人,两门课都满分的共3人,请问该班中至少有1门课程得满分的共多少人?
容斥问题的基本原理:
$$ \vert A \cup B \vert = \vert A \vert + \vert B \vert - \vert A \cap B \vert $$
根据原理的计算:15+10-3=22
韦恩图很直观:
3+7+12=22
该维恩图制作网站:http://bioinfogp.cnb.csic.es/tools/venny/
问题2:某班考了语、数、外三门课程,其中数学满分的共10人,语文满分的共5人,英语满分的共11人,数学与语文都满分的共2人,数学与英语都满分的共5人,语文与英语的都满分的共3人,三门课都满分的共1人,请问该班中至少有1门课程得满分的共多少人?
维度增加了1维,计算方法稍有不同:
$$ \vert A \cup B \cup C \vert = \vert A \vert + \vert B \vert + \vert C \vert - \vert A \cap B \vert - \vert A \cap C \vert - \vert B \cap C \vert + \vert A \cap B \cap C \vert $$
计算方法:10+5+11-2-5-3+1=17
韦恩图:
1+1+1+1+4+4+5=17
将问题推广到N维的情况,则得到容斥原理的更一般的公式形式:
$$ \vert A_1 \cup A_2 \cup ... \cup A_n \vert = \sum_{1 \leq i \leq n} \vert A_i \vert - \sum_{1 \leq i < j \leq n} \vert A_i \cap A_j \vert + \\ \sum_{1 \leq i < j < k \leq n} \vert A_i \cap A_j \cap A_k \vert - ... + (-1)^{n-1} \vert A_1 \cap A_2 \cap ... \cap A_n \vert $$
上式可以紧凑的写成:
$$ \vert \bigcup_{i=1}^n A_i \vert = \sum_{k=1}^n (-1)^{k+1} (\sum_{1 \leq i_1 < ... < i_k \leq n} \vert A_{i_1} \cap ... \cap A_{i_k} \vert) $$
对于上面这两个公式通过归纳法证明得到,参考:百度百科、wikipedia
广义容斥原理:可用与解决一类‘恰好’型问题。ps:挖个坑,改天再填。。。