私の質問をより明確に説明するために、私が直面している実際の事例を説明することから始めます。
文章を構成するために、選択的に点灯できる多くの単語を含む物理的なパネルを構築しています。これは私の状況です:
- 表示したい文章をすべて知っています
- すべての文を表示できる、注文された単語の最短セットを見つけたい
例:
SENTENCES:
"A dog is on the table"
"A cat is on the table"
SOLUTIONS:
"A dog cat is on the table"
"A cat dog is on the table"
私は、すべての文で使用されているすべての単語のセット内の各一意の単語について、その左側または右側にどの単語を配置するかを見つける「位置規則」を使用して、この問題にアプローチしようとしました。上記の例では、「on」という単語のルールセットは「left(A、dog、cat、is)+ right(the、table)」になります。
このアプローチは些細なケースでも機能しましたが、私の実際の状況には、私を立ち往生させた2つの追加の問題があり、それは両方とも言葉を繰り返す必要性と関係があります。
- 文中の繰り返し:「猫はテーブルの上にいます」には2つの「the」があります。
- 循環参照:「赤い猫」+「私の猫はテーブルの上にいます」+「そのテーブルは赤い」という3つの文のセットでは、ルールでは、REDはCATの左側にあり、CATはTABLEの左側とTABLEはREDの左側にある必要があります。
そのための私の質問は次のとおりです。
この種の問題を研究して解決するアルゴリズムのクラスは何ですか(またはさらに良い:特定のアルゴリズムは何ですか)?いくつかのリファレンスまたはそのコード例を投稿できますか?
編集:複雑さのレベル
最初の回答から、実際の複雑さのレベル(つまり、文が互いにどれだけ異なるか)が重要な要素であるように見えます。だから、ここにそれに関するいくつかの情報があります:
- 表現したい文が約1500あります。
- すべての文は、基本的に、数語だけが変更される最大10文の制限されたプールの変更です。前の例に基づいて、私のすべての文章が「家具に対する誰かのペットの位置」または「誰かの家具の物理的な説明」のいずれかについて話すのと少し似ています。
- すべての文を構成するために使用される一意の単語の数は100未満です。
- 文の長さは最大8語です。
このプロジェクトではPythonを使用していますが、適度に読みやすい言語(例:難読化されていないperl!)であれば問題ありません。
よろしくお願いします!