この質問は、高速なスペルチェッカーを構築するための効率的なデータ構造によって促されました。
2つの文字列が与えられた 、私たちは彼らがそうだと言います -それらのダメラウ–レヴェンシュタイン距離 ¹が小さい場合、つまり 固定の 。非公式に、 変換に必要な削除、挿入、置換、および(隣接)スワップ操作の最小数です に 。それはで計算することができます動的プログラミングによる。ご了承くださいはメトリックであり、特に対称的です。
関心のある問題は次のとおりです。
セットを考える の ひも 長さが最大 、のカーディナリティは何ですか
?
同じ長さの2つの弦でも数が異なるため -closestrings²一般的な式/アプローチは見つけるのが難しい(不可能?)場合があります。したがって、所定の数ごとに明示的に数を計算する必要があるかもしれません、主な質問に私たちを導きます:
セットのカーディナリティを見つけることの(時間)複雑さは何ですか (任意) ?
必要な量は指数関数であることに注意してください なので、明示的な列挙は望ましくありません。効率的なアルゴリズムは素晴らしいでしょう。
それが役立つ場合は、実際に(大規模な)セットがあると想定できます。 文字列の、それは私たちが最初に強調表示された質問を解決することです。
- 可能な変形には、代わりにレーベンシュタイン距離の使用が含まれます。
- 検討する そして 。のセット-文字列を閉じる は (8ワード)および (10ワード)、それぞれ。