Derangementは\(1, 2, \dots, n - 1, n\)を要素とする順列のうち、すべての\(i\)番目の要素が\(i\)と等しくない順列のこと(不動点の個数が\(0\))
たとえば\(1, 2, 3\)を要素とする順列は以下の6通りのものがあります(不動点に下線を引いています)
- \(\underline 1, \underline 2, \underline 3\)
- \(\underline 1, 3, 2\)
- \(2, 1, \underline 3\)
- \(2, 3, 1\)
- \(3, 1, 2\)
- \(3, \underline 2, 1\)
この内、Derangementは以下の2通りになります
- \(2, 3, 1\)
- \(3, 1, 2\)
日本語では攪乱順列とか完全順列とか言うらしいです
この個数を求めるのはモンモール問題と呼ばれるらしくて(?)、Derangementの個数はモンモール数とかsubfactorial \(!n\)とか呼ばれるらしいです
以下ではDerangementの個数とか確率とかを求めていきます
解法1 - 包除原理
\(i\)番目の要素が\(i\)でない順列の集合を\(A_i\)とします
この時subfactorialは\(!n = \Biggl|\bigcap_i^n A_i\Biggr|\)と表すことができる
和集合や積集合の要素数は包除原理を使うと簡単に求めることができる
包除原理
二つの集合の和集合の大きさを求めるときに使う以下の式の\(n\)個の集合での一般化
\(|A \cup B| = |A| + |B| - |A \cap B|\)
集合の数が増えた時には、組み合わせる集合を増やしながら足すのと引くのとを交互に繰り返していけばよい
\(|A \cup B \cup C| = |A| + |B| + |C| - |A \cap B| - |A \cap C| - |B \cap C| + |A \cap B \cap C|\)
集合が\(n\)個の場合
$$\Biggl|\bigcup_{i=1}^n A_i\Biggr| = \sum_{k = 1}^{n} (-1)^{k+1} \left( \sum_{1 \leq i_{1} < \cdots < i_{k} \leq n} \left| A_{i_{1}} \cap \cdots \cap A_{i_{k}} \right| \right)$$
積集合を求める場合にはド・モルガンの法則より全体集合を\(S\)と置いて
$$\Biggl|\bigcap_{i=1}^n A_i\Biggr| = \Biggl|\overline {\bigcup_{i=1}^n \overline{ A_i}}\Biggr| = |S| - \sum_{k = 1}^{n} (-1)^{k+1} \left( \sum_{1 \leq i_{1} < \cdots < i_{k} \leq n} \left| \overline{A_{i_{1}}} \cap \cdots \cap \overline{A_{i_{k}}} \right| \right)$$
ちなみに昨日の記事で書いたオイラーのトーシェント関数も包除原理で求められるらしいです
以下の記事のApplicationsのところにいろいろと書いてあります
subfactorialの導出
\(i\)番目の要素が\(i\)でない順列の集合を\(A_i\)と置いた時包除原理とド・モルガンの法則より\(!n = \Biggl|\bigcap_i^n A_i\Biggr| = |S| - \sum_{k = 1}^{n} (-1)^{k+1} \left( \sum_{1 \leq i_{1} < \cdots < i_{k} \leq n} \left| \overline{A_{i_{1}}} \cap \cdots \cap \overline{A_{i_{k}}} \right| \right)\)
このとき\(\sum_{1 \leq i_{1} < \cdots < i_{k} \leq n} \left| \overline{A_{i_{1}}} \cap \cdots \cap \overline{A_{i_{k}}} \right|\)は不動点が\(k\)個以上である順列の集合なので
\(\sum_{k = 1}^{n} (-1)^{k+1} \left( \sum_{1 \leq i_{1} < \cdots < i_{k} \leq n} \left| \overline{A_{i_{1}}} \cap \cdots \cap \overline{A_{i_{k}}} \right| \right) = \sum_{k = 1}^{n} (-1)^{k+1} \binom{n}{k} (n - k)!\)
二項係数\( \binom{n}{k}=\frac{n!}{k!(n - k)!}\)を代入すると
\(\sum_{k = 1}^{n} (-1)^{k+1} \binom{n}{k} (n - k)! = \sum_{k = 1}^{n} (-1)^{k+1} \frac{n!}{k!(n - k)!} (n - k)! = \sum_{k = 1}^{n} (-1)^{k+1} \frac{n!}{k!}\)
以上より\(|S| = n!\)なので\(!n = n! - n!\sum_{k = 1}^{n} \frac{(-1)^{k+1} }{k!} = n!\sum_{k = 0}^{n} \frac{(-1)^{k} }{k!}\)
この結果からDerangementになる確率
$$P(n) = \frac{!n}{n!} = \sum_{k = 0}^{n} \frac{(-1)^{k} }{k!}$$ \(\lim_{n \to \infty}P(n)\)は\(e^x\)のマクローリン展開に\(x=-1\)を代入したものに等しいので、Derangementになる確率は以下のようになる
$$\lim_{n \to \infty}P(n)=\frac{1}{e}\approx36.8\%$$
解法2 - 漸化式
次のような漸化式がなりたつそうです(自力で導出できる気はしませんが
$$!n=(n-1)(!(n-1)+!(n-2))$$位置\(i=1\)に置くことができる要素は\(1\)以外の\(n-1\)通りあります
位置\(i=1\)に置いた要素を\(j\)としたとき、以下の2種類に場合分けします
- 位置\(j\)に\(i\)を置いた時(つまり\(i\)と\(j\)が入れ替わった状態になっている時)
- 残りの選び方は\(!(n-2)\)に等しい
- \(j\)の選び方が\((n-1)\)通りなので、全体では\((n-1)(!(n-2))\)
- 位置\(j\)に\(i\)以外を置いた時
- 選び方は\(!(n-1)\)に等しい
- \(j\)の選び方が\((n-1)\)通りなので、全体では\((n-1)(!(n-1))\)
以上より合計すると\(!n=(n-1)(!(n-1)+!(n-2))\)
この漸化式の一般項を求めるのは結構めんどくさいので以下の記事あたりを参考にしてください
最終的に包除原理で求めた結果と同じになります
イズミの数学>大学入試数学演習>完全順列[2004 東工大(後)]
combinatorics - I have a problem understanding the proof of Rencontres numbers (Derangements) - Mathematics Stack Exchange
この記事を書いたきっかけ
この辺のツイートを見てDerangementについて調べました
面白いツイートをありがとうございます
今日は学生がビール&発泡酒を5つ(=n)並べて利き酒をしていた。で、全部外してる学生がいたので確率を考えてみたら意外と難しかった。たぶん場合の数の列挙が必要でn=5が暗算の限界な感じ。でも、期待値を求めることで検算できて、n→∞で収束するので興味ある人は考えてみると面白いかも。
— Ryohei Sasano (@cacaho) October 3, 2014
利き酒の件、単なるモンモール問題では…?
— りすお@社二病 (@risuosan) October 3, 2014
モンモール数の話を読んでいて、漸化式の解き方がまったく思い出せないことに気づいた(´・ω・`) / 完全順列 - Wikipedia http://t.co/0bkEgKozE8
— 無限猿(id:sucrose)@10月病 (@Scaled_Wurm) 2014, 10月 3
この漸化式, 包して除するアレで出そうだなぁ.
— 進捗無くても煽らないで下さい (@Mi_Sawa) 2014, 10月 3