fbpx
维基百科

置換

排列(英語:Permutation)是將相異物件或符號根據確定的順序重排。每個順序都稱作一個排列[注 1]。例如,從一到六的數字有720種排列,對應於由這些數字組成的所有不重複亦不闕漏的序列,例如"4, 5, 6, 1, 2, 3" 與1, 3, 5, 2, 4, 6

P(3,3)=6

置換(排列)的廣義概念在不同語境下有不同的形式定義:

  • 集合論中,一個集合的置換是從該集合映至自身的雙射;在有限集的情況,便與上述定義一致。
  • 組合數學中,置換一詞的傳統意義是一個有序序列,其中元素不重複,但可能有闕漏。例如1,2,4,3可以稱為1,2,3,4,5,6的一個置換,但是其中不含5,6。此時通常會標明為「從n個對象取r個對象的置換」。

置換數的计算

此節使用置換的傳統定義。从 个相異元素中取出 个元素, 个元素的排列數量為:

 

其中P意为Permutation(排列),!表示階乘運算。

賽馬為例,有8匹马参加比赛,玩家需要在彩票上填入前三胜出的马匹的号码,從8匹馬中取出3匹馬來排前3名,排列數量為:

 

因为一共存在336种可能性,因此玩家在一次填入中中奖的概率应该是:

 

不過,中國大陸的教科書則是把從n取k的情況記作  (A代表Arrangement,即排列)。

重複置換

上面的例子是建立在取出元素不重複出現狀況。

 个元素中取出 个元素, 个元素可以重复出现,這排列數量為:

 [1]

四星彩為例,10個數字取4個數字,因可能重複所以排列數量為:

 

这时的一次性添入中奖的概率就应该是:

 

抽象代數

集合論抽象代數等領域中,「置換」一詞被保留為集合(通常是有限集)到自身的雙射的一個稱呼。例如對於從一到十的數字構成的集合,其置換將是從集合   到自身的雙射。因此,置換是擁有相同定義域與上域的函數,且其為雙射的。一個集合上的置換在函數合成運算下構成一個,稱為對稱群或置換群。

符號

以下僅考慮有限集上的置換(視為雙射),由於   個元素的有限集可以一一對應到集合  ,有限集的置換可以化約到形如 {1, ..., n} 的集合之置換。此時有兩種表示法。

第一,利用矩陣符號將自然排序寫在第一列,而將置換後的排序寫在第二列。例如:

 

表示集合 {1,2,3,4,5} 上的置換  

第二,藉由置換的相繼作用描述,這被稱為「轮换分解」。分解方式如下:固定置換  。對任一元素  ,由於集合有限而   是雙射,必存在正整數   使得  ,故可將置換    的相繼作用表成  ,其中   是滿足   的最小正整數。

稱上述表法為    下的轮换  稱為轮换的長度。我們在此將轮换視作環狀排列,例如

 
 

是同一個轮换。由此可知    下的轮换只決定於    作用下的軌道,於是,任兩個元素   或給出同一個轮换,或給出不交的轮换。

我們將轮换   理解為一類特殊的置換[注 2]:僅須定義置換   ,而在其它元素上定義為恆等映射。不交的轮换在函數合成的意義下可相交換。

因此我們可以將集合 {1, ..., n} 對一置換分解成不交轮换的合成,此分解若不計順序則是唯一的。例如前一個例子的   就對應到 (1 2 5) (3 4) 或 (3 4) (1 2 5)。

輪換

輪換一是種特殊的置換。

如果給定  上的一個置換,  上的一個子集。

若有

 

 

則稱  為一個輪換。  為輪換的長度。

特殊置換

在上節的置换表法中,長度等於二的環狀置换稱為換位,這種環狀置换   不外是將元素   交換,並保持其它元素不變。對稱群可以由換位生成。

由於環狀置換長度為 的置換 可分解為最少 個換位,若 為偶數,則 偶換位,否則 奇換位。即環狀置換的長度為奇數,該置換為偶換位;環狀置換的長度為偶數,該置換為奇換位

由此可定義任一置換的奇偶性,並可證明:一個置換是偶換位的充要條件是它可以由偶數個換位生成。偶换位在置換群中構成一個正規子群,稱為交错群

計算理論中的置換

某些舊課本將置換視為變數值的賦值。在計算機科學中,這就是將值

1, 2, ..., n

賦予變數

x1, x2, ..., xn

的賦值運算子,並要求每個值只能賦予一個變數。

賦值/代入的差別表明函數式編程指令式編程之差異。純粹的函數式編程並不提供賦值機制。現今數學的慣例是將置換看作函數,其間運算看作函數合成,函數式編程也類似。就賦值語言的觀點,一個代入是將給定的值「同時」重排,這是個有名的問題。

置換圖

 
(2,5,1,4,3,6)的置換圖

取一個無向G,將圖Gn頂點標記v1,...,vn,對應一個置換( s(1) s(2) ... s(n) ),若且唯若s(i) < s(j) 而 i > j,則圖的vivj相連,這樣的圖稱為置換圖。

置換圖的補圖必是置換圖。

使用計算器

多數計算器都有個計算置換數的 nPr 鍵。然而此鍵在一些最先進的桌上型機種中卻被隱藏了。例如:在 TI-83 中,按 MATH、三次右鍵、再按二。在卡西歐的圖形計算機中,按 OPTN,一次右鍵(F6)、PROB(F3)、nPr(F2)。

試算表語法

