特定の順列を見つける方法                戻る

 順列の問題で、ある順列が何番目にあるかを考えることは意味ある問題である。

例1 A、B、C の3個の異なったものを並べる順列の数は、3!=6 (通り)ある。
  実際に、それらを求めれば、

        ABC、ACB、BAC、BCA、CAB、CBA

 である。

 ここで、辞書式配列とは、 各単語をアルファベットの順番に並べたものをいい、上記の
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 である。

 このような求め方は、教科書・参考書・問題集に通常あるもので、私自身も、この解法以外
に知らなかった。

 ところが、最近、このような問題に対して、非常に面白い解法が存在することを知った。

ABC ACB BAC BCA CAB CBA

 文字の個数が3個の場合について、説明しよう。

 まず、1番目、2番目、・・・、6番目という数を、0!を含む、2(=3−1)以下の数の階乗の
倍数に分解する。ただし、0!(=1)の係数は、常に 1 になるようにする。

   1=・2!+・1!+・0!
   2=・2!+・1!+・0!
   3=・2!+・1!+・0!
   4=・2!+・1!+・0!
   5=・2!+・1!+・0!
   6=・2!+・1!+・0!

次に、各係数に1をプラス(0!の係数はそのまま)して、単語を確定するための序数を作る。

たとえば、5=・2!+・1!+・0!から、5番目の単語を求める序数

       (=+1)、(=+1)、

が得られる。次のようにして、5番目の単語が求められる。

使用可能文字 序数 使用する文字
A、B、C
A、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
A、B、C、E
A、B、E
A、E



  左の表から、求める単語は、

      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
A、B、D、E、F、G、H
A、B、D、F、G、H
B、D、F、G、H
B、D、F、G
B、F、G
B、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.マダチー 著 田中 勇 訳
                                    数学レクリエーション (白揚社))