1

私が取り組んでいるいくつかの研究のためにいくつかのJavaコードに取り組んでおり、ArrayListのすべての順列を反復処理する方法が必要です。ここで尋ねられた以前の質問をいくつか見てきましたが、ほとんどは私がやりたいことではありませんでした。近いものには、文字列と Perl で書かれたサンプル コードを扱う回答がありました。それが機能するように...実際には機能しません。

理想的には、私が 0 から list.size() に移動する関数 permute(list, i) を作成するのに役立つヒント/コード スニペットを探しています! ArrayList のすべての順列を教えてくれます。

4

2 に答える 2

6

0から(n!-1)まで数える方法があり、n個の要素のリストのすべての順列をリストします。階乗数法を使用して数値を書き直し、使用する順列を決定するためのエンコードされた方法として数値を解釈するという考え方です。これに興味がある場合は、このアルゴリズムのC++実装があります。また、このトピックに関するビジュアルが必要な場合に備えて、これについても一度話しました。

お役に立てれば!

于 2012-08-15T20:00:42.940 に答える
3

すべての順列を反復するだけで十分な場合は、次の回答を参照してください: Stepping through all permutations one swap at a time。与えられた に対してn、反復子は への数値のすべての順列を生成し0ます(n-1)。数値の順列を配列要素の順列に変換する別の反復子に単純にラップできます。int[](イテレータ内を任意の配列/リストに置き換えることはできないことに注意してください。アルゴリズムは数値で動作する必要があります。)

于 2012-08-15T20:10:49.730 に答える