清华大学组合数学课件

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

Combinatorics

第章排列与组合

第一章

马昱春

MA Yuchun

myc@

1

内容回顾

•全排列生成算法

(A)字典序法

(B)递增进位制数法(C)递减进位制数法(D)邻位对换法

•全排列:P是[1,n]的一个全排列。P=P 1P 2…P n •序号:先于此排列的排列的个数。

–字典序中将先于此排列的排列按前缀分类,得到排列的序号n-1

(n-i)!小的数的个数i=1,2,,n-1∑k i (n i)! k i :P i 的右边比P i 小的数的个数i 1,2,…,n 1

i=1•中介数:每个排列对应的中介数即k 1k 2…k n-1

–递增/递减进位制数

–记录排列的结构

全排列序号中介数对应

2

–全排列,序号,中介数一一对应

字典序下的对应关系

n-1

排列:P=P 1P 2…P n

序号:∑k i (n-i)! i=1中介数:k 1k 2…k n-1123

0(00)()↑132

1(01)↑ (321)

n!-1=5 (21)……

…………()↑=2*2!+1*1!=5共有n!个排列0到(n!-1)0到(n!-1)个中介数3

中介数的特点:记录当前数字右边比当前数字小的数字的个数

•给定一个排列求后面或者前面的某个排列

给定个排列求后面或者前面的某个排列

–“原排列”→“原中介数”→“新中介数

”“新排列”

→新排列

递增/递减进位制数加减法

序号(A)字典序法(B)递增进位制数法(C)递减进位制数法(D)邻位对换法

0 123 (00)↑ 123 (00)↑ 123 (00)↓ 123 (00)↓

1 13

2 (01)↑ 21

3 (01)↑ 132 (01)↓ 132 (01)↓

2213(10)132(10)312(02)312(02)

2 21

3 (10)↑ 132 (10)↑ 312 (02)↓ 312 (02)↓

3 231 (11)↑ 231 (11)↑ 213 (10)↓ 321 (10)↓

4 312 (20)↑ 312 (20)↑ 231 (11)↓ 231 (11)↓

5321(21)321(21)321(12)213(12)

5 321 (21)↑ 321 (21)↑ 321 (12)↓ 213 (12)↓

对中介数的不同解释算法构成了不同的排列顺序

4

常用排列生成工具

_p,•C++标准程序库中有两个函数next permutation, prev_permutation,可以生成字典序排列

#include algorithm

•#include

bool next_permutation( iterator start, iterator end ); bool prev_permutation( iterator start, iterator end ); bool prev permutation(iterator start iterator end);

–The next_permutation() function attempts to transform the

given range of elements [start,end) into the next

given range of elements[start end)into the next

lexicographically greater permutation of elements. If it

succeeds, it returns true, otherwise, it returns false.•/blog/stl_next_permutation.html

5

•Matlab中也支持排列的生成–用命令perms得到排列,用法:

perms(vector) 给出向量vector的所

有排列,例如perms([2 3 5]) 运行

结果:5 3 2,5 2 3,3 5 2,3 2 5

结果532523352325

,2 3 5,2 5 3

–此函数值只能适用于n < 15的情况

下。

–全排列生成算法??

Project I

Project I

•全排列生成算法的研究和实现

–分

10

–必作

–每组1-3人

–C/C++ or Java

–11月11日前网络学堂提交

•目标

–Research and Novelty

•在实现和研究4种全排列生成算法基础上进行创新

•算法效率和复杂度分析

•新的算法

•任何相关内容的创新点

•评分标准

Paper (80%):3-6页

–Paper(80%)

–代码以及可执行文件(20%)

161.6组合的生成•字典序中组合的先后关系

{128}A ={2378}B={23567}–{1, 2 ,…,8}中选5个数的组合,A = {2,3,4,7,8}, B= {2, 3 ,5 ,6 ,7}. –A 在B 之前•

设从[1,n ]中取r 元的组合全体为C (n ,r ).•

某个组合c 1c 2…c r ∈C (n ,r ).不妨设c 1<c 2<…<c r ≤n •

c r -1 ≤n -1, c r -2≤n -2….c 1≤n -r +112•

c 1≥1,c 2≥2…..c r ≥r •

i ≤c i ≤(n -r +i ), i =1,2,…,r •

i =c 则是第一个组合;字典序中如果所有的i 则是第个组合;•

如果所有的c i =(n -r +i ), 则是最后一个组合•

则满足条件c i <(n -r +i ), 就有可替换的余地

寻找下个组合希望是从可能替换的位置中最右侧的开始替换•寻找下一个组合希望是从可能替换的位置中最右侧的开始替换–

n =5,r =3–

(1 2 5)5, n -r +i =5-3+3=5, 8

()先找最右侧的,,不可以替换–

再找2,n -r +i =5-3+2=4,可以替换;–从2开始替换成从3开始的递增序列;1 3 4

相关文档
最新文档