DominosとL字型トロミノのサイズNX2の長方形の構築[二重]
-
29-09-2020 - |
質問
質問
解決
┌───────────┐
2 │ │
└───────────┘
m
.
m+1 m
┌─────────────┐ ┌───────────┐
2 │ ┌─┘ 2 │ └─┐
└───────────┘ └─────────────┘
m m+1
.
繰り返し関係を見つけるために、すべての可能な方法で上記の形状の右端の境界のスペースを覆ってみてください。
$ f [m] $ を考慮してください。右端のスペースを覆うための4つの方法があります。
┌─────────┬─┐ ┌──────┬────┐ ┌───────┬───┐ ┌─────────┬─┐
│ │ │ │ ├────┤ │ └─┐ │ │ ┌─┘ │
└─────────┴─┘ └──────┴────┘ └─────────┴─┘ └───────┴───┘
What is left: (m-1)x2 (m-2)x2 (m-2)x2+1 (m-2)x2+1
.
だから、 $ \ quad \ quad f [m]= f [m - 1] + f [m - 2] + g [m - 2] \ CDOT 2 $ m \ ge2 $ の$ 。
$ g [m] $ を考慮してください。最初の形の右端のスペースを覆う2つの方法があります。
m+1 m+1
┌─────────┬───┐ ┌─────────┬───┐
│ │ ┌─┘ │ └─┬─┘
└─────────┴─┘ └───────────┘
What is left: (m-1)x2 (m-1)x2+1
.
だから我々は $ \ quad \ quad g [m]= f [m - 1] + g [m-1] $ m \ ge1 $ 。
上記の2つの再発方程式の適用、すべての $ f [m] $ と $ g [m]を計算できます。 $ m $ を増やすために、 $ m= 2 $ から始まる$ 初期条件、 $ f [0]= 1 $ 、 $ f [1]= 1 $ 、 $ g [0]= 0 $ と $ g [1]= 1 $ 。
# Python program to compute the first n+1 values of f
def show_number_of_ways(n):
f = [0] * (n+1)
g = [0] * (n+1)
f[0] = f[1] = g[1] = 1
g[0] = 0
for m in range(2, n+1):
f[m] = f[m - 1] + f[m - 2] + 2 * g[m - 2]
g[m] = f[m - 1] + g[m - 1]
print(f)
show_number_of_ways(10)
# [1, 1, 2, 5, 11, 24, 53, 117, 258, 569, 1255]
.
これは、 $ f $ のみを含むより単純な再発関係を導き出す方法です。
glorfindelの答え「右端の小中線ブロックをカットする」という方法でパターンの数を計算する方法を説明しています。 リキングするには、 $ 1 \ times2 $ の1つの基本ブロックがあります。 $ 2 \ times2 $ $ n \ times2 $ の2つの基本ブロックは、 $ n \ ge3 $ です。 $ f(n)$ のパターンの数: $ 2 \倍$ のパターン数です。次の基本ケースと再発関係があります。 $$ f(0)= 1、\ f(1)= 1、\ f(2)= 2、$$ $$ f(n)= f(n-1)+ f(n-2)+ 2f(n-3)+ 2f(n-4)+ 2f(N-4)+ 2F( 0)、\ text {for} n \ GE3 $$
上記の式は、 $ f(n)$ を計算するアルゴリズムをもたらします。 $ O(n ^ 2) $ 時間 - 複雑さと $ o(n)$ スペース複雑さ。
私たちはもっとうまくいくことができます。 $ n $ を置き換える $ n-1 $ に置き換えます。 $$ f(n-1)= f(n-2)+ f(n-3)+ 2f(N-4)+ 2F(N-5)+ + + 2f(0)、\ text {for} n \ ge4 $$
上記2方程式を差し引くと、 $$ f(n)-f(n-1)= f(n-1)+ f(n-3)$$ そのため、 $ n \ ge4 $ の場合はあります。 $$ f(n)= 2f(n-1)+ f(n-3)\ tag {simple} $$ $ f(3)= 5= 2f(2)+ f(0)$ 以降、上記の繰り返し関係はすべての $ n \ ge3 $ 。 これは $ f(n)$ を計算するアルゴリズムにつながります。 $ o(n)$ 時間 - 複雑さと $ o(1)$ スペース複雑度。
# Python program to compute the first n+1 values of f
def show_number_of_ways(n):
f = [0] * (n+1)
f[0] = f[1] = 1
f[2] = 2
for i in range(3, n+1):
f[i] = 2 * f[i - 1] + f[i - 3]
print(f)
show_number_of_ways(10)
# [1, 1, 2, 5, 11, 24, 53, 117, 258, 569, 1255]
.
$ f $ と $ gの間の最初の2つの相互再帰的関係から直接単純な再発関係を導出することもできます。 $ 。
平等 $ f [m-1]= g [m] -g [m-1] $ 、そしてそれ故、 $ f [m]= g [m + 1] -G [m] $ と $ f [m-2]= g [m-1] -G [M-2] $ 。 $ f $ を排除するためにそれらを適用する $ f [m]= f [m - 1] + f [m - 2] + G [M - 2] \ CDOT 2 $ 、 $ G [m + 1]= 2g [m] + G [M-2] $ 。
$ f [m] $ は、 $ g [m + 1] $ と $ g [m] $ 、 $ f $ sementi
同じ種類の再発関係、すなわち $ f [m]= 2F [M-1] + F [M-3] $ 。index $ m $ の有効範囲の確認すべての $ m \ ge3 $ 。他のヒント
それを考える1つの方法は、基本的なブロック、すなわちそれらを垂直に切断することによって分割できないブロックです。
今、 $ n \ whed 2 $ 矩形を2つの小さなブロックに分割することができます。 (エレメンリーブロックが四角形全体の場合は含まれます)。
このように、あなたは10x2までずっと動作させることができます。
いくつかの用語を計算した後、私はシーケンスが見つかりました A052980 整数シーケンスのオンライン百科事典:
a(n)は、ドミノとL字型のトロミノを用いて、2×N基板の可能なティールの数である。 - Michael Tulskikh、2019年08月21日2019
だから最終的な回答は $ n= 10 $ のための 1255 です。