Processing math: 62%
今日も8時間睡眠
888文字のブログです

大数2015年6月号の宿題を解く

「大学への数学」2015年6月号の「宿題」のコーナーで、次のような問題が出ていました。

m,nは整数で、m0,n1とする。座標平面上の、x座標とy座標がともに1以上n以下の整数であるn2個の点からなる集合をSとする。以下の2条件を共に満たすように、Sの各要素に0以上の整数値を割り当てる方法の総数をm,nで表せ。 (1) Sの要素に割り当てられた値の総和はmである。 (2) 座標軸に平行な長さ1の線分を2(n1)本組み合わせて(1,1)から(n,n)まで移動する最短経路Pで、P上にあるSの要素に割り当てられた値の和がmであるものが存在する。

今日は、この問題を考えてみます。記事の最後に、自分の解答を載せますが、そこに至るまでの試行錯誤も載せておきます。解答だけだと突然いろんなことが出てきて意味不明だと思うのですが、途中の試行錯誤も読むと、あら不思議、やっぱり意味不明です。もっとすっきりしたわかりやすい解答がきっと8月号に載るのでしょう。ちなみに、この「宿題」の解答期限は過ぎているので、この解答を書いて応募しても意味ないです(正解の保証もありません)。

普段このブログは888文字で書いていますが、今日は8888文字のロングバージョンです。

【目次】

読む

まず、状況がよくわからないので、条件(2)をよく読むところから始めます。「座標軸に平行な長さ1の線分」っていうのは、「縦か横に1ずつ移動して」ってことですね。格子状の道の上を移動する、「場合の数」でよくでてくるシチュエーションです。言葉だけで書くと、こんなにめんどくさくなるんですね。

「最短経路P上にあるSの要素に割り当てられた値の和がmである」とは、よく考えると、「最短経路Pは、正の数を割り当てた点を全部通る」ってことです。

結局、「正の数を割り当てた点を全部通る最短経路が存在する、そんな割り当て方は何通り?」ってことですね。

実験する

で、求める対象がわかったけれど、「じゃあそれどうやって数えるの?」ってところが、まだわかりません。ぱっと思いついた方針は、「まず最短経路を考えて、その最短経路上の点にmを振り分ける、って考えればいいんじゃね?」ですね。単純に「最短経路の数×mの振り分け方の数」でいけるんじゃないか、と。まぁ、そんな簡単なはずはないのですが、とりあえず、簡単な例で結果がどうなるか実験してみましょう。

まずは、n=2,m=2というシンプルな場合を考えてみます。このとき、(1)のみを満たす割り当て方は、次のように全部で10通りあります。

20150613-01

左下の(1,1)から右上の(2,2)へ行く方法を考えると、「上⇒右」と行くか、「右⇒上」といくしかありません。このとき、条件(2)を満たさないものは、左上と右下、つまり、(1,2)と(2,1)に1を割り振っているものですね。これだけが条件(2)を満たさず、他の割り当ては満たします。つまり、この場合、条件を満たすものは、9通りですね。

さて、上で書いた方針「最短経路の数×mの振り分け方の数」を考えてみましょう。最短経路の数は、先ほど書いたように、2通りしかありません(2C1通りです)。一方、mの振り分け方はどうなるでしょうか。

3ステップでゴールしますが、この3つの点に合計が2になるように数字を振り分けることを考えます。どこかに2が入る方法は3通り、1が2回入る方法は3通り。なので、全部で6通りですね。

すると、「最短経路の数×mの振り分け方の数」は、2×6で12通り。あれ? おかしいです。正解の9通りでないどころか、そもそも条件(1)だけを満たす10通りより多くなってしまいました。

間違える

よく考えると、「最短経路の数×mの振り分け方の数」という求め方では、同じ結果をダブって数えてしまうことになるんですね。例えば、「上⇒右」という時計回りの経路に対し、1つ目と3つ目に1を割り当てるとします。また、「右⇒上」という反時計回りの経路に対し、1つ目と3つ目に1を割り当てると、結果が同じになってしまいます。どちらも、(1,1)と(2,2)に1を割り当てるという結果になります。こうしたダブりがあるので、全体の10通りよりも多くなってしまったんですね。

上の場合、(1,2)に割り当てられた数字は0ですが、最短経路上にないから0なのか、最短経路上にあったけど0が割り当てられたのか、後になってから見分けることができません。つまり、最短経路をはじめに指定しても、「0」の割り当て方によっては、最短経路の一意性が崩れてしまうことがある、ということです。なので、最短経路を切り口に考えるのは無理そうです。

