『同順を許す並び方の数は?』解答


◆宮城県 アンパンマン さんからの解答。

kグループ1,2,..,kの順番で到着するとします。
各グループの数はr1,r2,...,rk (≧1)とします。
(r1+r2+...+rk=n)

そのとき、並び方は
n!
r1!r2!...rk
通りです。

kグループの中に同じ数があるとします。
つまりr1人のグループがp1グループあります。
r2人のグループがp2グループあります。
...

rm人のグループがpmグループあります。
p1+p2+...+pm=k, riはすべて異なる(≧1)。
p1*r1+p2*r2+...+pm*rm=n

グループの順番を考えると

 通りあります。

以上より、ゴールする順番は

 通りあります。

n=2,
2!
1!1!
+2!
2!
=3 通り

n=3,
3!
1!1!1!
+3!
2!1!
*2C1 +3!
3!
=13 通り

n=4,
4!
1!1!1!1!
+4!
2!2!
+4!
2!1!1!
*3C1 +4!
3!1!
*2C1 +4!
4!
=75通りです。


◆愛知県 Y.M.Ojisan さんからの解答。

解答が既にありますが、さらに計算量の節約を考えてみます。

【定義】

 J(N,K)を N人競争の結果の内,グループ数がKである場合の組み合わせ数とします。

【漸化式】

このとき、次の漸化式が成立します。

 J(N,K)=K×{J(N−1,K―1)+J(N−1,K)}――(A)
 J(N,1)=1 、J(N,N+1)=0         ――(B)
∵J(N,K)における、ゼッケンNの人の状態を考えると、大きく

(1)単独である場合と、(2)仲間がいる場合の2つに分けられます。

(1)の場合、ゼッケンNの人がいない場合の組み合わせは、人とグループがそれぞれ1減るので
J(N−1,K−1)であり、一方、ゼッケンNの人が居た場所は植木算でK箇所あります。

(2)の場合、ゼッケンNの人がいない場合の組み合わせは、人だけ1減るので
J(N−1,K)であり、一方、ゼッケンNの人が居た場所はK箇所あります。

よって(A)式が成立します。(B)は自明です。

【答え】

従って総数は

  N

k=1
J(N,K)

【計算量】

N−1人からN人の場合を計算する場合、(A)式は N−1回適用されます。
従って全計算量はNの2次式のオーダーとなり計算機で計算可能な程度です。

因みにアンパンマンさんの方法では 各項計算量はNの一次ですが、狽フ項数が『果物の分配』問題での
S(N)個あり、NP問題のようです。

【計算結果】

8人までの結果を以下に示します。

【感想】

 何かうまい方法があって、Nの一次式の程度の計算量の方法があるのでしょうか ?。


◆出題者のコメント。

