组合数学

第4章 生成排列和组合

4.1 生成排列

递归生成算法

邻位对换算法

定义

如果整数 k 的箭头指向与其相邻但比它小的整数, 则称 k 是可移动(活动)的

算法

生成{1, 2, …, n}的排列算法:

  1. 初始:% “ … (;
  2. while 存在活动整数时,do
    (1) 求出最大的活动整数 m
    (2) 交换 m 和其箭头指向的相邻整数的位置
    (3) 改变所有满足p>m的整数 p 的箭头方向。
  3. 不存在活动整数时,算法结束。

结论:两种算法生成的排列顺序一致

4.2 排序中的逆序

定义

  1. 逆序: 是集合 的一个排列,如果 , 且 , 称数对 是排列的一个逆序。

  2. 逆序数:对于 { } 上的一个排列,令 表示第二元是 的逆序的数量,即 是排列中先于整数 并大于 的整数的个数,用于度量 的反序程度。

  3. 逆序列: 表示排列 中数 的逆序数,称 为排列 的逆序列。

  4. 奇排列、偶排列:逆序个数为奇数的排列称为奇排列;逆序个数为偶数的排列称为偶排列

性质

性质1:排列 $i1,i_2,…,i_n$ 的逆序列 $a_1,a_2,…,a_n$ 满足: $0\leq a_1\leq n-1,0\leq a_2\leq n-2,…,0 \leq a{n-1}\leq1,a_n=0(1)$
性质2:满足条件(1)的序列 个。

定理

  1. 为满足 的整数序列,那么存在集合{ }的唯一一个排列,满足它的逆序列为

  2. n阶矩阵 , 其行列式为 ,其中, 的符号(偶排列为+1,奇排列为-1)

  3. 已知排列 的逆序列为 ,且 为逆序数。则可以通过 次交换相邻两个数,转化为

4.3 生成组合

算法1:字典序的组合生成

通过特征函数,将n元集合 { }的组合与长度 为 的二进制数一一对应

算法按自然二进制数顺序生成, 称为n元
组字典序。

子集的压缩序:当 j<n-1时,{ }的所有组合都在至少含有{ }中一个元素的组合的前面

算法2:发射Gray码序生成算法

特点

相邻的组合仅相差一个元素(增加一个或者删除一个元素)

定义
n阶Gray码
  1. n 元组看作是 n 维空间的点的坐标。
  2. 每两个点的坐标仅有一个位置不同时,有一条连线。
  3. 算法生成所有的 n 元组:遍历 n 维空间的每个点,使得每个点与其后继只在一个位置不同。
  4. 产生的路径称为n阶Gray码
循环Gray码

遍历可以再经过一条边从终点返回到起点

n阶Gray反射码
  1. 1阶反射Gray码是 0 或 1

  2. 设 n>1 且 n-1 阶反射 Gray 码已经构造,如下构建 n 阶反射 Gray 码:
    (1) 以 n-1 阶反射 Gray 码所给出的顺序列出 0 和 1 的 n-1 元组,把 0 添到每个 n-1 元组的开头,
    (2) 再反序列出 n-1 阶反射 Gray 码的全部 n-1 元组, 并把1加到全部 n-1 元组的开头。

  • n 阶反射 Gray 码以 00…0 开始,并以 10…0 结束。
  • n 因为 00…0 与 10…0 只相差一位,因此该码是循环码。

递归方法构造反射 Gray 码,生成组合。

算法
逐次法
  • 以反射 Gray 码的顺序直接生成 0,1 的n元组
  1. 初始:

  2. 时,进行以下操作:
    (1) 计算
    (2) 如果 是偶数,则改变
    (3) 否则,确定 ,使得 且对于所有 $ i< j, a_i =0 $ ,然后,改变

定理
  1. 对于每一个正整数 n , 逐次法生成 n 阶反射Gray码

总结

字典序
  • 与二进制数顺序一致
反射 Gray 码
  • 相邻两个子集相差一个元素

  • 递归法、逐次法

确定 n 元组在 Gray 码序表的准确位置

给定 Gray 码 . 对于 , 设

此时, 在 Gray码序表的位置和 在字典序表上的位置相同。即 在Gray码序表的位置是

4.4 生成 r 子集

定义

r 子集的字典序

{ } 由前 个正整数组成。

  • 给出 S 的元素的一个自然顺序:

的两个 组合,若 \ 中的最小整数属于A,则称 A先于B

组合表示为子序列

约定 { } 的 子集为如下形式:

性质

{ }, 的一个 子集。

  • (1) 对任意的

    的以 开头的第一个后继一定先于以 开头的第一个后继(如果存在)。

  • (2) 如果 , 则 的直接后继为

定理

4.4.1
(1)

是 { } 的 子集。在字典序中, 第一个 子集是 , 最后一个 子集是 不是最后一个 子集。

(2)

。令 是满足 且使得 不同于 中任一数的最大整数。那么, 在字典序中, 的直接后继是:

直接后继求解算法
  1. , 求 , 判断 是否属于{ };

  2. 找出满足 , 且 不在 { }中的最大的 , 记为 ,那么, 在字典序中, 的直接后继是 :

字典序 r 子集的生成算法

{ }的字典序 子集的生成算法:

开始,逐个列出直接后继,直至得到

  1. 初始:
  2. 时,进行以下操作:
    (1) 确定最大整数k, 使得
    (2) 用 替换 .

定理

4.2.2

{ }的 子集 出现在 { }的 子集中的字典序中的位置号为:

第5章 二项式系数

组合证明

是一种依靠计数原理构建代数事实的证明方法

基本框架:

  1. 定义一个集合
  2. 通过一种计数方式得出
  3. 通过另一种计数方式得出
  4. 得出结论

二项式定理

是一个正整数, 那么对于所有的 有:

其中:

5.1 帕斯卡三角形

定理

5.1.1

( Pascal 公式) 对于满足 的所有整数 , 有:

5.2 二项式定理

定理

5.2.1

是一个正整数, 那么对于所有的 有:

二项式系数的其他等式

方法

证明等式的方法
  • 利用已有等式:帕斯卡公式
  • 求导法、积分法
  • 组合推理法

性质

组合推理路径数

点到 点,共有 种路径

组合定义扩展

扩展:

可取 , 可取 ,
定义二项式系数 为:

  • 扩展定义 仍使Pascal公式成立

  • 可取 , 可取 ,仍有:

5.3 二项式系数的单峰性

定义

单峰性

设序列 , 若存在一个整数 , , 使得:

那么, 称序列是 的。

注意
  1. 一定是序列中的最大数
  2. 不一定是唯一的
取整

为任意实数, 令 表示大于或等于 的最小整数,称强取整(上取整); 表示小于或等于 的最大整数,称弱取整(下取整).

定理

5.3.1

为正整数, 二项式系数序列是 ,其中:

  • 是偶数:
  • 是奇数:
5.3.2

二项式系数 的最大者是:

  • ( 为偶数时)
  • ( 为奇数时)

扩展 1

  • 由集合的子集的包含关系定义的链与反链
  • 由包含关系推广到一般偏序
定义
反链

个元素的集合, 上的一条反链是 的子集的一个集合 ,其中 中的子集不相互包含。

个元素的集合, 上的一条链是 的子集的集合 ,其中对于 中的每一对子集,总有一个包含在另一个之中:
对任意 ,且 ,则 或者

最大链

个元素的集合, 上的最大链 定义为:
满足:
(1) , 且
(2)

方法
构造反链

个元素的集合,一个构造反链的方法:

选择一个整数 ,取 所有的 子集的集合。该方法构成的反链最多含有 个子集。

构造最大链
  1. 中选择一个元素 , 形成 { }.

  2. 选择一个元素 , 形成 { }.

  3. 选择一个元素 形成 { }.

    k. 选择一个元素 形成 { }.

    n. 选择一个元素 形成 { }.

  • S上的最大链与 S 的排列一一对应
  • 最大链的数目为
链与反链的关系
  • 上的一条链最多只能包含 的任意一条反链中的一个子集
  • 上的一条反链最多只能包含 的任意一条链中的一个子集
定理
5.3.3

个元素的集合,则 上的一条反链最多包含 个子集

更强的结果

是为 个元素的集合,

  • 如果n是偶数,则大小为 的唯一的反链是所有 子集的反链
  • 如果n是奇数,则大小为 的反链有两个:
    • 所有 子集构成的反链;
    • 所有 子集构成的反链。

扩展 2

  • 集合的包含关系是偏序关系
  • 把链、反链的概念推广到偏序集

是一个有限偏序集,

  • 链是 的一个子集, 其中任意两个元素都是可比的,
  • 反链是 的一个子集, 其中任意两个元素都不可比.

  • 极小元: 是偏序集的极小元当且仅当 中不存在
    满足 的元素

    • 的所有极小元构成的子集是反链
  • 极大元: 中不存在
    满足 的元素
    • 的所有极大元构成的子集也是反链
定理
5.6.1

是一个有限偏序集, 并令 是最大链的大小, 则 可以被划分成 个反链,但不能划分为少于 个的反链。

5.6.2

是一个有限偏序集, 并令 是最大反链的大小, 则 可以被划分成 个链,但不能划分成少于 个链

定义
对称链划分

{ }, 如果 的幂集 的一个链划分满足以下两个条件,则称其是一个对称链划分:
(1) 链中每一个子集比它前面的子集的元素个数多
(2) 链中第一个子集与最后一个子集的大小和等于
如果这个链只含一个子集,那么这个子集既是第一个子集也是最后一个子集,所以其大小为 (此时, 为偶数)

方法
对称链划分的构造方法

基本思路:将 的所有子集划分为 个对称链。令 { } ,对 进行归纳构造:

对于 时的每一个含多个子集的链 ,可构造 时的两个链:

  1. 增加如下子集:在 的最后一个子集中增加 ,构成一个新子集
  2. 加到 中除最后一个子集之外的所有子集,并删除最后一个子集

注意:

  • 对称链划分中的每一个链必须正好含有一个 子集(也正好含有一个 子集)
  • 对称链划分中的链的个数等于:

5.4 多项式定理

定义

  • 把二项式定理 扩展到
  • 多项式系数: , 其中 是非负整数,且
    • 表示重数分别为 种不同类型物品的多重集的排列数
    • 二项式系数: , 可记为

定理

帕斯卡公式
  • 二项式系数的帕斯卡公式
  • 多项式系数的帕斯卡公式
5.4.1

设 n是正整数。对于所有的 , 有

其中求和是对 的所有非负整数解 $ n_1, n_2, …, n_t $ 进行的。

牛顿二项式定理

定理

5.5.1

是一个实数, 对于所有满足 的变量

其中,

如果 为整数,则就是二项式定理

等价形式

对满足 的任意 ,有

应用

求解任意精度平方根

,有 ,对于 有:

因此,对 ,有:

(详细证明见ppt)