LCS法のように、距離アルゴリズムとレーベンシュタイン距離を編集することは有益です。しかし、それらはある単語を別の単語に変更するために使用されます。これらの方法により、最小限の変更である単語を別の単語に変更する方法を見つけることができます。ただし、2つの辞書で最小限の変更を見つけるのには役立ちません。
最長共通部分列(LCS)の問題は、シーケンスのセット(多くの場合2つだけ)内のすべてのシーケンスに共通する最長のサブシーケンスを見つけることです。サブシーケンスはサブストリングとは異なることに注意してください。サブストリングとサブシーケンスを参照してください。これは古典的なコンピュータサイエンスの問題であり、diffなどのファイル比較プログラムの基礎であり、バイオインフォマティクスに応用されています。
LCSまたはその他の方法を使用して、リスト1の各単語について、その単語がリスト2の別の単語にどのように変化するかを調べます。たとえば、足と足の間:LCS = FT、difference = oo=>ee。最初の部分は異なる単語から作成し、2番目の部分はlist1から作成する2部グラフを作成する必要があります。2番目の部分の各ノードは、最初の部分の関連する違いに接続されています。
単語の長さと全体の部分は限られていると思います。
この問題はグラフでモデル化できます。各変更を1つのノードに割り当てます。たとえば、 e→i(変更の1つを決定する)は1つのノードのラベルです。たとえば、p→qの形式のすべての操作が2部グラフで1つの部分に設定され、単語の各ペアの合計の差が1に等しい場合、Edgeがuv
頂点を接続U
するEdgeコレクションを定義しますV
(2番目に)パート)正しい単語に変更するには、Vの変更が必要です。最初のパートには最大25 * 26ノードがあります(この例の場合)。あなたの場合の長さ>=1の場合、したがって、制限を設定する必要があります。各単語の変更の最大部分は3に等しいと仮定します。したがって、最初の部分には3*35Kの最大ノードがあります。これで、最初の部分で最大の単語をカバーできるノードのセットを選択して問題を解決できます(選択した単語は正しい単語に変更されます)。
このグラフで最小の頂点カットを見つけて、リクエストを提供できるノードのセットを見つけます。適切な答えが得られるまで、カット頂点アルゴリズムを繰り返します。
ある種の境界を使用してグラフのサイズを縮小できます。たとえば、次数を持つ最初の部分のすべてのノードを削除できます1
。このノードは正確に1つの単語に接続されているため、役に立たないようです。
このグラフシミュレーションはあなたの問題を解決することができます。現在の問題ステートメントでは、このアルゴリズムの範囲は適切に機能します。
例えば:
このグラフの境界の例です(1つのエッジを持つ操作部分のすべてのノードを削除します)。
1-ノード4は(nod)にのみ接続されているため削除し、次にノード(nod)を削除します2-ノード2は(sghoul)にのみ接続されているため削除し、次にノード(sghoul)を削除します3-ノード3を削除します(goud)にのみ接続されています[sghoulは最後のステップで削除されます]、次にノード(goud)を削除します
これで、oo => eeの操作が1つあり、これを選択できます。
もっと考えて、このテキストを編集してみます。