お二人とも、みごと正解です。
問題と直接がっぷり4つに組んでの解法と、「漸化式」による解法、それぞれの持ち味が出ていたように思えます。
それにしても、漸化式(A)を、よく発見したものですね。
私には無理でした。(^^;

出題後に、パスカルの三角形を利用した面白い解法を発見しましたので紹介します。

パスカルの三角形から1番右端の(1)は取り去ります。
左端から右に、偶数番目の数に(−1)を掛けます。
(図ではマイナスは赤色で表します)


    1 1           1     ←1段目
   1 2 1    →    1     ←2段目
  1 3 3 1       1  3   ←3段目
 1 4 6 4 1     1  6   ←4段目
     :            :
N人の時は、このパスカルの三角形の上からN段目までの数字をすべて使用しますが、ここでは、4人の時を例にして説明します。

まず、各段目の左端から右斜め下に順々に表示されている数字をすべて加えます。

        1         ←1段目
       1        ←2段目
      13       ←3段目
     1      ←4段目
    ──────────
       1     ←合計段
次に、この合計段の数の左から順に44,34,24,14を掛け、すべてを加えます。
 1*44−3*34+4*24−2*14
=256−243+64−2
=75
以上です。

一般にN人の時の同順を許す並び方の数f(N)を、

f(N)=Kn*NN+Kn-1*(N-1)N+・・・+K2*2N+K1*1N

と表した時、面白いことにパスカルの三角形より得た合計段の数字が、式の同位置の各項の係数になります。
(Kn、Kn-1、・・・、K2、K1 は各項の係数です)

指数型母関数
[指数型計数子: x1
1!
+x2
2!
+x3
3!
+ …] による解法で、
f(N)= N

i=1
i-1

j=0
{ij*(-1)j*(i-j)N}

を得(計算省略)、これを変形して
f(N)= N

i=1
N-i

j=0
{(-1)j*i+jj*iN}

この式を眺めているうちに、パスカルの三角形による解法を発見しました。


◆宮城県 アンパンマン さんからの解答。

Y.M.Ojisan さんの漸化式より
F(x,y)=

n=0,k=0
J(n,k)xn yk を定義します。



n=1
k=1
J(n,k)xn yk
=

n=1
k=1
(k)J(n-1,k-1)xn yk +

n=1
k=1
k J(n-1,k)xn yk
=

n=1
k=1
(k-1)J(n-1,k-1)xn yk +

n=1
k=1
J(n-1,k-1)xn yk +

n=1
k=0
k J(n-1,k)xn yk

F(x,y)-

n=0
J(n,0)xn -

k=1
J(0,k) yk
=xy2 δF(x,y)
δy
+xyF(x,y)+xy δF(x,y)
δy

J(n,1)=J(n-1,0)+J(n-1,1) とJ(1,1)=J(0,0)+J(0,1) より
J(n,0)=0 n>0,
J(0,0)=1

δF(x,y)
δy
1-xy
xy(y+1)
F(x,y)-1
xy(y+1)
より

 

1-xy
xy(y+1)
dy
=∫(1
x
( 1
y
- 1
y+1
)- 1
y+1
)dy
=1
x
ln y
y+1
-ln(y+1) より

 

F(x,y)
= -y1/x
(y+1)1+1/x
(y+1)1+1/x
y1/x*xy(y+1)
dy
= -y1/x
x(y+1)1+1/x
(y+1)1/x
y1+1/x
dy

x= 1
z
で置き換えると
F(x(z),y)= -z yz
(y+1)1+z
(y+1)z
yz+1
dy になります。

(y+1)z
yz+1
dy
=-(y+1)z
zyz
+∫(y+1)z-1
yz
dy
=-

i=0
(y+1)z-i
(z-i)yz-i
+C(x)より
F(x,y)=

r=0
yr
(1-rx)(1+y)r+1
-y1/x C(x)
x(y+1)1+1/x

J(n,k)の初値より C(x)=0がわかります。

F(x,y)
=

r=0
yr
(1-rx)(1+y)r+1
=

i=0


r=0
(-1)i i+rCi yi
1-rx
=

i=0


k=i
(-1)i kCi yk
1-(k-i)x

 J(n,k)
=F(x,y)の xn ykの係数
=

i=0
(-1)i kCi (k-i)n
= k

i=0
(-1)i kCi (k-i)n


別のアプローチでやります。
Y.M.Ojisanさんの計算結果から
J(n,k)= k

i=0
(-1)ikCi (k-i)n と予想できます。

kJ(n-1,k-1)+k J(n-1,k)
=k k-1

i=0
(-1)ik-1Ci (k-1-i)n-1+ k k

i=0
(-1)ikCi (k-i)n-1
= k-1

i=0
(-1)i(i+1)kCi+1 (k-1-i)n-1+ k k

i=0
(-1)ikCi (k-i)n-1
= k

i=1
(-1)i-1(i)kCi (k-i)n-1+ k k

i=0
(-1)ikCi (k-i)n-1
= k

i=1
(-1)i(k-i)kCi (k-i)n-1
= k

i=1
(-1)ikCi (k-i)n
= J(n,k)

さらに、
J(n,0)= 0

i=0
(-1)i0Ci (0-i)n=0n = 1 n=0,
 = 0 n>0.

J(0,k)= k

i=0
(-1)ikCi (k-i)0=(1-1)k=0 k>0.

上記の帰納法より
J(n,k)は k

i=0
(-1)ikCi (k-i)n であることがわかります。

P(n)
= n

k=1
J(n,k)
= n

k=1
k

i=0
(-1)ikCi (k-i)n
= n

k=1
k

j=0
(-1)jn-jCk-j (n-k)n

この式に至るもっときれいな説明があるでしょう。
とりあえず、答えは上記の式になります。


◆宮城県 アンパンマン さんからの解答。

J(n,k)の求め方。

ゴールする人がkグループある(0人のグループもありえるとします)とすると
ゴールする順番は kn 通りあります。

Eiはグループiが0人いるイベントです。

N(Ei) =イベントEiになる順番の数です。 =(k-1)n 通りです。

N(E1∪E2∪...∪Ek)
=
1≦i≦k
N(Ei)-
1≦i_1<i_2≦k
N(Ei_1∩Ei_2)+
1≦i_1<i_2<i_3≦k
N(Ei_1∩Ei_2∩Ei_3)+・・

N(Ei_1∩Ei_2∩...∩Ei_r)
=n人をk-rのグループに分ける
=(k-r)n

N(E1∪E2∪...∪Ek)
= k

i=1
(-1)i-1 kCi (k-i)n

J(n,k)
=N((E1∪E2∪...∪Ek)')
=kn-N(E1∪E2∪...∪Ek)
= k

i=0
(-1)i kCi (k-i)n


◆出題者のFootmark さんからの解答。

アンパンマンさんが既に一般解を導き出していますが、私なりの解法です。

母関数(指数型母関数)を用いての解法です。

数列(a0,a1,a2,…,aN,…)に対して、次の関数G(x)がこの数列の指数型母関数です。

G(x) =a0x0
0!
+a1 x1
1!
+a2x2
2!
+…+aNxN
N!
+…

ここでxN
N!
は形式的な数で、
それ自身の値には何ら意味はなく、各項の係数のみに意味があります。

組合せの場合とは違い、順列そのものを母関数で表現するのは、どうしても無理があります。
と言うのは、順列では構成要素が同一でも順序が違えば別なものなので、可換である通常の代数では、これを表現することは不可能だからです。
そこで、順列そのものではなく、順列の数のみを指数型計数子として表現します。

N人が順番の違うi個のグループに分かれてゴールしたものとし、各グループについて考えてみます。
グループ内はN人以下なら何人でも許され、その内での並び方は問題としないので、指数型計数子は
x0
0!
+ x1
1!
+x2
2!
+x3
3!
+ … = ex

ところが、グループ内には少なくとも1人はいる筈ですから、指数型計数子は
x1
1!
+x2
2!
+x3
3!
+ … = ex-1

それ故、i個のグループでは指数型計数子は以下のようになります。

  (ex-1)i
i

j=0
ij (ex) i-j (-1)j
i

j=0
ij (-1)j e(i-j)x
i

j=0
{ij (-1)j

N=0
1
N!
(i-j)N xN}


N=0
{ xN
N!
i

j=0
ij (-1)j (i-j)N }

N人が順番の違うi個のグループに分かれてゴールする方法の数は、上の式の
xN
N!
の係数なので i

j=0
ij(-1)j(i-j)N

この中で、j=i の時は、ij(-1)j(i-j)N = 0 となるため
i-1

j=0
ij(-1)j(i-j)N

ところで、グループの数(i)は、1個からN個まであり得るので
N

i=1
i-1

j=0
ij(-1)j(i-j)N

これが求めるN人の同順を許す並び方の数です。

なお、各グループでの人数はN人以下なので、各グループの指数型計数子は本来ならば

x1
1!
+x2
2!
+x3
3!
+ …+xN
N!

とすべきですが、無限次数までの和としても、全グループでの
xN
N!
の項の係数の計算結果は変わりません。

さらに、上の式を展開させてから再度 kN(kは 1≦k≦N の整数) で整理すると
N

i=1
N-i

j=0
(-1)ji+jj iN

この式が「パスカルの三角形による解法」の元になった式です。

【余談】

この「同順を許す並び方」の一般解には注意が必要です。
と言うのは、N人が1人ずつN個のグループに分かれる場合も保証されないと成立しないからです。
たとえば次のようなケースでは、すべての正の整数Nにおいて成立する訳ではありません。

同じ年齢のN人の人を誕生日順に並べる場合は、
N>過去1年間の日数 では成立しません。


 『同順を許す並び方の数は?』へ

 数学の部屋へもどる