排序的最少对换数

考虑一个 { 1 , 2 , . . . , n } \{1,2,...,n\} {1,2,...,n}的排列 p p p,我们的问题是,对于 p p p,我们至少需要几次对换来实现对 p p p的排序。

p p p分解为若干个循环, ( a 1 a 2 ⋯ a r ) ⋅ ( b 1 b 2 ⋯ b s ) ⋯ ( c 1 c 2 ⋯ c t ) (a_1a_2\cdots a_{r})\cdot(b_1b_2\cdots b_{s})\cdots(c_1c_2\cdots c_{t}) (a1a2ar)(b1b2bs)(c1c2ct)。我们将证明,至少需要 ( r − 1 ) + ( s − 1 ) + ⋯ ( t − 1 ) (r-1)+(s-1)+\cdots (t-1) (r1)+(s1)+(t1)次对换才能实现对 p p p的排序。

Def(循环排列): 对于 S n = { 1 , 2 , ⋯   , n } S_n=\{1,2,\cdots,n\} Sn={1,2,,n}的子集 { a 1 , a 2 , ⋯   , a r } \{a_1,a_2,\cdots,a_r\} {a1,a2,,ar}, ( a 1 a 2 ⋯ a r ) (a_1a_2\cdots a_r) (a1a2ar)表示一个排列 p p p,使得 p ( a i ) = a i + 1 , ∀ 1 ≤ i < r ; p ( a r ) = a 1 ; p ∣ S n − { a 1 , a 2 , ⋯   , a r } = i d p(a_i)=a_{i+1},\forall 1\le i<r; p(a_r)=a_1;p|_{S_n-\{a_1,a_2,\cdots,a_r}\}=id p(ai)=ai+1,1i<r;p(ar)=a1;pSn{a1,a2,,ar}=id。将这样的排列称为(长度为 r r r的)循环排列,长度为2的循环排列就是对换。

Note: 排列可以看作 S n → S n S_n\rightarrow S_n SnSn的双射,每个排列都可以分解为若干个互不相交的循环排列的复合。通过对换实现对排列的排序,相当于将若干对换与排列进行复合,得到恒等映射。

Lemma:对于 S n S_n Sn中的循环排列 ( a 1 , a 2 , ⋯   , a n ) (a_1,a_2,\cdots,a_n) (a1,a2,,an),至少需要 n − 1 n-1 n1次对换实现排序。
pf:case 1: n = 1 n=1 n=1时,显然成立。

case 2: 假设对于 1 , 2 , ⋯   , n − 1 1,2,\cdots,n-1 1,2,,n1命题成立。

n − 1 n-1 n1次对换的存在性: ( a n a n − 1 ) ( a n − 1 a n − 2 ) ⋯ ( a 3 a 2 ) ( a 2 a 1 ) ( a 1 , a 2 ⋯ a n ) = ( 1 ) (a_na_{n-1})(a_{n-1}a_{n-2})\cdots (a_{3}a_{2})(a_{2}a_{1})(a_1,a_2\cdots a_n)=(1) (anan1)(an1an2)(a3a2)(a2a1)(a1,a2an)=(1)

n − 1 n-1 n1的最小性:对于任意的 a i , a j a_i,a_j ai,aj(不妨设 i < j i<j i<j), ( a i a j ) ( a 1 a 2 ⋯ a n ) = ( a 1 a 2 ⋯ a i − 1 a j ⋯ a n ) ( a i a i + 1 ⋯ a j − 1 ) (a_ia_j)(a_1a_2\cdots a_n)=(a_1a_2\cdots a_{i-1}a_j\cdots a_n)(a_ia_{i+1}\cdots a_{j-1}) (aiaj)(a1a2an)=(a1a2ai1ajan)(aiai+1aj1).
由归纳假设,仍至少需要 ( n + i − j − 1 ) + ( j − i − 1 ) = n − 2 (n+i-j-1)+(j-i-1)=n-2 (n+ij1)+(ji1)=n2次对换实现排序,加上 ( a i a j ) (a_ia_j) (aiaj)一共 n − 1 n-1 n1次。

Th:如果 p = ( a 1 a 2 ⋯ a r ) ⋅ ( b 1 b 2 ⋯ b s ) ⋯ ( c 1 c 2 ⋯ c t ) p=(a_1a_2\cdots a_{r})\cdot(b_1b_2\cdots b_{s})\cdots(c_1c_2\cdots c_{t}) p=(a1a2ar)(b1b2bs)(c1c2ct),那么至少需要 ( r − 1 ) + ( s − 1 ) + ⋯ ( t − 1 ) (r-1)+(s-1)+\cdots (t-1) (r1)+(s1)+(t1)次对换才能实现排序。
pf: 考虑等式 ( a 1 , b 1 ) ( a 1 a 2 ⋯ a r ) ( b 1 b 2 ⋯ b s ) = ( a 1 a 2 ⋯ a r b 1 b 2 ⋯ b s ) (a_1,b_1)(a_1a_2\cdots a_{r})(b_1b_2\cdots b_{s})=(a_1a_2\cdots a_{r}b_1b_2\cdots b_{s}) (a1,b1)(a1a2ar)(b1b2bs)=(a1a2arb1b2bs)可知,跨循环的对换对实现排序没有帮助。结合Lemma立即完成对Th的证明。

因此,对于一个排列 p p p,我们先对其进行循环分解,设得到的循环个数为 l l l,我们至少需要 n − l n-l nl次对换才能实现对 p p p的排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值