组合数学排列的逆序生成算法
- 格式:pdf
- 大小:379.39 KB
- 文档页数:4
证明2(构造算法2)
从n个空位开始,从左至右标为1,2,…,n。 1:由于排列中有个b1整数在1前面,将1放在b1+1位置。 2:在排列中要有b2个比2大的数在2的前面,2的位置便根据 b2可以确定(注意,1占用的位置不算空位); … K:在排列中要有bk个比k大的数在k的前面,k的位置便根据bk 可以确定(应排除已被占用的位置,只数空位) … n:n放在最后的空位中。
排列中的逆序
• 设i1i2…in是[1,n]的一个排列,如果k<l,ik>il ,则数对 称为一个逆序。例如,31524有4个逆序对。 • 对于一个排列, aj= 在排列中先于 j 且大于 j 的整数 的个数;它量度 j 的反序的程度。例如, 31524 的 逆序列是:1 2 0 1 0。 • 注意,逆序列满足条件: 0≤a1≤n-1,0≤a2≤n-2,…,0 ≤an-1≤1,an=0
这是因为k,在[1,n]中存在n-k个数比k大。由乘法原理, 满足0≤b1≤n-1,0≤b2≤n-2,…,0 ≤bn-1≤1,bn=0的b1,b2,…,bn序 列有n· (n-1)· …· 2· 1=n!个。即逆序列个数与排列的个数 一样多。
定理:令b1,b2,…,bn 是满足0≤b1≤n-1,0≤b2≤n-2,…,0 ≤bn-1≤1,bn=0的整数序列,则存在[1,n]的唯一排列, 其逆序53402110生成排列。
算法1: 逆序:5 3 4 0 2 1 1 0 bj : 12345678 8 87 867 8657 48657 486537 4862537 48625137 算法2: 逆序:5 3 4 0 2 1 1 0 bj : 12345678 _____1__ ___2_1__ ___2_13_ 4__2_13_ 4__2513_ 4_62513_ 4_625137 48625137
证明1:从逆序列构造排列算法1 n:写出n. n-1:考虑bn-1(介于0,1),若bn-1=0,则n-1在n前,否则在 n后。 n-2: bn-2 =0,1,2分别表示n-2应在n,n-1的前,中,后。 … n-k: bn-k =0,1,…,k表示在n,n-1,…n-k+1几个数中插入n-k的位 置在第几个。 …… 1:我们必须把1放在步骤n-1所构造的序列的第b1 个数的后 面。 这样就等到相应的排列。