考虑一个 { 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}) (a1a2⋯ar)⋅(b1b2⋯bs)⋯(c1c2⋯ct)。我们将证明,至少需要 ( r − 1 ) + ( s − 1 ) + ⋯ ( t − 1 ) (r-1)+(s-1)+\cdots (t-1) (r−1)+(s−1)+⋯(t−1)次对换才能实现对 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) (a1a2⋯ar)表示一个排列 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,∀1≤i<r;p(ar)=a1;p∣Sn−{a1,a2,⋯,ar}=id。将这样的排列称为(长度为 r r r的)循环排列,长度为2的循环排列就是对换。
Note: 排列可以看作 S n → S n S_n\rightarrow S_n Sn→Sn的双射,每个排列都可以分解为若干个互不相交的循环排列的复合。通过对换实现对排列的排序,相当于将若干对换与排列进行复合,得到恒等映射。
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
n−1次对换实现排序。
pf:case 1:
n
=
1
n=1
n=1时,显然成立。
case 2: 假设对于 1 , 2 , ⋯ , n − 1 1,2,\cdots,n-1 1,2,⋯,n−1命题成立。
n − 1 n-1 n−1次对换的存在性: ( 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) (anan−1)(an−1an−2)⋯(a3a2)(a2a1)(a1,a2⋯an)=(1)。
n
−
1
n-1
n−1的最小性:对于任意的
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)(a1a2⋯an)=(a1a2⋯ai−1aj⋯an)(aiai+1⋯aj−1).
由归纳假设,仍至少需要
(
n
+
i
−
j
−
1
)
+
(
j
−
i
−
1
)
=
n
−
2
(n+i-j-1)+(j-i-1)=n-2
(n+i−j−1)+(j−i−1)=n−2次对换实现排序,加上
(
a
i
a
j
)
(a_ia_j)
(aiaj)一共
n
−
1
n-1
n−1次。
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=(a1a2⋯ar)⋅(b1b2⋯bs)⋯(c1c2⋯ct),那么至少需要
(
r
−
1
)
+
(
s
−
1
)
+
⋯
(
t
−
1
)
(r-1)+(s-1)+\cdots (t-1)
(r−1)+(s−1)+⋯(t−1)次对换才能实现排序。
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)(a1a2⋯ar)(b1b2⋯bs)=(a1a2⋯arb1b2⋯bs)可知,跨循环的对换对实现排序没有帮助。结合Lemma立即完成对Th的证明。
因此,对于一个排列 p p p,我们先对其进行循环分解,设得到的循环个数为 l l l,我们至少需要 n − l n-l n−l次对换才能实现对 p p p的排序。