组合数学初步

入门:

先介绍三个简单的技术

插板法:

直接插板:

看下面的问题:

eg1:

x+y+z=20,其中x,y,z为正整数,求有多少组解。

我们考虑有20个球排成一排。我们插入两个板子把这20个球分成3个部分,其中第一部分的球的个数是x的大小,第二部分是y,第三部分是z

这两个板子怎么插呢不难想到——插在19个缝里。也就是在19个缝里选2个。

答案是C192

先转化,再插板(一一对应):

eg2:

x+y+z=17,其中x,y,z为自然数,求有多少组解。

这个问题不好直接插板。因为可能有零的出现,多个板子可以插在同一个地方。你考虑这样一件事,就是说下面这个问题的解其实和上面的问题一样:

(x+1)+(y+1)+(z+1)=20,其中x,y,z为正整数,求有多少组解。

是不是豁然开朗。我令:
a=x+1,b=y+1,c=z+1,就是a+b+c=20,a,b,c为正整数,求解的组数,和最开始的问题毫无区别。而这其实建立里一组一一对应的关系把一组a,b,c的解对应到了一组x,y,z的解。

独立完成下面的问题:

eg3:

x+y+z=14,其中x>=1,y>=0,z>=2x,y,z为整数,求有多少组解。

答案
原问题可以化为:(x+2)+(y+1)+(z+3)=20,其中(x+2),(y+1),(z+3)为正整数,求有多少组解。

捆绑法:

eg1:

ABCDEFGH8个人要做3个任务,EF要分同一个任务,有多少种分配方法?

如果没有EF分同一个任务的限制,就是一个插板法,可既然EF要分在一起,当成一个人(下文用K表示)就行了,问题可以转化为:

看下面的问题:有ABCDKGH7个人要做3个任务,有多少种分配方法?

这个问题直接插板就行了。

进阶:

Catalan 数(卡特兰数)

引入:

先看几个问题:

eg1.

N个数要按顺序放进一个栈里,每次有可能弹出栈顶或放入下一个元素,问有多少种过程。

eg2.

一个人从原点出发,若当前处于(x,y),下一次可以走到(x+1,y+1)(x+1,y1),走2N步,不可以走到第四象限,最终走到(2N,0)的轨迹数。

eg3.

有一个NN的格点图:
image
A(0,0)走到B(N,N),不走对角线AB以下的方案数。

eg4.

N+1个节点的满二叉树的个数(可以把一个左儿子看成+1,一个右儿子看成1

发现了吗,这其实是一个问题,卡特兰数的模型是这样的;

  • 从原点出发,向上走N步,向下走N步,其中只停留在正半轴的轨迹个数(可以到x轴),记作Cn

计算Catalan 数

先不考虑只在正半轴的条件,方案数就是C2nn,这时我们只需要把不符合要求的删掉。
先看下面的图,这种方案显然不合要求:

image

记得上文插板法一一对应的思想吗?我们找到这条不合要求的线,把它第一次到x轴一下之后的部分关于y=-1对称。

image

显然对称后的轨迹最后一定停留在(2* N,-2),也就是每一条不合要求的线都可以转化为一条从原点出发,最后到x=-2的轨迹。不难看出,反过来转化也是成立的。即这两者是一一对应的。现在只要算出有多少种情况最后停留在直线x=-2上,这很简单,2* N次选择N+1次向下。

这样我们得到了最朴素的计算公式:CN=C2NNC2NN+1
再稍微推导一下:

CN=C2NNC2NN+1

$=\frac{(N+1)(2* N)!}{(N+1)N!N!}-\frac{N(2 N)!}{ N(N+1)!(N-1)!} $

=N(2N)!(N+1)!N!

=C2NNN+1

posted @   星河倒注  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示