组合数学第4章[生成排列与组合]PPT教学课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

a1+a2+...+an 度量了排列的无序程度。
2020/12/10
11
全排列生
[例]31524的逆序列是1,2,0,1,0。 成算法
[结论]对于逆序列,显然有0≤ak≤n-k。且 任何一个排列都可确定一个逆序列。
[定理]若b1,b2,...,bn是满足0≤bk≤n-k的整数 序列,则存在{1,2,...,n}的唯一的一个排 列,其逆序列为b1,b2,...,bn 。
第4章 生成排列与组合
§4.1 全排列的生成算法 §4.2 生成组合
2020/12/10
1
§4.1 全排列的生成算法
生成全排列就是对于给定的字符 集,用有效的方法将所有可能的全 排列无重复无遗漏地枚举出来。
这里介绍的方法属于邻位对换法。 还存在其它生成算法,如字典序法、 递增进位制数法、递减进位制数法 。
上述结果说明{1,2,...,n}的所有排列与 序列b1,b2,...,bn是一一对应的。
可以采用两种方法给出上述定理的构 造证明。
2020/12/10
12
全排列生
[算法1]先写出n,根据bn-1,bn-2,...,b1 成算法 的值逐个将n-1,n-2,...,1插入到适当位置。 [算法2]从n个空位开始,根据b1,b2,...,bn的值逐 个将1,2,...,n插入到第bi+1的位置上。若bi+1位 置已有值,向后滑动到空位上。
全排列生 成算法
此处介绍用逆序来描述排列的方法。
[列逆定。序义若。]若有i1ki<2.l.,.in是但集ik>合il,{1则,2(,i..k.,,inl)}称的为一一个个排
例如,31524有4个逆序。
[等定于义排]对列排中列位i1于i2.j.左.in边,且定大义于第jj的个元逆素序个数数aj 。 它原度排量列了 的逆j的序逆列序。程度。而a1,a2,...,an称为
n得到(n个元素的排列数也是n-1个元素 排列数的n倍,n!=n*(n-1)!)。
2020/12/10
3
2. 实施的步骤
全排列生 成算法
由前述原理可归纳地从{1,2,…,n-1}的 排列生成{1,2,…,n}的排列,方法是将前 者重复n次并将n交错地插入其中。
{1}的排列
{1}
{1,2}的排列
12
2020/12/10
2
4.1.1 邻位对换法
全排列生 成算法
1. 原理
此方法基于如下事实:如果将n从 {1,2,…,n}的一个排列中删除,则得到 {1,2,…,n-1}的一个排列。
例如,3,1,2,5,4排列中删除5,得到排 列3,1,2,4。
一般地,{1,2,…,n-1}的每个排列都可 以通过在{1,2,…,n}的恰好n个排列中删除
2020/12/10
14
§4.2 生成组合
生成组合
4.2.1 基2算法 若S是n个元素的集合,元素为{xn-1,...,x1,x0}, 则生成组合就是生成S的所有2n个子集。 任一子集可以描述成:
(an-1,...,a1,a0)=an-1...a1a0 其中,ai为1或0,表示xi在或不在子集中。
←1← 3← 2→ 4
→3←2←1→4
程序实现?
2020/12/10
全排列生 成算法
← 2→ 3← 1← 4 ← 2→ 3← 4← 1 ← 2← 4→ 3← 1 ← 4← 2→ 3← 1 → 4← 2← 1→ 3 ← 2→ 4← 1→ 3 ← 2← 1→ 4→ 3 ← 2← 1→ 3→ 4
10
4.1.2 排列的描述
1 2 34 2 3 41 3 41 2 43 2 1 41 3 2 24 1 3 1 2 43 2 3 14 3 1 24 3 2 41 14 3 2 42 1 3 41 2 3 24 3 1 3 1 42 3 2 14 1 3 24 2 14 3 14 2 3 42 3 1 43 1 2 34 2 1 1 34 2 2 1 34
全排列生 成算法
2020/12/10
6
3. 直接生成全排列的算法
全排列生 成算法
[定义]对排列中的每个元素k,赋予其一
个方向:k 或 k 。如果一个整数k的箭头 指向一个与其相邻但比它小的整数,则
称k是活动的。
例如,对于:263154
只有6、3、5是活动的。
2020/12/10
7
显然:
全排列生 成算法
于是S的全部子集可以用0~2n-1的整数来描 述,只要生成这些整数,也就得到了所有组合。
其中,0表示空集,2n-1表示S本身。
21
2020/12/10
4Baidu Nhomakorabea
{1,2,3}的排列
全排列生
1 2 3 成算法 2 31 31 2 32 1 13 2 2 13
2020/12/10
5
{1,2,3,4}的排列
在实现上,可以先 将{1,2,3}的全排列给 出;先插入4(在尾或 首);交换相邻的两 个元素的位置。
不过,上述实现过 程并不是一次性地生 成全排列,而是1~n借 助1~n-1、n-1又借助 1~n-2,等等。
(1)1不可能是活动的
(2)出来下述情况外,n总是活动的:
a. n是排列首位且方向向左;
b. n是排列的末位且方向向右。
2020/12/10
8
算法描述:
从 12n 开始。
全排列生 成算法
当存在一个活动的整数时,做:
(1)求出最大的活动整数m; (2)交换m和其箭头所指向的与其相邻 的整数;
(3)将所有满足p>m的整数的方向反向。
2020/12/10
9
[例]n=4时的算法。
←1← 2← 3← 4
←3←1←2←4
←1← 2← 4← 3
←3←1←4←2
←1← 4← 2← 3
←3←4←1←2
←4← 1← 2← 3
←4←3←1←2
→4← 1← 3← 2
→4→3←2←1
←1→ 4← 3← 2
→3→4←2←1
←1← 3→ 4← 2
→3←2→4←1
例如,bi序列为4,1,0,0,0。 □□□□1 □2□□1 32□□1 324□1 32451
2020/12/10
13
[结论]对排列的描述可以用
全排列生 成算法
逆序列来进行,从而可以用对逆序列的 运算代替对排列的讨论。
逆序列的各bi的选取是独立的,而排 列中各位置元素的选取不独立。
因为b1+b2+...+bn表示一个排列的逆序 个数,若其值为0则表示排列是排好序的。 因此,可以通过从排列中逐渐移去逆序 的方法进行排序(交换相邻的反序元素, 每次移去一个逆序)。
相关文档
最新文档