この後、具体的に割り当て方を書き出していくと、n=3,m=2のときは36通り、n=3,m=3のときは100通りであることがわかりました。このことから、答えは何かの2乗かな、っていう予想が生まれました。しかし、どうやって数えるかは、一から考え直しです。

計算する

次に考えたのは、「0以外が割り当てられた点のうち、ゴールに一番近いもので場合分けする」というものです。最初に考えていた方法では、0を割り当てた点がやっかいでした。なので、はじめから「0がないところ」に着目すればいいんじゃないか、という発想です。ちなみに、ゴールからの距離が等しいのに、0以外が割り当てられる、ということはありません。もしそんなことがあれば、正の数が割り当てられた点を全部通る最短経路が存在しなくなってしまいます(最短経路は、1歩進むごとにゴールに近づかないといけないので、ゴールから同じ距離の点は1回しか通らない)。

さて、mを正として、こういうものを考えます。問題文の点(n,n)を点(i,j)に変え、条件(1)(2)と同様の条件を満たす割り当てを考える。このうち、点(i,j)に割り当てた数字が0でない割り当て方をC(i,j,m)と書く、と。このとき、求めるものは、
injnC(i,j,m)
となります。突然意味不明な式ですが、これは条件を満たす割り当てを「最後に正の数字が割り当てられた点」で場合分けしているにすぎません。

また、C(i,j,m)は、(i,j)の値によって、次のようにわけることができます。
C(i,j,m)=1+(p,q)Sij1rm1C(p,q,r)
ここで、Sijは、x座標がi以下の正の整数、y座標がj以下の正の整数で、(i,j)を除いた点の集合とします。これは、(i,j)mならそれ以外の点全部に0を割り当てるしかないので1通り、mrなら、(i,j)に来るまでの間に合計がrにならないとダメで、それについても「最後に正の数字が割り当てられた点」で場合分けして足し合わせればいい、ということです。

まぁこう書いてみたものの、この計算どうやってやるんだっていう重大な問題があります。とりあえず、小さい値に対して計算してみて、なにかきれいな形になったらうれしいなぁ、と妄想してみます。ゴリゴリ計算すると、次のことがわかります。
C(1,1,m)=1 C(1,2,m)=C(2,1,m)=m C(2,2,m)=m2 C(1,3,m)=C(3,1,m)=12m(m+1) C(2,3,m)=C(3,2,m)=12m2(m+1) C(3,3,m)=14m2(m+1)2 

これらを使って、n=3のときに、求める総数を出すと
14(m+1)2(m+2)2 
となります。省略してますが、計算はすごく大変です。Σの計算がたくさん出てきてしまいます。これを一般のnでやるのは無理です。nについての数学的帰納法という手もありますが、計算がごつすぎます。

ちなみに、m=3としてみると100通りとなり、具体例で計算した時と答えはあっているようです。また、この式は、$({}{m+2} \mathrm{ C }{2})^2=({}{m+2} \mathrm{ C }{m})^2({}{n+m-1} \mathrm{ C }{m})^2$なのかな、という予想が生まれます。

この予想から、「何から何を選べば答えになるんだ?」という逆からの発想も狙いつつ、まだまだ試行錯誤します。

近づく

上ではnを順番に大きくしてきましたが、次は、1xnからはじめてnxnを考えてみようと思いました。つまり、正方形を大きくしていくんじゃなくて、長方形を横に広げて正方形にしていくイメージです。なぜ1xnなんて考えだしたかというと、この場合は経路のことを考えてすむからです。
20150613-02
(1,1)から(1,n)までの点にmを割り当てる方法を考えます。この場合、最短経路は1本しかないので、合計がmになるような割り当てだけ考えればいいです。

次のような状況を考えましょう。ボールをn+m個用意し、横一列に並べます。次に、ボールの間(n+m1箇所)からn1箇所を選んで区切りを入れ、nグループに分けます。左からi番目のグループのボール数から1引いたものを、(1,i)に割り当てます。すると割り当てた数の合計はmになります。また、ボールの分け方と数字の振り分け方は、1対1に対応します。

なので、このときの場合の数は、${}{n+m-1} \mathrm{ C }{n-1}={}{n+m-1} \mathrm{ C }{m}({}{n+m-1} \mathrm{ C }{m})^2$と繋がっている気がします。答えに近づいてる感!

ただ、(1,1)から(2,n)までの点に合計がmになるように割り当てる方法になると、やはりつまってしまいます。0じゃないところで場合分けをしないとダブってしまうので、結局前にやったえげつない計算へと向かってしまいます。

