“
置 おけ 换”
重定 しげさだ 向 むかい 至 いたる 此。关于
化学 かがく 中 ちゅう 的 てき 置 おけ 换,请见“
置 おけ 换反应”。
“Permutation”的 てき 各地 かくち 常用 じょうよう 名称 めいしょう 中国 ちゅうごく 大 だい 陆排列 はいれつ 台湾 たいわん 排列 はいれつ 、置 おけ 换 港 みなと 澳排列 はいれつ 日本 にっぽん 置 おけ 换
P(3,3)=6
排列 はいれつ (英 えい 语:Permutation )或 ある 置 おけ 换是 ぜ 将 しょう 相 しょう 异对象 かたど 或 ある 符号 ふごう 根 ね 据 すえ 确定的 てき 顺序重 じゅう 排 はい 。每 まい 个顺序 じょ 都 と 称 しょう 作 さく 一 いち 个排列 はいれつ [ 注 ちゅう 1] 。例 れい 如,从一到 いた 六 ろく 的 てき 数字 すうじ 有 ゆう 720种排列 はいれつ ,对应于由这些数字 すうじ 组成的 てき 所有 しょゆう 不 ふ 重 じゅう 复亦不 ふ 阙漏的 てき 序列 じょれつ ,例 れい 如"4, 5, 6, 1, 2, 3" 与 あずか 1, 3, 5, 2, 4, 6 。
置 おけ 换(排列 はいれつ )的 てき 广义概念 がいねん 在 ざい 不同 ふどう 语境下 か 有 ゆう 不同 ふどう 的 てき 形式 けいしき 定 てい 义:
在 ざい 集合 しゅうごう 论中 ちゅう ,一 いち 个集合 しゅうごう 的 てき 置 おけ 换是从该集合 しゅうごう 映 うつ 至 いたり 自身 じしん 的 てき 双 そう 射 い ;在 ざい 有限 ゆうげん 集 しゅう 的 てき 情 じょう 况,便 びん 与 あずか 上述 じょうじゅつ 定 てい 义一致 いっち 。
在 ざい 组合数学 すうがく 中 なか ,置 おけ 换一词的传统意义是一个有序序列,其中元素 げんそ 不 ふ 重 じゅう 复,但 ただし 可能 かのう 有 ゆう 阙漏。例 れい 如1,2,4,3 可 か 以称为1,2,3,4,5,6 的 てき 一 いち 个置换,但 ただし 是 ぜ 其中不 ふ 含5,6 。此时通常 つうじょう 会 かい 标明为“从n个对象 ぞう 取 と r个对象 ぞう 的 てき 置 おけ 换”。
一 いち 个集合 しゅうごう 置 おけ 换为从该集合 しゅうごう 映 うつ 至 いたり 自身 じしん 的 てき 双 そう 射 い 函数 かんすう
σ しぐま
:
S
⟶
∼
S
.
{\displaystyle \sigma :S\ {\stackrel {\sim }{\longrightarrow }}\ S.}
恒等 こうとう 置 おけ 换的定 てい 义为置 おけ 换
σ しぐま
{\displaystyle \sigma }
使 つかい 得 とく 对所有 しょゆう
x
∈
X
{\displaystyle x\in X}
,
σ しぐま
(
x
)
=
x
{\displaystyle \sigma (x)=x}
。
所有 しょゆう 关于
n
{\displaystyle n}
个元素的 すてき 集合 しゅうごう
S
{\displaystyle S}
的 てき 置 おけ 换组成 なり 的 てき 集合 しゅうごう 构成对称群 ぐん
S
n
{\displaystyle S_{n}}
,其群 ぐん 运算 为函数 かんすう 的 てき 复合 。因 よし 此两个置换,
σ しぐま
{\displaystyle \sigma }
和 わ
τ たう
{\displaystyle \tau }
的 てき 积
π ぱい
=
σ しぐま
τ たう
{\displaystyle \pi =\sigma \tau }
的 てき 定 てい 义为
π ぱい
(
i
)
=
σ しぐま
(
ρ ろー
(
i
)
)
{\displaystyle \pi (i)=\sigma (\rho (i))}
两个置 おけ 换的复合一般 いっぱん 不 ふ 满足交换律 りつ :
τ たう
σ しぐま
≠
σ しぐま
τ たう
{\displaystyle \tau \sigma \neq \sigma \tau }
。
此节使用 しよう 置 おけ 换的传统定 てい 义。从
n
{\displaystyle n}
个相异元素 げんそ 中 ちゅう 取出 とりで
k
{\displaystyle k}
个元素 げんそ ,
k
{\displaystyle k}
个元素的 すてき 排列 はいれつ 数量 すうりょう 为:
P
k
n
=
n
!
(
n
−
k
)
!
{\displaystyle P_{k}^{n}={\frac {n!}{(n-k)!}}}
其中P 意 い 为Permutation(排列 はいれつ ),! 表示 ひょうじ 阶乘 运算。
以赛马 为例,有 ゆう 8匹 ひき 马参加 さんか 比 ひ 赛,玩家需要 じゅよう 在 ざい 彩 いろどり 票 ひょう 上 じょう 填 はま 入 にゅう 前 まえ 三胜出的马匹的号码,从8匹 ひき 马中取出 とりで 3匹 ひき 马来排 はい 前 まえ 3名 めい ,排列 はいれつ 数量 すうりょう 为:
P
3
8
=
8
!
(
8
−
3
)
!
=
336
{\displaystyle P_{3}^{8}={\frac {8!}{(8-3)!}}=336}
因 いん 为一共存 きょうぞん 在 ざい 336种可能 かのう 性 せい ,因 いん 此玩家 か 在 ざい 一次填入中中奖的概率应该是:
P
=
1
336
=
0.00298
{\displaystyle P={\frac {1}{336}}=0.00298}
不 ふ 过,中国 ちゅうごく 大 だい 陆的教科 きょうか 书则是 これ 把 わ 从n取 と k的 てき 情 じょう 况记作 さく
P
n
k
{\displaystyle P_{n}^{k}}
或 ある
A
n
k
{\displaystyle A_{n}^{k}}
(A代表 だいひょう Arrangement,即 そく 排列 はいれつ )。[ 1]
上面 うわつら 的 てき 例 れい 子 こ 是 ぜ 建立 こんりゅう 在 ざい 取出 とりで 元素 げんそ 不 ふ 重 じゅう 复出现状况。
从
n
{\displaystyle n}
个元素 げんそ 中 ちゅう 取出 とりで
k
{\displaystyle k}
个元素 げんそ ,
k
{\displaystyle k}
个元素 げんそ 可 か 以重复出现,这排列 はいれつ 数量 すうりょう 为:
U
k
n
=
n
k
{\displaystyle U_{k}^{n}=n^{k}}
[ 2]
以四 よん 星 ほし 彩 あや 为例,10个数字 すうじ 取 と 4个数字 すうじ ,因 いん 可能 かのう 重 じゅう 复所以 ゆえん 排列 はいれつ 数量 すうりょう 为:
U
4
10
=
10
4
=
10000
{\displaystyle U_{4}^{10}=10^{4}=10000}
这时的 てき 一次性添入中奖的概率就应该是:
P
=
1
10000
=
0.0001
{\displaystyle P={\frac {1}{10000}}=0.0001}
在 ざい 集合 しゅうごう 论与 あずか 抽象 ちゅうしょう 代数 だいすう 等 とう 领域中 ちゅう ,“置 おけ 换”一词被保留为集合(通常 つうじょう 是 ぜ 有限 ゆうげん 集 しゅう )到 いた 自身 じしん 的 てき 双 そう 射 い 的 てき 一 いち 个称呼 しょうこ 。例 れい 如对于从一到十的数字构成的集合,其置换将是 ぜ 从集合 しゅうごう
{
1
,
…
,
10
}
{\displaystyle \{1,\ldots ,10\}}
到 いた 自身 じしん 的 てき 双 そう 射 い 。因 よし 此,置 おけ 换是拥有相 しょう 同定 どうてい 义域与 あずか 上 うわ 域 いき 的 てき 函数 かんすう ,且其为双射的 しゃてき 。一个集合上的置换在函数合成运算下构成一个群 ぐん ,称 しょう 为对称群 ぐん 或 ある 置 おけ 换群。
以下 いか 仅考虑有限 げん 集 しゅう 上 じょう 的 てき 置 おけ 换(视为双 そう 射 い ),由 ゆかり 于
n
{\displaystyle n}
个元素的 すてき 有限 ゆうげん 集 しゅう 可 か 以一一 いち 对应到集合 しゅうごう
{
1
,
…
,
n
}
{\displaystyle \{1,\ldots ,n\}}
,有限 ゆうげん 集 しゅう 的 てき 置 おけ 换可以化约到形 がた 如 {1, ..., n} 的 てき 集合 しゅうごう 之 の 置 おけ 换。此时有 ゆう 两种表示法 ひょうじほう 。
第 だい 一 いち ,利用 りよう 矩 のり 阵符号 ふごう 将 しょう 自然 しぜん 排 はい 序 じょ 写 うつし 在 ざい 第 だい 一 いち 列 れつ ,而将置 おけ 换后的 てき 排 はい 序 じょ 写 うつし 在 ざい 第 だい 二 に 列 れつ 。例 れい 如:
[
1
2
3
4
5
2
5
4
3
1
]
{\displaystyle {\begin{bmatrix}1&2&3&4&5\\2&5&4&3&1\end{bmatrix}}}
表示 ひょうじ 集合 しゅうごう {1,2,3,4,5} 上 じょう 的 てき 置 おけ 换
s
:
s
(
1
)
=
2
,
s
(
2
)
=
5
,
s
(
3
)
=
4
,
s
(
4
)
=
3
,
s
(
5
)
=
1
{\displaystyle s:s(1)=2,s(2)=5,s(3)=4,s(4)=3,s(5)=1}
。
第 だい 二 に ,借 か 由 よし 置 おけ 换的相 しょう 继作用 よう 描述,这被称 しょう 为“轮换分解 ぶんかい ”。分解 ぶんかい 方式 ほうしき 如下:固定 こてい 置 おけ 换
s
{\displaystyle s}
。对任一 いち 元素 げんそ
x
{\displaystyle x}
,由 ゆかり 于集合 しゅうごう 有限 ゆうげん 而
s
{\displaystyle s}
是 ぜ 双 そう 射 い ,必存在 そんざい 正 せい 整数 せいすう
N
{\displaystyle N}
使 つかい 得 とく
s
N
(
x
)
=
x
{\displaystyle s^{N}(x)=x}
,故 こ 可 か 将 はた 置 おけ 换
s
{\displaystyle s}
对
x
{\displaystyle x}
的 まと 相 しょう 继作用 よう 表 ひょう 成 なり
(
x
s
(
x
)
s
2
(
x
)
⋯
s
m
−
1
(
x
)
)
{\displaystyle (x\;s(x)\;s^{2}(x)\cdots s^{m-1}(x))}
,其中
m
{\displaystyle m}
是 ぜ 满足
s
m
(
x
)
=
x
{\displaystyle s^{m}(x)=x}
的 てき 最小 さいしょう 正 せい 整数 せいすう 。
称 しょう 上述 じょうじゅつ 表 ひょう 法 ほう 为
x
{\displaystyle x}
在 ざい
s
{\displaystyle s}
下 した 的 てき 轮换 ,
m
{\displaystyle m}
称 しょう 为轮换的长度 。我 わが 们在此将轮换视作环状排列 はいれつ ,例 れい 如
(
a
1
a
2
a
3
⋯
a
m
)
{\displaystyle (a_{1}\;a_{2}\;a_{3}\cdots a_{m})}
与 あずか
(
a
m
a
1
a
2
⋯
a
m
−
1
)
{\displaystyle (a_{m}\;a_{1}\;a_{2}\cdots a_{m-1})}
是 ぜ 同一 どういつ 个轮换。由 よし 此可知 かち
x
{\displaystyle x}
在 ざい
s
{\displaystyle s}
下 した 的 てき 轮换 只 ただ 决定于
x
{\displaystyle x}
在 ざい
s
{\displaystyle s}
作用 さよう 下 か 的 てき 轨道,于是,任 にん 两个元素 げんそ
x
,
y
{\displaystyle x,y}
或 ある 给出同一 どういつ 个轮换,或 ある 给出不 ふ 交的轮换。
我 わが 们将轮换
(
x
1
⋯
x
m
)
{\displaystyle (x_{1}\;\cdots x_{m})}
理解 りかい 为一类特殊的置换[ 注 ちゅう 2] :仅须定 てい 义置换
s
{\displaystyle s}
为
s
:
x
1
↦
x
2
,
…
,
x
m
−
1
↦
x
m
,
x
m
↦
x
1
{\displaystyle s:x_{1}\mapsto x_{2},\ldots ,x_{m-1}\mapsto x_{m},x_{m}\mapsto x_{1}}
,而在其它元素 げんそ 上 じょう 定 てい 义为恒等 こうとう 映 うつ 射 い 。不 ふ 交的轮换在 ざい 函数 かんすう 合成 ごうせい 的 てき 意 い 义下可 か 相 しょう 交换。
因 いん 此我们可以将集合 しゅうごう {1, ..., n} 对一置换分解成不交轮换的合成,此分解 ぶんかい 若 わか 不 ふ 计顺序 じょ 则是唯一 ゆいいつ 的 てき 。例 れい 如前一 いち 个例子 こ 的 てき
s
{\displaystyle s}
就对应到 (1 2 5) (3 4) 或 ある (3 4) (1 2 5)。
轮换一是种特殊的置换。
如果给定
f
:
X
→
X
{\displaystyle f:X\rightarrow X}
是 これ
X
{\displaystyle X}
上 うえ 的 てき 一 いち 个置换,
A
{\displaystyle A}
为
X
{\displaystyle X}
上 うえ 的 てき 一 いち 个子集 しゅう 。
若 わか 有 ゆう
∃
A
⊂
X
,
A
=
{
x
1
,
x
2
,
⋯
,
x
l
}
{\displaystyle \exists A\subset X,A=\{x_{1},x_{2},\cdots ,x_{l}\}}
{
f
(
x
1
)
=
x
2
,
f
(
x
2
)
=
x
3
,
⋯
,
f
(
x
l
)
=
x
1
f
(
x
)
=
x
,
x
∉
A
{\displaystyle {\begin{cases}f(x_{1})=x_{2},f(x_{2})=x_{3},\cdots ,f(x_{l})=x_{1}\\f(x)=x,x\not \in A\end{cases}}}
则称
f
{\displaystyle f}
为一个轮换。
l
{\displaystyle l}
为轮换的长度。
在 ざい 上 うえ 节的置 おけ 换表法 ほう 中 ちゅう ,长度等 とう 于二的环状置换称为换位 ,这种环状置 おけ 换
(
x
y
)
{\displaystyle (x\;y)}
不 ふ 外 そと 是 ぜ 将 はた 元素 げんそ
x
,
y
{\displaystyle x,y}
交换,并保持 ほじ 其它元素 げんそ 不 ふ 变。对称群 ぐん 可 か 以由换位生成 せいせい 。
由 よし 于环状 じょう 置 おけ 换长度 ど 为
l
{\displaystyle l}
的 てき 置 おけ 换
C
{\displaystyle C}
可 か 分解 ぶんかい 为最少 さいしょう
k
=
l
−
1
{\displaystyle k=l-1}
个换位 い ,若 わか
k
{\displaystyle k}
为偶数 すう ,则
C
{\displaystyle C}
为偶换位 い ,否 いや 则
C
{\displaystyle C}
为奇 き 换位 。即 そく 环状置 おけ 换的长度为奇数 すう ,该置换为偶换位 い ;环状置 おけ 换的长度为偶数 すう ,该置换为奇 き 换位 。
由 よし 此可定 てい 义任一置换的奇偶性,并可证明:一个置换是偶换位的充要条件是它可以由偶数个换位生成。偶换位 い 在 ざい 置 おけ 换群中 ちゅう 构成一 いち 个正 せい 规子群 ぐん ,称 しょう 为交错群 ぐん 。
某 ぼう 些旧课本将 はた 置 おけ 换视为变量 りょう 值的赋值 。在 ざい 计算机 つくえ 科学 かがく 中 なか ,这就是 ぜ 将 はた 值
1, 2, ..., n
赋予变量
x 1 , x 2 , ..., x n
的 てき 赋值运算子 こ ,并要求 ようきゅう 每 ごと 个值只 ただ 能 のう 赋予一 いち 个变量 りょう 。
赋值/代入 だいにゅう 的 てき 差 さ 别表明 ひょうめい 函数 かんすう 式 しき 编程与 あずか 指令 しれい 式 しき 编程之 これ 差 さ 异。纯粹的 てき 函数 かんすう 式 しき 编程并不提供 ていきょう 赋值机 つくえ 制 せい 。现今数学 すうがく 的 てき 惯例是 ぜ 将 はた 置 おけ 换看作 さく 函数 かんすう ,其间运算看 み 作 さく 函数 かんすう 合成 ごうせい ,函数 かんすう 式 しき 编程也类似 に 。就赋值语言 げん 的 てき 观点,一个代入是将给定的值“同 どう 时”重 じゅう 排 はい ,这是个有名 めい 的 てき 问题。
(2,5,1,4,3,6)的 てき 置 おけ 换图
取 と 一 いち 个无向 むこう 图 G ,将 はた 图G 的 てき n 个顶点 标记v 1 ,...,v n ,对应一 いち 个置换( s(1) s(2) ... s(n ) ),当 とう 且仅当 とう s(i ) < s(j ) 而 i > j ,则图的 てき v i 和 わ v j 相 あい 连,这样的 てき 图称为置换图。
置 おけ 换图的 てき 补图 必是置 おけ 换图。
多数 たすう 计算器 き 都 みやこ 有 ゆう 个计算 さん 置 おけ 换数的 てき nPr 键。然 しか 而此键在一些最先进的桌上型机种中却被隐藏了。例 れい 如:在 ざい TI-83 中 ちゅう ,按 MATH、三 さん 次 じ 右 みぎ 键、再 さい 按二。在 ざい 卡西欧 せいおう 的 てき 图形计算机 つくえ 中 ちゅう ,按 OPTN,一 いち 次 じ 右 みぎ 键(F6)、PROB(F3)、nPr(F2)。
多数 たすう 试算表 ひょう 软件都 と 有 ゆう 函 はこ 式 しき PERMUT(Number ,Number chosen ),用 よう 以计算 さん 置 おけ 换。Number 是 ぜ 描述对象数量 すうりょう 的 てき 一 いち 个整数 すう ,Number chosen 是 ぜ 描述每 ごと 个置换中所 しょ 取 と 对象数 すう 的 てき 整数 せいすう 。
#include <iostream>
using namespace std ;
bool arrsame ( int * arr , int len , int num ) {
int i ;
for ( i = 0 ; i < len ; i ++ )
if ( arr [ i ] == num )
break ;
return i != len ;
}
bool next_perm ( int * perm , const int k , const int n ) {
int i = k - 1 ;
do
perm [ i ] ++ ;
while ( arrsame ( perm , i , perm [ i ]) || ( perm [ i ] >= n && i -- ));
if ( perm [ 0 ] >= n )
return 0 ;
for ( int num = 0 , seat = i + 1 ; seat < k ; num ++ )
if ( ! arrsame ( perm , i + 1 , num ))
perm [ seat ++ ] = num ;
return 1 ;
}
int main () {
int n , k ;
cout << "perm(n,k):" << endl ;
cin >> n >> k ;
if ( n < k || k <= 0 )
return 0 ;
int * perm = new int [ k ];
for ( int i = 0 ; i < k ; i ++ )
perm [ i ] = i ;
do
for ( int i = 0 ; i < k ; cout << (( ++ i < k ) ? ',' : '\n' ))
cout << perm [ i ] + 1 ;
while ( next_perm ( perm , k , n ));
delete [] perm ;
return 0 ;
}
#include <bits/stdc++.h>
using namespace std ;
struct prem {
int len ;
vector < int > used , position ;
function < void ( vector < int >& ) > action ;
prem ( int l = 0 , function < void ( vector < int >& ) > a = []( vector < int >& position ) {}) : len ( l ), used ( l , -1 ), position ( l ), action ( a ) {}
void run ( int now = -1 ) {
if ( now == len - 1 ) {
action ( position );
return ;
}
int next = now + 1 ;
for ( int i = 0 ; i < len ; i ++ ) {
if ( used [ i ] == -1 ) {
used [ i ] = next ;
position [ next ] = i ;
run ( next );
used [ i ] = -1 ;
}
}
}
};
int main () {
ios :: sync_with_stdio ( false ), cin . tie ( 0 );
int len = 4 ;
prem p ( len , [ & ]( vector < int >& p ) {
for ( int i = 0 ; i < len ; i ++ ) {
cout << p [ i ] << " " ;
}
cout << endl ;
});
p . run ();
return 0 ;
}
import sys
def perm ( dim , num ):
if not 0 <= num <= dim :
print ( 'It must be that 0 <= num <= dim!' , flush = True , file = sys . stderr )
return []
result = []
xstack = []
arr = []
xset = set ( range ( dim , 0 , - 1 ))
xstack . append (( arr , xset ))
while len ( xstack ):
theArr , theSet = xstack . pop ()
for theInt in theSet :
newSet = theSet . copy ()
newSet . remove ( theInt )
newArr = theArr . copy ()
newArr . append ( theInt )
if num == len ( newArr ):
result . append ( newArr )
else :
xstack . append (( newArr , newSet ))
return result
^ 对于不 ふ 排 はい 序 じょ 的 てき 情 じょう 形 がた ,请见条目 じょうもく 组合 。
^ 可 か 递置换
^ 普通 ふつう 高 だか 中 ちゅう 教科 きょうか 书 数学 すうがく 选择性 せい 必修 ひっしゅう 第 だい 三 さん 册 さつ (A版 ばん ) . 北京 ぺきん 市 し 海 うみ 淀 よど 区 く 中 ちゅう 关村南大 みなみおお 街 がい 17号 ごう 院 いん 1号 ごう 楼 ろう : 人民 じんみん 教育 きょういく 出版 しゅっぱん 社 しゃ . : 17 [2024-03-30 ] . ISBN 978-7-107-34598-2 .
^ 組合 くみあい 數學 すうがく ─算法 さんぽう 與 あずか 分析 ぶんせき ─. 九 きゅう 章 しょう 出版 しゅっぱん 社 しゃ . : 29. OCLC:44527392
Miklos Bona. "Combinatorics of Permutations", Chapman Hall-CRC, 2004. ISBN 978-1-58488-434-7 .
Donald Knuth. The Art of Computer Programming , Volume 4: Generating All Tuples and Permutations , Fascicle 2, first printing. Addison-Wesley, 2005. ISBN 978-0-201-85393-3 .
Donald Knuth. The Art of Computer Programming , Volume 3: Sorting and Searching , Second Edition. Addison-Wesley, 1998. ISBN 978-0-201-89685-5 . Section 5.1: Combinatorial Properties of Permutations, pp.11–72.