多數試算表軟件都有函式 PERMUT(NumberNumber 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(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; } 

python演算範例

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 

注释

  1. ^ 對於不排序的情形,請見條目組合
  2. ^ 可遞置換

參考文獻

  1. ^ 組合數學 ─算法與分析─. 九章出版社. : 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.

外部連結

  • 許多排列組合問題,附詳解。 (页面存档备份,存于互联网档案馆(英文)
  • 置換及圖論問題 (页面存档备份,存于互联网档案馆(英文)

置換, 此條目需要补充更多来源, 2018年9月4日, 请协助補充多方面可靠来源以改善这篇条目, 无法查证的内容可能會因為异议提出而移除, 致使用者, 请搜索一下条目的标题, 来源搜索, 网页, 新闻, 书籍, 学术, 图像, 以检查网络上是否存在该主题的更多可靠来源, 判定指引, 置换, 重定向至此, 關於化学中的置换, 請見, 置换反应, 排列, 英語, permutation, 是將相異物件或符號根據確定的順序重排, 每個順序都稱作一個排列, 例如, 從一到六的數字有720種排列, 對應於由這些數字組成的所有. 此條目需要补充更多来源 2018年9月4日 请协助補充多方面可靠来源以改善这篇条目 无法查证的内容可能會因為异议提出而移除 致使用者 请搜索一下条目的标题 来源搜索 置換 网页 新闻 书籍 学术 图像 以检查网络上是否存在该主题的更多可靠来源 判定指引 置换 重定向至此 關於化学中的置换 請見 置换反应 排列 英語 Permutation 是將相異物件或符號根據確定的順序重排 每個順序都稱作一個排列 注 1 例如 從一到六的數字有720種排列 對應於由這些數字組成的所有不重複亦不闕漏的序列 例如 4 5 6 1 2 3 與1 3 5 2 4 6 P 3 3 6 置換 排列 的廣義概念在不同語境下有不同的形式定義 在集合論中 一個集合的置換是從該集合映至自身的雙射 在有限集的情況 便與上述定義一致 在組合數學中 置換一詞的傳統意義是一個有序序列 其中元素不重複 但可能有闕漏 例如1 2 4 3可以稱為1 2 3 4 5 6的一個置換 但是其中不含5 6 此時通常會標明為 從n個對象取r個對象的置換 目录 1 置換數的计算 2 重複置換 3 抽象代數 4 符號 5 輪換 6 特殊置換 7 計算理論中的置換 8 置換圖 9 使用計算器 10 試算表語法 11 C 演算範例 11 1 迴圈法 11 2 遞迴法 12 python演算範例 13 注释 14 參考文獻 15 外部連結置換數的计算 编辑此節使用置換的傳統定義 从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 即排列 重複置換 编辑上面的例子是建立在取出元素不重複出現狀況 從n displaystyle n 个元素中取出k displaystyle k 个元素 k displaystyle k 个元素可以重复出现 這排列數量為 U k n n k displaystyle U k n n k 1 以四星彩為例 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次对称群 以下僅考慮有限集上的置換 視為雙射 由於 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 amp 2 amp 3 amp 4 amp 5 2 amp 5 amp 4 amp 3 amp 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賦予變數 x1 x2 xn的賦值運算子 並要求每個值只能賦予一個變數 賦值 代入的差別表明函數式編程與指令式編程之差異 純粹的函數式編程並不提供賦值機制 現今數學的慣例是將置換看作函數 其間運算看作函數合成 函數式編程也類似 就賦值語言的觀點 一個代入是將給定的值 同時 重排 這是個有名的問題 置換圖 编辑 2 5 1 4 3 6 的置換圖 取一個無向圖G 將圖G的n個頂點標記v1 vn 對應一個置換 s 1 s 2 s n 若且唯若s i lt s j 而 i gt j 則圖的vi和vj相連 這樣的圖稱為置換圖 置換圖的補圖必是置換圖 使用計算器 编辑多數計算器都有個計算置換數的 nPr 鍵 然而此鍵在一些最先進的桌上型機種中卻被隱藏了 例如 在 TI 83 中 按 MATH 三次右鍵 再按二 在卡西歐的圖形計算機中 按 OPTN 一次右鍵 F6 PROB F3 nPr F2 試算表語法 编辑多數試算表軟件都有函式 PERMUT Number Number chosen 用以計算置換 Number 是描述物件數量的一個整數 Number chosen 是描述每個置換中所取物件數的整數 C 演算範例 编辑迴圈法 编辑 include lt iostream gt using namespace std bool arrsame int arr int len int num int i for i 0 i lt 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 gt n amp amp i if perm 0 gt n return 0 for int num 0 seat i 1 seat lt k num if arrsame perm i 1 num perm seat num return 1 int main int n k cout lt lt perm n k lt lt endl cin gt gt n gt gt k if n lt k k lt 0 return 0 int perm new int k for int i 0 i lt k i perm i i do for int i 0 i lt k cout lt lt i lt k n cout lt lt perm i 1 while next perm perm k n delete perm return 0 遞迴法 编辑 include lt bits stdc h gt using namespace std struct prem int len vector lt int gt used position function lt void vector lt int gt amp gt action prem int l 0 function lt void vector lt int gt amp gt a vector lt int gt amp 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 lt 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 amp vector lt int gt amp p for int i 0 i lt len i cout lt lt p i lt lt cout lt lt endl p run return 0 python演算範例 编辑import sys def perm dim num if not 0 lt num lt dim print It must be that 0 lt num lt 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注释 编辑 對於不排序的情形 請見條目組合 可遞置換參考文獻 编辑 組合數學 算法與分析 九章出版社 29 OCLC 44527392Miklos 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 外部連結 编辑許多排列組合問題 附詳解 页面存档备份 存于互联网档案馆 英文 置換及圖論問題 页面存档备份 存于互联网档案馆 英文 取自 https zh wikipedia org w index php title 置換 amp oldid 74532138, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。