部分解への分割方法の検討
ver. 0.02 2002/12/22 daichin@excite.co.jp
   http://hexomino.hp.infoseek.co.jp/

・Version History
 0.02 02/12/22 ヘキソミノの場合を追加
 0.01 02/12/17 初稿


 自分でも当然検証を進めていきますが、ちょいと心配です。どなたか、追試、検証をしていただけませんでしょうか?ご意見、ご質問等お待ちしてます。(メールでも、掲示板でも結構です。)


ペントミノの場合

 まず、最左A列(水色部分)を埋める組み合わせを考える。この場合、組み合わせによる変化は黄色の部分にマッピングされる。その中の死角がない組み合わせをNa通りとする。また、上下反転の重複をなくすため、A1を埋めるピースの番号がA6を埋めるピースの番号より小さい組み合わせNbのみを残す。(Nb = Na/2通り )

例1

例2

 そして、Nb個のサブパーツ(複数個のピースの組み合わせ)同士を、使用ピースが重複しないように組み合わせ、 左右反転させて、右部分に置く(例3)。この場合、左右の最大幅が5に対して、箱の幅が10あるため、 決してオーバーラップすることなく置くことが可能である。 その上で、残りのピースを埋められるかどうかをしらみつぶしにチェックする。 また、右側のサブパーツのみを上下反転させて、同様にしらみつぶしにチェックする(例4)。 

例3

例4


 次に、サブパーツの大きさについて検討する。まず、A列に加え、B列も埋めたサブパーツを考えると、左右のサブパーツ同士が重なり合ってしまうケースが出てきてしまう。これを単に排除 してよいか?正しい解を見逃してしまうことはないだろうか? 

 結論から言うと、3列は問題ないが(例5)、4列では問題になってしまう(例6)。

 例5の場合、確かに組み合わせの中には、重なりあってしまうものが出てくるが、それは元々置けない組み合わせである。例5においても、右側に3列(HIJ列)スペースが残っており、サブパーツの中に組み合わせ可能なものがあることがわかる。

 かたや例6の場合は、G1、H1が常に重なりあってしまい、実際には解が存在するにもかかわらず、解がないことになってしまい全解は求まらない。

 以上を式にあらわすと、以下等式になる。
[ 最大サブパーツ幅 ] = ( [ ケースの幅 ] − [ 最大ピース長 ] +1 ) / 2 
 ペントミノの場合は、(10−5+1)/2 = 3

例5
例6

 この関係は、縦方向にも同時に適用ができる。上式を縦方向に適用すると
 (6−5+1)/2 = 1 
となり、分割が可能なことがわかる。以下は縦横ともに適用した場合の例。

例7

例8

 さて、これがペントミノにおいて、高速化につながるかは、これからのお楽しみ。まあ、トータルで早くならなくても、サブパーツ・リストを作成後が早ければ、ヘキソミノへ適用可能と思われる。(と、今から予防線。)


 ヘキソミノの場合 

 長方形ではないが、同様に考えると、中央を1列に固定すると4列まで可能であり、 中央を3列(片側で考えると2列)にすると、3列までが可能になる。 上下方向は、 (11−6+1)/2 = 3  となり、縦3列のサブパーツ化が可能となる。

コーナー・サブパーツ

図1

サイド・サブパーツ

図2

アッパー・センター・サブパーツ

図3

ボトム・センター・サブパーツ

図4

センター・サブパーツ

図5

青色部サブパーツが必ず埋める部分

黄色部サブパーツが埋める可能性のある部分

桃色部別のサブパーツが必ず埋める部分

  1. コーナー・サブパーツの組み合わせで、サイド・サブパーツ作成
  2. アッパーおよびボトム・センター・サブパーツの組み合わせで、センター・サブパーツ作成

 状況によっては、サイド・サブパーツ作成用に、5〜9行A列の5マスの全パターンに対応する、ブリッジ・サブパーツリストの作成を行う。同様に、センター・サブパーツ作成用に4〜9行J列の6マスに対してもパーツリストを作成。ブリッジ・サブパーツは、90度回転させることにより、センター・サブパーツとサイド・サブパーツを組み合わせ解を求める時に、2行E〜I列および12行E〜I列を結合する場合に再利用可能。


inserted by FC2 system