私は 7 文字の文字列を取得して、可能なすべての 3 文字と 4 文字の順列を生成しようとしています。これは、再帰が便利なように思えます (私が見たほとんどすべての順列ジェネレーターは再帰的です) が、繰り返しを避ける方法に行き詰まっています。つまり、入力文字列が「aabcdef」の場合、どの順列にも「a」の文字が 3 文字以上含まれないようにします。
あなたが提供できる洞察は大歓迎です。
私は 7 文字の文字列を取得して、可能なすべての 3 文字と 4 文字の順列を生成しようとしています。これは、再帰が便利なように思えます (私が見たほとんどすべての順列ジェネレーターは再帰的です) が、繰り返しを避ける方法に行き詰まっています。つまり、入力文字列が「aabcdef」の場合、どの順列にも「a」の文字が 3 文字以上含まれないようにします。
あなたが提供できる洞察は大歓迎です。
これは、反復と再帰の両方で実行できます。ここにまともな順列ジェネレーターがあります。これはニーズに合わせて汎用化 (List<T>
要素の取得) できるため、数値のリスト、文字列 (文字のリスト) などを取得できます。
キャラクターをキャラクターのバッグの中の要素として考えてみてください。
動作するはずの擬似コードは次のとおりです。
permute ( bag < character > : theBag, integer : length, string : resultSoFar )
if length <= 0 then:
print resultSoFar
exit
end-if
for each x in theBag:
nextResult = resultSoFar + x
nextBag = theBag - x
permute( nextBag, length - 1, nextResult )
end-for
end-method
幸運を!
これはRubyにありますが、役立つ場合があります:http: //trevoke.net/blog/2009/12/17/random-constrained-permutations-in-ruby/
文字のセットを取る関数を作成し、指定した文字で始まる n 個の順列 (3 または 4) のセットを返すようにします。次に、セット内の一意の文字ごとに 1 回実行します。
完全な結果セットは、サブセットの結合になります。
@ Chip Uni: あなたのコードを実装すると、長さ x から最大までのすべての順列が生成されました。そのため、7 文字を含むバッグを長さ 3 で入力すると、長さ 3 から 7 のすべての順列が生成されました。ただし、長さ 4 を超える結果をすべて削除するのは簡単なことでした。
どうもありがとうございました!あなたの提案と支援に感謝します。