計算をゴリゴリやるか。とも思ったのですが、(1,1)から(1,n)の場合をよくよく見てみます。この答えにつながっている感じを放っておくのはもったいない気がします。

そもそも、${}{n+m-1} \mathrm{ C }{m}$とはなんでしょう。今取り組んでいるような、経路問題でもよく見る形です。ん? これは、次の図で左下から右上に行く最短経路数と同じじゃないか?

20150613-03

上にn1、右にm移動することを考えると、確かにこの答えになります。しかし、これは(1,1)から(1,n)へ行く場合だから横に平面の形で描けたけど、(1,1)から(n,n)の場合にはどうすれば。。。あ!

ひらめく

なるほど。次元を一個あげるんですね。この問題は、(1,1)から(n,n)への最短経路を考える問題ではなかったんです。(1,1,0)から(n,n,m)への最短経路を考える問題だったのです。

20150613-04

(1,1,0)から(n,n,m)への最短経路を上から見ると、もちろんそれは(1,1)から(n,n)への最短経路になっています。そして、上に上がった回数が、その点に割り当てられた数に対応するわけです。なるほど、この問題はそういう意味なんですね。

ただ、まだどうやって数えればいいかわかりません。(1,1,0)から(n,n,m)への最短経路と関連があるのは予想できますが、求めるものと1対1になっているわけではありません。

例えば、(1,1,0)から(2,2,2)へ行く場合、まず上に行き、また最後にも上に行ったとした場合、(1,1,1)から(2,2,1)へ行く方法は、上から見たときに時計回りと反時計回りの2種類あります。以前見たダブりの例と全く同じダブり方をしています。

うーん、とうなりながら、図の奥行のn1と高さのmをぼーっと見ていました。すると、あるとき、ピカッとひらめきました。「そうか、横から見るんだ!」

上の例で、時計回りでも、反時計回りでも、前から見た経路、横から見た経路は変わりません。つまり、最短経路のうち、前から見た経路、横から見た経路が異なるものだけをカウントすればいいんじゃないか、と予想できます。

もしそうだとすると、横にn1、縦にm移動する最短経路を2つ選ぶ場合の数を求めることになるので、答えは$({}{n+m-1} \mathrm{ C }{m})^2$。これは前に考えていた予想と一致します。答えはこれに違いない!

解答する

今ひらめいたことを確認しつつ、答案に書くことを考えていきます。が、ちょっと書きづらいです。直感的には、前からと横から見た経路を考えればいいのですが、そのイメージで答案に落としていく力が僕にはありません。

そこで、こういうことを考えます。「(0,1)から(0,n)、(1,0)から(n,0)に合計がmになるように数字を割り当て、そこから条件を満たす割り当てを考える」と。

条件を満たす割り当て方は、次のようにすればいいです。(1,1,0)から(n,n,m)に行くことを考えます。このとき、(0,1)から(0,n)、(1,0)から(n,0)に割り当てた数字に対し、(x,0)と(0,y)が正になっている箇所は上に進む、と。これを原点に近い方から順番にやっていきます。

そうすれば、できあがる経路は、(1,1,0)から(n,n,m)への最短経路になります。上から見たとき、上に上がってきた数字を割り当てれば、条件を満たすことはわかります。

解答を書くには、この方針でいけるはずですが、この場合、3つのことを書かないといけないでしょう。

1つ目は、こうして作った割り当て方が、条件を満たすこと。
2つ目は、こうして作った割り当て方が、他のものとかぶらないこと。
3つ目は、こうして作った割り当て方以外に、条件を満たすものがないこと。

1つ目は、ちゃんと目的のものに対応しているかどうかの確認です。また、数学チックに言うと、2つ目は単射であること、3つ目は全射であることです。これを確認しないと、「(0,1)から(0,n)、(1,0)から(n,0)に合計がmになるように数字を割り当てる場合の数」が求めるものだということができません。

以上のことをくどくど書いてまとめたものが、次の解答になります。解答を書く方針は、直観的に理解した「3次元の最短経路を、前と横から見る」をベースに書いていけばいいのですが、厳密に書くには少しトリッキーな書き方になってしまいます。いきなりこの答案を思いつくのは無理ですが、今までの試行錯誤を踏まえれば、突拍子さは軽減しているんじゃないかと思います。

直感的にわかったことをそのまま答案にできれば、もっと簡単に書けるはずなんですが。

【解答案】
m=0のとき、条件を満たすには、Sの全要素に0を割り当てるしかないので、割り当て方は1通り。

