容斥原理应用和典型的递归关系

  • 容斥原理应用
    • 前言
  • 错位排列
  • 棋阵多项式
  • 禁位排列
  • 递归关系
    • Hanoi塔问题
    • 平面分割问题

容斥原理应用

前言

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

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

错位排列

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

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

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

棋阵多项式

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

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

禁位排列

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


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

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

而对于r1,r2,..,rnr_1,r_2,..,r_nr1​,r2​,..,rn​的值我们有由禁区组成图形的棋阵多项式求出。

递归关系

定义:对于数列a1,a−2,a3,…,ana_1,a-2,a_3,…,a_na1​,a−2,a3​,…,an​ 把该数列中除了有限个数以外的任何数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)=2h(n一1)+1,h(1)=1,n=2,3,….h(n)=2h(n一1)+1,h(1)=1,n=2,3,….h(n)=2h(n一1)+1,h(1)=1,n=2,3,….

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

平面分割问题

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所示,于是得到以下递归关系

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

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

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

  1. 算法之组合数学及其算法篇(一) ----- 排列与组合

    组合数学及其算法篇 前言 排列与组合 无重集的排列与组合 无重集的排列 应用例子 无重集的组合 应用例子 重集的排列和组合 重集的排列 重集的组合 前言 组合数学研究的对象是组态.所谓组态就是指若干个 ...

  2. 算法之组合数学及其算法篇(二) ----- 鸽巢原理

    鸽巢原理 前言 鸽巢原理 运用1 运用二 运用三 鸽巢原理的推广 推论 运用一 运用二 鸽巢原理在几何上的作用 鸽巢原理对于数学的证明 前言 鸽巢原理又称抽屉原理或鞋盒原理,这个原理最早是由狄利克雷( ...

  3. 【算法套路】-【递归篇】【递归三要素】

    [算法套路]-[递归篇] 文章目录 [算法套路]-[递归篇] 前言 递归三要素 前言 本文参考·[代码随想录]·大佬的二叉树:一入递归深似海,从此offer是路人,希望在写递归脑子糊涂的时候,给自己一 ...

  4. 【机器学习】机器学习算法优缺点对比(汇总篇)

    作者 | 杜博亚 来源 | 阿泽的学习笔记 「本文的目的,是务实.简洁地盘点一番当前机器学习算法」.文中内容结合了个人在查阅资料过程中收集到的前人总结,同时添加了部分自身总结,在这里,依据实际使用中的 ...

  5. 「机器学习」机器学习算法优缺点对比(汇总篇)

    作者 | 杜博亚 来源 | 阿泽的学习笔记 「本文的目的,是务实.简洁地盘点一番当前机器学习算法」.文中内容结合了个人在查阅资料过程中收集到的前人总结,同时添加了部分自身总结,在这里,依据实际使用中的 ...

  6. A*寻路算法的探寻与改良(三)

    A*寻路算法的探寻与改良(三) by:田宇轩                                        第三分:这部分内容基于树.查找算法等对A*算法的执行效率进行了改良,想了解细 ...

  7. 数据产品必备技术知识:机器学习及常见算法,看这一篇就够了

    大家都知道,产品经理需要懂技术,很多面试官都偏好有技术背景的同学,毕竟产品经理经常要和开发同学相爱相杀.当然也不是一定要求能够精通,但是至少不要让这块成为沟通的障碍,懂点技术,实际工作中也能少被开发同 ...

  8. 开奖及送书|《漫画算法:小灰的算法之旅(Python篇)》

    2020 06 08 今天距2021年206天 这是一页河山第132次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 07:30准时推送. 微信公众号后 ...

  9. cart算法_决策树学习笔记(三):CART算法,决策树总结

    点击上方"Python数据科学",选择"星标公众号" 关键时刻,第一时间送达! 作者:xiaoyu 介绍:一个半路转行的数据挖掘工程师 推荐导读:本篇为树模型系 ...

最新文章

  1. [BZOJ2502]清理雪道 有上下界网络流(最小流)
  2. AndroidStudio 3.0升级之compile、implementation简要说明
  3. java中怎么固定间距_java中的GridBagLayout是怎么调组件间距的...
  4. 安装ORACLE 11G R2 +redhat es4遇到的问题
  5. HTTP协议容易犯的误区
  6. 【转】介绍设置Session失效的几种方法
  7. 今晚包饺子吗?会露馅的那种......
  8. 手把手教你写一个java的orm(二)
  9. php嗅探视频地址,用PHP嗅探youku视频的真实地址!
  10. javascript编程知识点
  11. gtx780有html接口吗,史上最强显卡供电GTX780入手,纪念给了我人生一堂课的舅妈...
  12. 【EasyAR学习】平面追踪、表面跟踪和运动跟踪、稀疏空间地图
  13. 计算机如何销账户用户,如何注销电脑用户账户 - 卡饭网
  14. 计算机英语ppt答辩,急求英语答辩PPT范文
  15. 源码解读五:流量整型算法实现分析
  16. 扫码签到突破100000用户
  17. python爬虫公众号音频源代码_python爬取音频下载的示例代码
  18. 【金融项目】尚融宝项目(十四)
  19. 产品硬件成本分析_硬件项目中的错误成本
  20. 使用二进制方式安装高可用k8s

热门文章

  1. contains java_Java CopyOnWriteArraySet contains()用法及代码示例
  2. C语言函数怎么像python那样返回多个值?(三种方法:1、设置全局变量 2、传递指针 3、使用结构体返回不同类型的数据)
  3. python如何将视频流实时传输到手机?(有问题,一次只能被一台访问)
  4. python 如何查看列表(List)的维度? (需要将List转换成numpy数组)
  5. 用Python对数学函数进行求值、求偏导
  6. python——while 语句
  7. python2.7配置tensorflow1.5.0和keras2.1.6
  8. Executors框架——5种常用的线程池介绍及区别
  9. linux java调用so文件路径_Linux平台Java调用so库-JNI使用例子
  10. java中的“”、“|”、“^”、“~”运算符怎么用?