可能なすべての文字列の生成とは、文字列内の特定の文字を対応する記号に置き換えて、可能なすべての文字列を生成することです。サイズ「N」の文字列「s」と、サイズ「M」の文字ペアの順序なしマップ「mp」を取得します。ここで、文字列 "s" の mp[i][0] を mp[i][1] に置き換えることができるため、考えられるすべての文字列を生成することがタスクになります。
例例
リーリー
説明 -上記の例では、合計8つの文字列が生成されます。
リーリー
説明 - 上記の例では、合計 4 つの文字列が生成されます。
リーリー
説明 -上記の例では、合計2つの文字列が生成されます。
###方法###
このアプローチでは、総当たりの概念を使用して、可能なすべての組み合わせを見つけます。
まず、文字列、現在のインデックス、および指定されたマップをパラメータとして受け取る関数を作成します。戻り値の型は void になります。
この関数では、現在のインデックスが文字列のサイズと等しいという基本条件を定義し、文字列を出力して関数から返します。
それ以外の場合は、2 つのオプションがあります。1 つは、現在のインデックスを変更せずに次のインデックスに移動することです。これは常にオプションになります。
2 番目のオプションは、現在のキャラクターに代替キャラクターがある場合にのみ可能です。代替品が存在する場合は、代替品を呼び出します。
その後、関数から戻ります。これにより、必要な結果がすべて自動的に生成されます。 -
理解を深めるために、上記のメソッドのコードについて説明します。
###例###
リーリー
###出力###
リーリー
時間と空間の複雑さ
N 個の要素をバックトラックしただけなので、上記のコードの時間計算量は O(N*2^N) です (N は文字列 's' のサイズです)。
文字列を完全な文字列として送信し、文字列のコピーが同時に N 個存在する可能性があるため、上記のコードの空間複雑度は O(N*N) です。
バックトラッキングアルゴリズム
前の方法では、送信した文字列にはポインターがなかったため、多くのスペースを占有していました。空間と時間の複雑さを軽減するために、バックトラッキングの概念を使用します。
###例###
リーリー
###出力###
リーリー
時間と空間の複雑さ
N 個の要素をバックトラックしただけなので、上記のコードの時間計算量は O(N*2^N) です (N は文字列 's' のサイズです)。
上記のコードの空間計算量は O(N) です。これは、文字列のアドレスを送信しているためであり、ダウンするスタックは最大でも N 個だけです。
###結論は###
このチュートリアルでは、文字を指定された記号に置き換えることによって、考えられるすべての文字列を生成するプログラムを実装しました。ここでは、バックトラッキング手法について説明しました。コードの時間計算量は O(N*2^N) です。ここで、N は文字列のサイズであり、空間計算量は時間計算量と同じです。スペースの複雑さを軽減するために、バックトラッキング プロセスを実装しました。
以上が文字を指定された対応する記号で置き換えることによって形成されるすべての可能な文字列を生成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。