m1とする。各項が0以上の整数で、Σa(0)i=mを満たす、項数nの数列a(0)iを考える。
A1=minia(0)i>0 a(1)i={a(0)i1(i=A1) a(0)i(iA1)
として、A_1と新しい数列{a_i^{(1)}}を作る。以下、同様の操作をして、A_1, \cdots , A_m{a_i^{(1)}}, \cdots, {a_i^{(m)}}を作る。作り方から明らかにA_1\leqq A_2 \leqq \cdots \leqq A_mが成り立つ。また、A_j=iとなるjの個数がa_i^{(0)}個となることも、作り方からわかる。

各項が0以上の整数で、\Sigma x_i^{(0)}=\Sigma y_i^{(0)}=mとなる項数nの2つの数列{x_i^{(0)}}, {y_i^{(0)}}を考える。これらに対し、上の操作で得られるA_1, \cdots , A_mを、それぞれX_1,\cdots, X_mY_1,\cdots, Y_mとおく。

Sの全要素に0を与えた後、各(X_i,Y_i)の値を1ずつ増やす(i=1,\cdots, m)。こうすれば、Sの要素に割り当てられた値の総和はmになる。

X_1\leqq X_2 \leqq \cdots \leqq X_mY_1\leqq Y_2 \leqq \cdots \leqq Y_mが成り立つから、(1,1)から(n,n)までの最短経路で、すべての(X_i,Y_i)を通るものが存在する。

よって、{x_i^{(0)}}, {y_i^{(0)}}から条件(1)(2)を満たす割り当てを作ることができる(※1)。このように、数列から割り当てを作る方法を、操作Aと呼ぶことにする。

操作Aにより得られた割り当てに対し、点(i,j)に割り当てられた値をV(i,j)で表す。このとき\sum_j V(i,j)は、X_j=iとなるjの個数と一致する。よって、次が成り立つ。
\begin{eqnarray} x_i^{(0)} &=& \sum_j V(i,j) \ y_i^{(0)} &=& \sum_j V(j,i) \end{eqnarray}
このことから、{x_i^{(0)}}{y_i^{(0)}}が異なれば、操作Aで得られる割り当ても異なることが分かる(※2)。

次に、条件(1)(2)を満たす割り当てがあったとする。点(i,j)に割り当てられた数字をU(i,j)で表すとし、
\begin{eqnarray} x_i^{(0)} &=& \sum_j U(i,j) \ y_i^{(0)} &=& \sum_j U(j,i) \end{eqnarray}
とする。このとき操作Aにより、{x_i^{(0)}}, {y_i^{(0)}}から新しく割り当てを作ることができる。点(i,j)に新しく割り当てられた数字をV(i,j)で表すとする。

UVが異なるとすると、次を満たすkが存在する。
\begin{eqnarray} k=\min { i \mid U(X_i,Y_i) \ne V(X_i,Y_i) } \end{eqnarray}

操作Aの定義から、U(X_k,Y_k) \lt V(X_k,Y_k)なので、次が成り立つ。
\begin{eqnarray} \sum_{j\gt Y_k} U(X_k,j) \gt 0 \ \sum_{j\gt X_k} U(j,Y_k) \gt 0 \ \end{eqnarray}
しかし、これは、x=X_k上とy=Y_k上で正の整数が割り当てられた点を通る最短経路がないことを示すので、Uの割り当て方は条件を満たさない(※3)。

以上から、
・操作Aにより、条件を満たす割り当てを与えることができること(※1)
・操作Aでは、初期値を変えれば、得られる割り当て方も変わること(※2)
・操作Aで作られるもの以外の割り当ては、条件を満たさないこと(※3)
が示された。

よって、求めるものは、各項が0以上の整数で、\Sigma x_i=\Sigma y_i=mとなる項数nの2つの数列{x_i}, {y_i}の与え方に一致する。

次の状況を考える。n+m個のボールを左右に一列に並べる。n+m-1箇所の隙間からn-1箇所を選んで区切りを入れ、ボールをnグループに分ける。このとき、左からi番目のグループにあるボールの数から1減らしたものを、x_iとして、項数nの数列{x_i}を作る。このとき、この数列は各項が0以上の整数で、\Sigma x_i=mを満たす。また、ボールの区切り方と数列の種類は、1対1に対応する。

よって、求める総数は、$({}{n+m-1} \mathrm{ C }{n-1})^2=({}{n+m-1} \mathrm{ C }{m})^2となる。これは、m=0のときも成り立つ。よって、({}{n+m-1} \mathrm{ C }{m})^2$が求めるものとなる。(終)

(8825文字)