特定の順列を見つける方法
順列の問題で、ある順列が何番目にあるかを考えることは意味ある問題である。
例1 A、B、C の3個の異なったものを並べる順列の数は、3!=6 (通り)ある。
実際に、それらを求めれば、
ABC、ACB、BAC、BCA、CAB、CBA
である。
ここで、辞書式配列とは、 各単語をアルファベットの順番に並べたものをいい、上記の
6個の単語を、辞書式に並べて番号をつければ、下表のようになる。
1 | 2 | 3 | 4 | 5 | 6 |
ABC | ACB | BAC | BCA | CAB | CBA |
従って、上の表から、BAC は、ABCから数えて、3番目の単語で、また、4番目の単語は、
BCA となる。
使われる文字の個数が少ないうちは、上記のように、全ての順列を辞書式に書き出して考
えればよいが、文字の個数がある程度大きい場合は、計算によって求めざるを得ない。
例2 A、B、C、D、E の5個の異なったものを並べる順列を考え、それらを辞書式に並べる。
このとき、CBEDA は何番目の単語だろうか。また、88番目の単語は何であろうか。
(解) A**** のタイプの単語は、4!=24 (通り)
B**** のタイプの単語は、4!=24 (通り)
CA*** のタイプの単語は、3!=6 (通り)
CBA** のタイプの単語は、2!=2 (通り)
CBD** のタイプの単語は、2!=2 (通り)
CBE** のタイプの単語は、CBEAD、 CBEDA の2通り。
従って、CBEDA は、24+24+6+2+2+2=60 (番目)
上と同様にして、
A**** のタイプの単語は、4!=24 (通り)
B**** のタイプの単語は、4!=24 (通り)
C**** のタイプの単語は、4!=24 (通り)
DA*** のタイプの単語は、3!=6 (通り)
DB*** のタイプの単語は、3!=6 (通り)
DCA** のタイプの単語は、2!=2 (通り)
DCB** のタイプの単語は、2!=2 (通り)
このとき、24+24+24+6+6+2+2=88 なので、88番目の単語は、
DCB** のタイプの単語の最後のもの、すなわち、DCBEA である。
このような求め方は、教科書・参考書・問題集に通常あるもので、私自身も、この解法以外
に知らなかった。
ところが、最近、このような問題に対して、非常に面白い解法が存在することを知った。
1 | 2 | 3 | 4 | 5 | 6 |
ABC | ACB | BAC | BCA | CAB | CBA |
文字の個数が3個の場合について、説明しよう。
まず、1番目、2番目、・・・、6番目という数を、0!を含む、2(=3−1)以下の数の階乗の
倍数に分解する。ただし、0!(=1)の係数は、常に 1 になるようにする。
1=0・2!+0・1!+1・0!
2=0・2!+1・1!+1・0!
3=1・2!+0・1!+1・0!
4=1・2!+1・1!+1・0!
5=2・2!+0・1!+1・0!
6=2・2!+1・1!+1・0!
次に、各係数に1をプラス(0!の係数はそのまま)して、単語を確定するための序数を作る。
たとえば、5=2・2!+0・1!+1・0!から、5番目の単語を求める序数
3(=2+1)、1(=0+1)、1
が得られる。次のようにして、5番目の単語が求められる。
使用可能文字 | 序数 | 使用する文字 |
A、B、C | 3 | C |
A、B | 1 | A |
B | 1 | B |
(← 3番目の文字 C を使用)
(← 上で、C が使われたので、使える文字は、A、B)
したがって、求める単語は、 CAB となる。
この解法を用いれば、5個の文字の場合についても、次のように解くことができる。
まず、 88=3・4!+2・3!+1・2!+1・1!+1・0! なので、88番目の単語を求
める序数は、4、3、2、2、1 である。
使用可能文字 | 序数 | 使用する文字 |
A、B、C、D、E | 4 | D |
A、B、C、E | 3 | C |
A、B、E | 2 | B |
A、E | 2 | E |
A | 1 | A |
左の表から、求める単語は、
DCBEA
で、これは、先の結果と一致する。
上記の解法は、例2における計算の仕組みを整理したもので、美しい解法として、幾ばくか
の魅力を感じるものである。
読者のために、練習問題を残しておこう。
A、B、C、D、E、F、G、H の8個の異なったものを並べる順列を考え、それらを辞書式に並
べる。このとき、12345番目の単語は何であろうか。
(答)CEAHDFBG
(追記) 当HPがいつもお世話になっているHN「攻略法」さんに解いていただきました。
(平成22年10月14日付け)
(解) 7!=5040 、6!=720 、 5!=120 、4!=24 、3!=6 、2!=1
なので、 12345−7!×2=2265
2265−6!×3=105
105−5!×0=105
105−4!×4=9
9−3!×1=3
3−2!×1=1
1−1!×0=1
1−0!×1=0
よって、
12345=2・7!+3・6!+0・5!+4・4!+1・3!+1・2!+0・1!+1・0! なの
で、12345番目の単語を求める序数は、3、4、1、5、2、2、1、1 である。
使用可能文字 | 序数 | 使用する文字 |
A、B、C、D、E、F、G、H | 3 | C |
A、B、D、E、F、G、H | 4 | E |
A、B、D、F、G、H | 1 | A |
B、D、F、G、H | 5 | H |
B、D、F、G | 2 | D |
B、F、G | 2 | F |
B、G | 1 | B |
G | 1 | G |
左の表から、求める単語は、
CEAHDFBG
となる。
上記の計算で、12345を展開するときに、7!、6!、・・・ を順次計算して求めたが、
攻略法さんは次のようにして求められました。
階乗進数の各桁の値の求め方
n進法ならnで割っていくが、階乗なので、1、2、3、4、5、・・・ となる。
0を1番とするので、 12345-1=12344 で、
12344÷1=12344 … 0
12344÷2=6172 … 0
6172÷3=2057 … 1
2057÷4=514 … 1
514÷5=102 … 4
102÷6=17 … 0
17÷7=2 … 3
∴ {2 3 0 4 1 1 0 0} より、
12345 - 1 = 2*7! + 3*6! + 0*5! + 4*4! + 1*3! + 1*2! + 0*1! + 0*0!
すなわち、 12345 = 2*7! + 3*6! + 0*5! + 4*4! + 1*3! + 1*2! + 0*1!
+ 1*0!
よって、0!以外の係数に各々1を加えて、12345番目の単語を求める序数は、
{3 4 1 5 2 2 1 1}
となる。
(コメント) 解答をお寄せいただいた攻略法さんに感謝します。
(参考文献:J.A.H.ハンター、J.S.マダチー 著 田中 勇 訳
数学レクリエーション (白揚社))