コラム「パズルワールド散策(その7)」で取り上げた畳敷きの問題(n×2mの長方形の部屋にn×m枚の畳を敷く場合の敷き方は何通りあるか)において,m=1の場合はやさしい.
n枚の畳を鰻の寝床のように細長いn×2の間取りに敷くその敷き方の数は,半畳の正方形の1辺を単位として数えると,nを1と2に分割する組み合わせ数(n段の階段を一歩で1段または2段昇ることにする昇り方の数)に一致する.
それは
Fn=Fn-1+Fn-2
の関係になるから,フィボナッチ数列(初項1,第2項2)
1,2,3,5,8,13,21,34,55,89,・・・
Fn=1/√5[{(1+√5)/2}^n+1−{(1−√5)/2}^n+1]
が現れることになる.
細矢治夫先生によると,この問題は不思議なことに物理学の問題と深く関係しているという.物理学研究者の2つのグループが1961年に独立に発表した結果では,
K(n×2m)=2^2m[(n+1)/2]Π(k=1~m)Π(l=1~[(n+1)/2]{cos^2(lπ/(n+1))+cos^2(kπ/(2m+1))}
とくにm=1のときは
K(n×2)=Π(l=1~[(n+1)/2]{1+4cos^2(lπ/(n+1))}
という式が出てくるが,これはフィボナッチ数列の三角関数表現であることは,コラム「フィボナッチ数列の三角関数表現」で紹介したとおりである.
===================================
【1】畳の敷き方数の一般項
K(n×2)=Π(l=1~[(n+1)/2]{1+4cos^2(lπ/(n+1))}
において,n→2mと置き換えれば
K(2m×2)=K(2×2m)
=Π(k=1~m]{1+4cos^2(kπ/(2m+1))}
となる.また,n=1のとき,畳の敷き方はただ1通りであるから,
K(1×2m)=1
1+4cos^2(kπ/(2m+1))
の1はK(1×2m)=1の場合に対応していて,組み合わせ数の本質的な部分は
4cos^2(kπ/(2m+1))
と思われる.そこで,K(n×2m)を求めるには1の代わりに
4cos^2(lπ/(n+1))
を用いればよいことになる.
以上のことから,
K(n×2m)
=Π(k=1~m)Π(l=1~[(n+1)/2]{4cos^2(lπ/(n+1))+4cos^2(kπ/(2m+1))}
=2^2m[(n+1)/2]Π(k=1~m)Π(l=1~[(n+1)/2]{cos^2(lπ/(n+1))+cos^2(kπ/(2m+1))}
と考えられるのである.1が消えた理由を無理矢理こじつけたようであるが,・・・
フィボナッチ数列は指数関数的に増加するから,K(n×2m)は爆発的に増加するはずである.プログラムは簡単であるから自分で計算してみると
m/n 1 2 3 4 5
1 1 2 3 5 8
2 1 5 11 36 95
3 1 13 41 281 1183
4 1 34 153 2245 14824
5 1 89 571 18061 185928
m=2の段を見れば
6畳間に畳を敷き詰める方法は11通り
8畳間に畳を敷き詰める方法は36通り
10畳間に畳を敷き詰める方法は95通り
あることがわかる.ただし,ここでは回転や鏡映で重なるものを別々のパターンとして数えている.
===================================
【2】畳の敷き方数の数値計算誤差
m,nが大きくなるとプログラムの数値計算誤差が顕著になってくる.たとえば単精度で計算した場合,29682.5のような値が出てくるが,これでは29682なのか29683なのか,あるいはもっと違った値になるのか判断できないことになる.
そこで,K(n×2m)にフィボナッチ数列
Fn=aFn-1+bFn-2 (2項漸化式)
やトリボナッチ数列
Tn=aTn-1+bTn-2+cTn-3 (3項漸化式)
のような加法的関係,たとえば,
K(n×2m)=aK((n−1)×2m)+bK(n×2(m−1))+cK((n−1)×2(m−1))
が成り立てば,K(n×2m)の値を誤差なく求めることができることになる.
n=1の場合,畳の敷き方はただ1通りであるから,
K(1×2m)=1
n=2の場合,
K(2×2m)=Π(k=1~m){1+4cos^2(kπ/(2m+1))}
であるから,これはF2m(フィボナッチ数列の第2m項)になっていることがわかる.
F2m=F2m-1+F2m-2
と順次計算することによって
m/n 1 2
6 1 233
7 1 610
8 1 1597
9 1 4181
10 1 10946
が得られる.
一般に,nが偶数のときには
K(n×2m)=K(2m×2(n/2))
という関係が成り立つが,これで得られるK(n×2m)はほとんどない.
n=3,4,・・・の場合はどうだろうか.
K(3×2m)=Π(k=1~m)Π(l=1~2){4cos^2(lπ/4)+4cos^2(kπ/(2m+1))}
K(4×2m)=Π(k=1~m)Π(l=1~2){4cos^2(lπ/5)+4cos^2(kπ/(2m+1))}
K(4×2m)−K(3×2m)=16^mΠ(k=1~m){(cos^2(π/5)cos^2(2π/5)−cos^2(π/4)cos^2(2π/4)−(cos^2(π/5)+cos^2(2π/5)−cos^2(π/4)+cos^2(2π/4)cos^2(kπ/(2m+1))}
となって,期待しているような簡単な加法的関係にはなりそうにない.
K(5×2m)=Π(k=1~m)Π(l=1~3){4cos^2(lπ/6)+4cos^2(kπ/(2m+1))}
K(6×2m)=Π(k=1~m)Π(l=1~3){4cos^2(lπ/7)+4cos^2(kπ/(2m+1))}
K(6×2m)−K(5×2m)ではなおさらである.m=2,3,4,・・・としても同様であるから,この数列は加法的ではなく,本質的に乗積的関係にあるのであろう.
===================================