バックトラックを使用して順列を学習しようとしています。私は次のコードを書いたが、最初の出力の後に停止する。バックトラックを使用したPythonの置換
def permutations(str_in, soFar):
if len(str_in) != 0:
for c in str_in:
soFar.append(c)
temp_str = str_in
temp_str.remove(c)
print temp_str, soFar
permutations(temp_str, soFar)
else:
print soFar
inp = "ABCD"
str_in = list(inp)
permutations(str_in, [])
これは私がこれを取得しています出力されます:
['B', 'C', 'D'] ['A']
['C', 'D'] ['A', 'B']
['D'] ['A', 'B', 'C']
[] ['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
私は、これは単純なものであると確信しているが、私はここで作っているものを誤って理解することができませんよ。
予想される出力は? – Miket25
2つの問題がありますが、根本原因は同じです。 - 'temp_str'は入力リストの_copy_になるように設計されていますが、参照を取りますので、入力と再帰の停止を素早く完了します。- ' soFar'は印刷後にリセットするか、 (以前の結果も含まれています)。私は解決策を投稿していません。これはまだ重複が生じるためです。それが適切なアルゴリズムであるかどうかは分かりませんが、それは良い方法です。 –
私は[A、B、C、D]、[A、B、D、C]などのすべての可能なパーミュテーションを生成しようとしています。 – akhilc