算法之组合数学及其算法篇(三) ----- 容斥原理应用以及几个典型的递归关系

容斥原理应用

前言

容斥原理是组合数学中的一个重要原理,它在计数研究中占有重要地位。但容斥原理所研究的计数是若干有限集的交、并或差的计数。

由于我们讲的是应用,因此原理就不再仔细展开。我们在应用的时候要将某一类满足某种性质的元素看成集合,这个是应用容斥原理的最基本的技巧。

错位排列

定义:设集合S=(1,2,3,…,n},则S的排列数为n!。若其中有两个排列12…n和 i1i2⋯in, 如果 i1≠1,i2≠2,⋯,in≠n 则称排列ji2…1为12…n的一个错位排列。即是说,一个错位排列就是使得原排列的每个元素都不在原来位置的排列。简称为 D n D_n Dn

  1. 由规律我们得到递推关系: D n = ( n − 1 ) ( D n − 1 + D n − 2 D_n =(n-1)(D_{n-1}+D_{n-2} Dn=(n1)(Dn1+Dn2
  2. 由D1 = 0 , D2 = 1,所以D0 = 1 ,那么通过化简我们有 D n = n D n − 1 + ( 1 − ) n D_n = nD_{n-1} +(1-)^n Dn=nDn1+(1)n

定理:对于n>=1 ,有 D n = n ! ( 1 − 1 1 ! + . . . + ( − 1 ) n 1 n ! ) D_n = n!(1-\frac{1}{1!} + ...+(-1)^n\frac{1}{n!}) Dn=n!(11!1+...+(1)nn!1)
证明:
证设S={1,2,…,n},S0为S的所有n!个排列的集合。令Aj表示排列1,2…,n中使j位置上的元素保持不动的排列的集合,j=1,2,…,n。则排列1,2,…,n的所有错位排列必是在 A 1 ‾ ∩ A 2 ‾ ∩ ⋯ ∩ A n ‾ \overline{A1}∩ \overline{A2}∩⋯∩\overline{An} A1A2An.中的那些排列,故有。 D n = A 1 ‾ ∩ A 2 ‾ ∩ ⋯ ∩ A n ‾ D_n = \overline{A1}∩ \overline{A2}∩⋯∩\overline{An} Dn=A1A2An。而且
A j = ( n − 1 ) ! , j = 1 , 2 , ⋅ ⋅ , n Aj=(n−1)!,j=1,2,··,n Aj=(n1)!,j=1,2,,n
∣ A i ∩ A i ∣ = ( n − 2 ) ! , i , j = 1 , 2 , … , n , 但 i ≠ j ∣Ai∩Ai∣=(n−2)!,i,j=1,2,…,n,但i\neq j AiAi=(n2)!,ij=12ni=j
对于任意整数k且1≤k≤n,则有
∣ A n ∩ A 2 ∩ ⋯ ∣ A k ∣ = ( n − k ) ! ∣An∩A2∩⋯∣Ak∣=(n−k)! AnA2Ak=(nk)!
图为(1,2,…,k)的k组合为 C ( n , k ) C(n,k) C(n,k)个,应用容斥原理得到
D n = n ! ( 1 − 1 1 ! + . . . + ( − 1 ) n 1 n ! ) 证 毕 D_n = n!(1-\frac{1}{1!} + ...+(-1)^n\frac{1}{n!})证毕 Dn=n!(11!1+...+(1)nn!1)

棋阵多项式

概念
n个棋子在n×n的棋盘上的一种布局,并规定:每行每列有且只有一个棋子,这样一种布局对应n个元素的某一排列。例如,下图是一个4×4的棋盘,4个棋子在棋盘上的一种布局,如图所示,其所对应的排列为2314。

可以把棋盘C推广到任意形状。
设 为 r k ( C ) 为 k 个 棋 子 按 规 定 布 置 到 棋 盘 C 上 的 不 同 方 案 数 设为r_k(C)为k个棋子按规定布置到棋盘C上的不同方案数 rk(C)kC

在这里插入图片描述

禁位排列

定义:是指在一个排列中禁止某些元素占据某些位置。

在这里插入图片描述
证明:对于其证明我们是正难则方的思路先求落入禁区的,在求禁区的方案数需要用到容斥原理。
若有n个棋子布入n×n的棋盘。设 A i A_i Ai为i个棋子落入禁区的排列集合,i=1,2,…,n。

若一个棋子落入禁区的方案数为 r 1 r1 r1,剩下的n-1个棋子为无限制的排列,故至少有一个棋子落入禁区的排列数为 r 1 ∗ ( n − 1 ) ! r_1*(n-1)! r1(n1)!。两个棋子落入禁区的方案数为 r 2 r_2 r2,而其余n-2个棋子为无限制的排列,故至少有两个棋子落入禁区的排列数为 r 2 ∗ ( n − 2 ) ! r_2*(n-2)! r2(n2)!,依此类推。由容斥原理,n个棋子无一落入禁区的排列数为
Q n = A 1 ‾ ∩ A 2 ‾ ∩ ⋯ ∩ A n ‾ = n ! − r 1 ⋅ ( n − 1 ) ! + r 2 ⋅ ( n − 2 ) ! + ⋯ + ( − 1 ) ∗ r n ∗ 0 ! Q_n=\overline{A1}∩ \overline{A2}∩⋯∩\overline{An} \\ =n!−r_1⋅(n−1)!+r_2⋅(n−2)!+⋯+(−1)^*r_n*0! Qn=A1A2An=n!r1(n1)!+r2(n2)!++(1)rn0! 证毕。

而对于 r 1 , r 2 , . . , r n r_1,r_2,..,r_n r1,r2,..,rn的值我们有由禁区组成图形的棋阵多项式求出。

在这里插入图片描述

递归关系

定义:对于数列 a 1 , a − 2 , a 3 , … , a n a_1,a-2,a_3,…,a_n a1a2a3an 把该数列中除了有限个数以外的任何数a,和它前面的一个或一些数关联起来的方程叫做递归关系。为了能够着手计算,必须知道数列中的一个或一些数,这样的数叫做边界条件

Hanoi塔问题

我们将n个盘从a柱移动到c柱上,需要移动的次数分析如下:

令h(n)为n个盘从a柱移到c柱所需移动的盘次。显然,当n=1时,只需移动一个盘次,故h(1)=1。当n=2时,先将上面的小盘移到b柱上;然后,将下面的大盘移到c柱上;最后再将b柱上的小盘移到c柱上,共计移动3个盘次,故h(2)=3。依此类推,总之,当有n个盘时,设法先将上面的n-1个盘移到b柱上,再将第n个盘从a柱移到c柱上,然后再把b柱上的n-1个盘设法移动到c柱上。于是我们得到以下递归关系
h ( n ) = 2 h ( n 一 1 ) + 1 , h ( 1 ) = 1 , n = 2 , 3 , … . h(n)=2h(n一1)+1,h(1)=1,n=2,3,…. h(n)=2h(n1)+1h(1)=1n=23.

通过母函数求解后得到:
h ( n ) = 2 n − 1 h(n)=2^n-1 h(n)=2n1

平面分割问题

1.问题的提出
设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。
2.问题的分析
令a点为n条封闭曲线把平面分割成的区域个数。显然,当n=1时, a1=2; 当n=2时, a2=4; 当n=3时, 。a3=8,⋯。 于是我们发现一个规律:若n-1条封闭曲线把平面分割成的区域个数为an-,,则第n条封闭曲线与这n-1条封闭曲线相交于2(n-1)个点,这2(n-1)个点把第n条封闭曲线截成2(n-1)段弧,这些弧把原来的2(n―1)个区域中的每个区域一分为2,故新增加的区域个数为2(n-1),如图6.2所示,于是得到以下递归关系

a n = a n − 1 + 2 ( n − 1 ) , a 1 = 2 , a 0 = 2 , n = 2 , 3 a_n=a_{n-1}+2(n-1),a_1=2,a_0=2,n=2,3 an=an1+2(n1),a1=2,a0=2,n=2,3

通过母函数求解后得到:
a n = n ( n − 1 ) + 2 a_n=n(n-1)+2 an=n(n1)+2

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落春只在无意间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值