组合数学-两类元素的全排列

         在前一篇中我们提到的 C(n, m) 表示从n个元素中取m个元素组成m元组合的个数, 在组合学上还有另一种组合学意义: 两类元素的全排列的个数。


概念1:  全排列

          在前一篇中提到了 n 个元素的m元排列,  当m=n时, 就称为n个元素的全排列, n个元素的全排列的个数为 P(n, n) = n! 个


1.  两类元素的全排列:

         有两类元素 0 和 1, 总数为n个, 0为 m 个, 1 为 n-m 个, 那么这n个元素的全排列的个数为   C(n, m) 个。

         这个其实很容易得出, 假如这n个元素互不相同, 则全排列有 n! 个, 现在固定 1 的位置排列 0 的位置, 有 m! 个, 但实际上m个0 是相同的, 只能算作一种, 要除以 m!

         对元素类1也是如此, 因此两类元素的全排列的个数为   n! /(m!(n-m)!)  =  C(n, m)


有许多著名的组合问题与“两类元素的全排列”有关。


应用举例:

戏院售票处有 2n 个人在排队买票, 票价5元;  其中 n 个人拿的是5元的钱, n 个人拿的是 10 元的钱, 戏院初始没有零钱; 问这 2n 个人如何排队才能使每个人都不等待找零钱?


分析:

这个问题不是 2n 个人的排列问题, 其实是带限制条件的两类元素的全排列问题: 我们假设拿 5 元钱的人为0, 拿10元钱的人为1, 其全排列为  C(2n, n) 个;

不过, 这些排列中有些排列会使得有人等待找零钱, 如何计算这部分排列呢?


2. 折线模型和反射原理

为了解决前述的问题, 组合学上建立了折线模型:

在平面直角坐标系上, 在 x 轴和 y 轴上分别建立刻度单位为 1 的网格, 坐标原点表示戏院没有开始售票的起始状态; 由 0, 1 组成的序列表示排队序列, 当碰到0 (拿5元的) 从当前点画一条斜向上的对角线, 碰到1 则画一条斜向下的对角线, 这样一直进行, 直到读完这个输入序列, 终点为 (2n, 0) 如下图所示:



这种折线的条数正好是 C(2n, n) 。 当折线穿过 x 轴(与 y = -1 相交)时, 就说明出现了人等待找零钱的情况, 这种就是不符合条件的排列; 当折线与x轴刚相交时, 说明收到的5与10元的张数相等。

那么, 如何利用折线模型计算不符合条件的折线条数(排列数)呢? 可以利用反射的方法。

当折线首次与 y = -1 轴相交时, 把交点以后的折线关于 y=-1 进行反射, 反射以后, 折线仍以原点O 为起点, 但终点为 (2n,  -2),  容易算出, 这种折线有 n-1 个上升段, n+1 个下降段。  也就是 n-1 个0, n+1 个1, 这类折线的条数为  C(2n, n-1) 

从而满足条件的排队方法有:  C(2n, n)  -  C(2n, n-1)  = C(2n, n) / (n+1)


在应用折线模型时, 必须会计算两个整点间能够连接的折线条数以及明白反射原理。


反射定理:

设 A(m, a),  B(n, b) 为平面上的两个整点, n > m,  A与B能够用折线相连的条件是:

n-m >= |a-b|                                                (1)

n-m ≡ b-a (mod 2)                          (2)

当条件满足时, 折线条数是: C(n-m,  k),   其中  k = (n-m + b-a)/2

证明:

当条件满足时, AB的连接折线必然不只一条, 而且每条都有相同多的上升段, 相同多的下降段, 分别设为 x, y, 有

x + y = n - m

x - y = b - a

从而  x = (n-m + b-a)/2=k  ,   y= (n-m + a-b)/2

定理的条件 (1) 保证了 x为非负数, 由两类元素的全排列公式, 折线条数为 C(n-m, k)



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值