排列或置換是將相異物件或符號根據確定的順序重排。每個順序都稱作一個 zhcn 排列；zhtw 置換或排列； 對於不排序的情形，請見條目組合。。例如，從一到六的數字有 720 種排列，對應於由這些數字組成的所有不重複亦不闕漏的序列，例如 4 5 6 1 2 3 與 1 3 5 2 4 6。 置 換（排 列）的廣義概念在不同語境下有不同的形式定義： 在集合論中，一個集合的置換是從該集合映至自身的雙射；在有限集的情況，便與上述定義一致。 在組合數學中，置換一詞的傳統意義是一個有序序列，其中元素不重複，但可能有闕漏。例如 1243 可以稱為 123456 的一個置換，但是其中不含 56。此時通常會標明為「從 n 個物件取 r 個物件的置換」。 定義 一個集合置換為從該集合映至自身的雙射函式 sigma S stackrel simlongrightarrow S 恆等置換的定義為置換 sigma 使得對所有 x in X，sigma x x。 所有關於 n 個元素的集合 S 的置換組成的集合構成對稱群 S_n，其群運算為函式的複合。因此兩個置換，sigma 和 tau 的積 pi sigmatau 的定義為 pi i sigma rho i 兩個置換的複合一般不滿足交換律：tausigma neq sigmatau。 置換數的計算 此節使用置換的傳統定義。從 n 個相異元素中取出 k 個元素，k 個元素的排列數量為： P_kn frac nnk 其中 P 意為 Permutation（排列）， 表示階乘運算。 以賽馬為例，有 8 匹馬參加比賽，玩家需要在彩票上填入前三勝出的馬匹的號碼，從 8 匹馬中取出 3 匹馬來排前 3 名，排列數量為： P_38 frac 883336 因為一共存在 336 種可能性，因此玩家在一次填入中中獎的機率應該是： P frac 1336 000298 不過，中國大陸的教科書則是把從 n 取 k 的情況記作 Pk_n 或 Ak_n（A 代表 Arrangement，即排列）。 重複置換 上面的例子是建立在取出元素不重複出現狀況。 從 n 個元素中取出 k 個元素，k 個元素可以重複出現，這排列數量為： U_kn nk OCLC44527392 以四星彩為例，10 個數字取 4 個數字，因可能重複所以排列數量為： U_41010410000 這時的一次性添入中獎的機率就應該是： Pfrac 11000000001 抽象代數 在集合論與抽象代數等領域中，「置 換」一詞被保留為集合（通常是有限集）到自身的雙射的一個稱呼。例如對於從一到十的數字構成的集合，其置 換將是從集合 1 ldots 10 到自身的雙射。因此，置 換是擁有相同定義域與上域的函式，且其為雙射的。一個集合上的置 換在函式合成運算下構成一個群，稱為對稱群或置換群。 符號 以下僅考慮有限集上的置 換（視為雙射），由於 n 個元素的有限集可以一一對應到集合 1 ldots n，有限集的置 換可以化約到形如 1 n 的集合之置 換。此時有兩種表示法。 第一，利用矩陣符號將自然排序寫在第一列，而將置 換後的排序寫在第二列。例如： begin bmatrix 1 2 3 4 5 2 5 4 3 1end bmatrix 表示集合 12345 上的置 換 s s 12 s 25 s 34 s 43 s 51。 第二，藉由置 換的相繼作用描述，這被稱為「輪換分解」。分解方式如下：固定置 換 s。對任一元素 x，由於集合有限而 s 是雙射，必存在正整數 N 使得 sN xx，故可將置 換 s 對 x 的相繼作用表成 x s x s2 x cdots sm1 x，其中 m 是滿足 smx x 的最小正整數。 稱上述表法為 x 在 s 下的輪換， m 稱為輪換的長度。我們在此將輪換視作環狀排列，例如 a_1 a_2 a_3 cdots a_m 與 a_m a_1 a_2 cdots a_m1 是同一個輪換。由此可知 x 在 s 下的輪換隻決定於 x 在 s 作用下的軌道，於是，任兩個元素 x y 或給出同一個輪換，或給出不交的輪換。 我們將輪換 x_1 cdots x_m 理解為一類特殊的置 換可遞置 換：僅須定義置 換 s 為 s x_1 mapsto x_2 ldots x_m1 mapsto x_m x_m mapsto x_1，而在其它元素上定義為恆等對映。不交的輪換在函式合成的意義下可相交換。 因此我們可以將集合 1 n 對一置 換分解成不交輪換的合成，此分解若不計順序則是唯一的。例如前一個例子的 s 就對應到 1 2 5 3 4 或 3 4 1 2 5。 輪換 輪換一是種特殊的置換。 如果給定 fXrightarrow X 是 X 上的一個置換，A 為 X 上的一個子集。 若有 exists Asubset XAx_1x_2cdotsx_l begin cases f x_1x_2f x_2x_3cdotsf x_lx_1 f xxxnotin A end cases 則稱 f 為一個輪換。l 為輪換的長度。 特殊置換 在上節的置換表法中，長度等於二的環狀置換稱為換位，這種環狀置換 x y 不外是將元素 x y 交換，並保持其它元素不變。對稱群可以由換位生成。 由於環狀置換長度為 l 的置換 C 可分解為最少 kl1 個換位，若 k 為偶數，則 C 為偶換位，否則 C 為奇換位。即環狀置換的長度為奇數，該置換為偶換位；環狀置換的長度為偶數，該置換為奇換位。 由此可定義任一置換的奇偶性，並可證明：一個置換是偶換位的充要條件是它可以由偶數個換位生成。偶換位在置換群中構成一個正規子群，稱為交錯群。 計算理論中的置換 某些舊課本將置換視為變數值的賦值。在電腦科學中，這就是將值 1 2 n 賦予變數 x1 x2 xn 的賦值運運算元，並要求每個值只能賦予一個變數。 賦值 代入的差別表明函數語言程式設計與指令式程式設計之差異。純粹的函數語言程式設計並不提供賦值機制。現今數學的慣例是將置換看作函式，其間運算看作函式合成，函數語言程式設計也類似。就賦值語言的觀點，一個代入是將給定的值「同時」重排，這是個有名的問題。 置換圖 取一個無向圖 G，將圖 G 的 n 個頂點標記 v1vn，對應一個置換 s 1 s 2 s n ，若且唯若 s i s j 而 i j，則圖的 vi 和 vj 相連，這樣的圖稱為置換圖。 置換圖的補圖必是置換圖。 使用計算器 多數計算器都有個計算置換數的 nPr 鍵。然而此鍵在一些最先進的桌上型機種中卻被隱藏了。例如：在 TI83 中，按 MATH、三次右鍵、再按二。在卡西歐的圖形計算機中，按 OPTN，一次右鍵（F6）、PROB（F3）、nPr（F2）。 試算表語法 多數試算表軟體都有函式 PERMUT Number，Number chosen，用以計算置換。Number 是描述物件數量的一個整數，Number chosen 是描述每個置換中所取物件數的整數。 C 演算範例 迴圈法 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 nk 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 bitsstdch using namespace std struct prem int len vectorint used position functionvoid vectorint action prem int l 0 functionvoid vectorint a vectorint 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 iossync_with_stdio false cintie 0 int len 4 prem p len vectorint p for int i 0 i len i cout p i cout endl prun return 0 python 演算範例 import sys def perm dim num if not 0 num dim print It must be that 0 num dim flushTrue filesysstderr return result xstack arr xset set range dim 0 1 xstackappend arr xset while len xstack theArr theSet xstackpop for theInt in theSet newSet theSetcopy newSetremove theInt newArr theArrcopy newArrappend theInt if num len newArr resultappend newArr else xstackappend newArr newSet return result 註釋 參考文獻 Miklos Bona Combinatorics of Permutations Chapman HallCRC 2004 ISBN 9781584884347 Donald Knuth The Art of Computer Programming Volume 4 Generating All Tuples and Permutations Fascicle 2 first printing AddisonWesley 2005 ISBN 9780201853933 Donald Knuth The Art of Computer Programming Volume 3 Sorting and Searching Second Edition AddisonWesley 1998 ISBN 9780201896855 Section 51 Combinatorial Properties of Permutations pp1172 外部連結 許多排列組合問題，附詳解。 置換及圖論問題 Z Z Z