计数原 4、计数原理 Counting 45排列与组合的生成 Generating Permutations and combinations 2/24/202111:38PM Deren Chen, Zhejiang UniV
计数原理 2/24/2021 11:38 PM Deren Chen, Zhejiang Univ. 1 4、计数原理/Counting 4.5 排列与组合的生成 Generating Permutations and Combinations
计数 在实际应用中,往往不仅需要计数,而且要 把各种情况都枚举出来。 字典序排列/ lexicographic ordering for permutation 定义 顺序:排列a1,a2,…,an中相邻两数 a;a1,称为一个逆序。 2/24/202111:38PM Deren Chen, Zhejiang Univ 2
计数原理 2/24/2021 11:38 PM Deren Chen, Zhejiang Univ. 2 在实际应用中,往往不仅需要计数,而且要 把各种情况都枚举出来。 一、 字 典序排 列/lexicographic ordering for permutation 定义: 顺序:排列a1,a2,…,an中相邻两数 ai<ai+1,称为一个顺序。 逆序:排列a1,a2,…,an中相邻两数 ai>ai+1,称为一个逆序
计数原 例: 排列132654 顺序:13,26,逆序:32,65,54 对n个对象进行全排列,有n!个排列,可 以对n个对象加上标记。 不失一般性,我们只需对n个自然数{1, 2,,n}进行全排列,枚举出所有的情况。 字典序排列算法 1.给出初始排列:p1=1,2,3,4,…,n 2.若pk已定义(1≤k≤n!-1) pk=al 2 a a 2/24/202111:38PM Deren Chen, Zhejiang Univ 3
计数原理 2/24/2021 11:38 PM Deren Chen, Zhejiang Univ. 3 例: 排列1 3 2 6 5 4 顺序:13,26,逆序:32,65,54。 对n个对象进行全排列,有n!个排列,可 以对n个对象加上标记。 不失一般性,我们只需对n个自然数{1, 2,…,n}进行全排列,枚举出所有的情况。 1.给出初始排列:p1=1,2,3,4,…,n 2.若pk已定义 (1≤k≤n!-1) pk=a1,a2,…,am,…,an
计数 则按下列规定,定义p的下一个排列 p bi,b b n (1)寻找am:m=max{j|aam, p>m) 即在a右面大于an的项中选取最小的项作为bm 小到大排列,送入bbmm/d,…,an从 c)把am m+1 a p 2/24/202111:38PM Deren Chen, Zhejiang Univ 4
计数原理 2/24/2021 11:38 PM Deren Chen, Zhejiang Univ. 4 则按下列规定,定义pk pk+1=b1,b2,…,bm,…,bn (1)寻找am:m=max{j|aj<aj+1} 即am,am+1是最右面的顺序,自am+1开始均为 逆序。 (2)给出bi(i=1,2,…,n) a) b1=a1,b2=a2,…,bm-1=am-1 b)bm=min{ap|ap>am,p>m) 即在am右面大于am的项中选取最小的项作为bm。 c)把am,am+1,…,ap-1,ap+1,…,an从 小到大排列,送入bm+1,bm+2,…,bn
计数原 例1:设有n=6个数字的排列a1,a2, a6为1,2,4,6,5,3,求它的下一 个排列 解:1求m:4,6是最右的顺序,an=4, m=3 2定义b:b1=1,b2=2,在am右边 还有6,5,3,其中6和5大于am=4, 5是最小的,b3=5 3余下a3=4,a4=6,a6=3,从小 到大排起来,为3,4,6,即让b4=3, b==4, b 6 6 得到1,2,4,6,5,3的下一个排 列:1,2,5,3,4,6 2/24/202111:38PM Deren Chen, Zhejiang Univ
计数原理 2/24/2021 11:38 PM Deren Chen, Zhejiang Univ. 5 例1:设有n=6个数字的排列a1,a2,…, a6为1,2,4,6,5,3,求它的下一 个排列。 解:1.求m: 4,6是最右的顺序,am=4, m=3 2.定义bi: b1=1,b2=2,在am右边 还有6,5,3,其中6和5大于am=4, 5是最小的,b3=5 3.余下a3=4,a4=6,a6=3,从小 到大排起来,为3,4,6,即让b4=3, b5=4,b6=6 得到1,2,4,6,5,3的下一个排 列:1,2,5,3,4,6
计数 例2:求n=4时{1,2,3,4}的所有 排列。 解: 1234→1243→1324→1342→1 423→1432→2134→2143→2 314→2341→2413→2431→3 124→3142→3214→3241→3 412→3421→4123→4132→4 213→4231→4312→4321 2/24/202111:38PM Deren Chen, Zhejiang Univ
计数原理 2/24/2021 11:38 PM Deren Chen, Zhejiang Univ. 6 例2:求n=4时{1,2,3,4}的所有 排列。 解: 1234→1243→1324→1342→1 423→1432→2134→2143→2 314→2341→2413→2431→3 124→3142→3214→3241→3 412→3421→4123→4132→4 213→4231→4312→4321
计数原 例2中开始的排列与结束时的排列的特征, 可用数学归纳法证明,对任意n个数用此算法 都能枚举出所有的排列。 定理一: 用字典序排序方法可由1,2,3 n的第一个排列1,2,,n(全顺序)开 始,得到n!个排列,且最后一个排列是n, n-1,…,2,1(全逆序)。 2/24/202111:38PM Deren Chen, Zhejiang Univ 7
计数原理 2/24/2021 11:38 PM Deren Chen, Zhejiang Univ. 7 定理一: 用字典序排序方法可由1,2,3,…, n的第一个排列1,2,…,n(全顺序)开 始,得到n!个排列,且最后一个排列是n, n-1,…,2,1(全逆序)。 注: 例2中开始的排列与结束时的排列的特征, 可用数学归纳法证明,对任意n个数用此算法 都能枚举出所有的排列
计数原理 二、字典序组合/1 lexicographic ordering for combination 对任意n个对象,求取其中k个对象组合的所有 组合。 不失一般性,只要讨论求{1,2,…,n}的 所有k子集,共CA个 2/24/202111:38PM Deren Chen, Zhejiang Univ 8
计数原理 2/24/2021 11:38 PM Deren Chen, Zhejiang Univ. 8 二 、 字典序组合 /lexicographic ordering for combination 对任意n个对象,求取其中k个对象组合的所有 组合。 不失一般性,只要讨论求{1,2,…,n}的 所有k子集,共 k Cn 个
计数原 字典序组合算法: 1.S1={1,2,…,k 2.若S1={a1,a2,…,ak}已得到 (1≤i≤Ck-1)则构造下一个子集 {b1,b (1)m=max{ja;≠n-(k一j)}, 即{a1,a2,…aj,…,ak}与 {n-k+1,n-k+2 n-k+j,…,(n-1),n}比较 从右边开始比较第一个不相等的项为am 2/24/202111:38PM Deren Chen, Zhejiang Univ 9
计数原理 2/24/2021 11:38 PM Deren Chen, Zhejiang Univ. 9 字典序组合算法: 1.S1 ={1,2,…,k} 2.若Si ={a1,a2,…,ak}已得到 (1≤i≤Cn k -1)则构造下一个子集 Si+1 ={b1,b2,…,bk} (1)m=max{j|aj≠n-(k-j)}, 即{a1,a2,…aj,…,ak}与 {n-k+1,n-k+2,…, n-k+j,…,(n-1) ,n}比较 从右边开始比较第一个不相等的项为am
计数原 (2)构造S+1 a a 1 b a 2, a b)b=a+ c) bm+1=bm+l, bm+2=b+1t 1 b=b-1+1 注: 不用耽心b会取到大于n的数 2/24/202111:38PM Deren Chen, Zhejiang Univ 10
计数原理 2/24/2021 11:38 PM Deren Chen, Zhejiang Univ. 10 (2)构造Si+1 a)b1=a1,b2=a2,…,bm-1=am-1 b)bm=am +1 c)bm+1=bm +1,bm+2=bm+1+1,…, bk=bk-1+1 注: 不用耽心bk会取到大于n的数