Dを辞書とします。mとnを修正します。m×nの長方形を見つける問題を制約充足問題(CSP)として定式化できます。
x i、1 … xi、 n∈D∀i∈ {1、…、m}
x 1、j …x m、 j∈D∀j∈{1、…、n}
x i、 j∈ {A、 …、z}∀i∈{1、…、m}、∀j∈{1、…、n}
CSPを解決するための非常に一般的なアプローチは、バックトラッキングと制約伝播を組み合わせることです。大まかに言えば、バックトラッキングとは、変数を選択してその値を推測し、1つ少ない変数でサブ問題を再帰的に解決することを意味し、制約伝播とは、各変数の可能性の数を減らすことを意味します(おそらくゼロに、つまり解決策がないことを意味します)。
例として、x 1,1 =を選択して、3×3グリッドを開始できQ
ます。
Q??
???
???
英語の辞書では、x1,2とx2,1の唯一の可能性は(スクラブルのU
「単語」の前に)あります。
CSPを解決する技術は、バックトラッキングと制約の伝播の間でバランスを取ることです。制約をまったく伝播しない場合は、力ずくで使用しているだけです。制約を完全に伝播する場合、バックトラックする必要はありませんが、NP困難な問題をそれ自体で解決する伝播アルゴリズムは、実行するのにかなり費用がかかる可能性があります。
この問題では、適切なデータ構造のサポートがない限り、各バックトラッキングノードで大きな辞書を操作するとコストがかかります。トライまたはDAWGをすばやく使用して、接頭辞が完全な単語に拡張される文字のセットを計算するアプローチの概要を説明します。
各バックトラッキングノードで、割り当てた変数のセットはヤング図形です。つまり、その上と左の変数が割り当てられるまで、変数は割り当てられません。次の図で、.
は割り当てられた変数を示し、*
は?
割り当てられていない変数を示します。
.....*
...*??
...*??
..*???
*?????
マークされた変数は*
、次に値が割り当てられる候補です。毎回固定変数を選択するのではなく、複数の選択肢があることの利点は、一部の変数の順序が他の変数よりもはるかに優れている可能性があることです。
それぞれについて*
、trie / DAWGを2回ルックアップします。1つは水平方向、もう1つは垂直方向で、次に来る可能性のある文字のセットの共通部分を計算します。古典的な戦略の1つは、矛盾に早く到達することを期待して、可能性が最も少ない変数を選択することです。この戦略が好きなのは、可能性がゼロの変数があると自然に剪定され、可能性が1つの変数があると自然に伝播するからです。結果をキャッシュすることで、各ノードの評価を非常に高速にすることができます。