「料理」などの単語があり、その単語から作成できるすべての可能な単語のグラフを、各文字を他のすべての文字に置き換えて生成したい場合を考えてみましょう。重要な制限:文字の集合が単語であるかどうかを辞書に尋ねることはできますが、それは辞書へのインタフェースの限界です。辞書にすべてのn文字の単語を尋ねることはできません。その上すべての文字置換単語を生成するのに時間がかかりますか?
cook
/ | \
aook ... zook
/| \ /| \
aaok ... azok zaok ... zzok
とを次のような私はこれを想像
は、DAGを生成する再帰アルゴリズムになります。明らかに実際にはこれらの順列の多くは実際の言葉ではないと拒否されますが、最終的には生成されるすべての「言葉」を含むDAGを持つことになります。グラフの高さは、入力語の長さに1を加えたものになります。
最悪の場合、各置換は単語になります。最初のレベルは1語、第2レベルは25、次レベル(25 * 25)などです。したがって、nが単語の長さである場合、これはアルゴリズムが最悪の場合の時間複雑度が25^nであり、最悪の場合の記憶複雑性が25^nであることを意味すると考えていますか?
このアルゴリズムは、間違っているか非効率的に聞こえます。グラフはなぜDAGですか?最初の文字を変更して最初のレベルを開始するのはなぜですか?最初の3文字を変更せずに、おなら - >ファームのようなトランジションが許可されていますか(または元の値に変更されていますか)? – user2357112
グラフは指示と非循環のためDAGです。最初のレベルは最初の文字を変更することから始まります。なぜなら、各位置の文字をすべてのバリエーションに変更することによって、すべての可能な単語を生成しているからです。そして、あなたは最終的にそうすることによっておなら - >農場に行きます...しかし、あなたはまた手続き的にその言葉を歩いて 'ダーツ'、 '砦'などを生成します。すべての可能な単語のバリアントを生成する方法に関する別の提案がある場合は、それを聞いてうれしいです。 –
元の単語の任意の数の文字を変更してすべての単語を見つけるだけの場合は、長さnのすべての単語のリストを単純に辞書から取り出すことができます。 – Faibbus