配置と組み合わせアルゴリズムは広く使用されており、習得する必要があります。しきい値を下げるために、この記事は主にアルゴリズムのロジックと単純さに焦点を当てていますが、アルゴリズムの効率には注意を払っていません。オンライン帳の実装と独自のニーズを組み合わせることで、ここには4つの目標があります。
1。すべての要素の完全な配置:ABの完全な配置はAB、BA(注文関連)です。
2。すべての要素の完全な組み合わせ:abの完全な組み合わせはa、b、ab(順序無関係)です。
3。n要素間でm要素を選択する組み合わせを調べます。ABCの2つの要素の組み合わせは、AB、AC、BCです。
4. N要素間でM要素を選択するための配置は何ですか:ABCで2つの要素を選択するためのアレンジメントは、AB、BA、AC、CA、BC、CBです。
N要素間でM要素を選択する配置を見つけた後、n要素間でM要素を選択する組み合わせ方法を見つけた後、各組み合わせで構成される要素のセット(アレイ)を実際に配置するため、アセンブリ関数であり、例はリストされていません。他の3つの目標については、コードを参照してください。
パブリックファイナルクラスの順調CombinationHolder { / **配列要素の完全な組み合わせ* / static void Comboint(char [] chars){char [] subchars = new char [chars.length]; //サブコンビネーションデータを保存する配列組み合わせ(chars、chars.length、m、subchars、m); }} /*** n要素とn要素の組み合わせの実装。原則は次のとおりです。 *後ろから正面へ、[位置iを選択し、最初のI-1でM-1を選択します。 *たとえば、3つの要素が1、2、3、4、5から選択されます。 * 1)5を選択した後、最初の4で2を選択し、最初の4で2を選択することは別のサブ問題であり、再帰的です。 * 2)5を含めない場合は、4を直接選択し、最初の3で2を選択し、最初の3つで2を選択することは別のサブ問題で、再帰的です。 * 3)4を含めない場合は、3を直接選択してから、最初の2に2を選択します。最初の2に2つしかありません。 *垂直方向を見ると、1と2と3がループの場合、初期値は5、最終値はmです。 *水平方向を見ると、この問題は最初のI-1のM-1の再帰です。 */static voidの組み合わせ(chars、int n、int m、char [] subchars、int subn){if(m == 0){//エクスポート(int i = 0; i <subn; ++ i){system.out.print(subchars [i]); } system.out.println(); } else {for(int i = n; i> = m; -i){// select subchars [m -1] = chars [i -1]; //組み合わせを選択します(chars、i -1、m -1、subchars、subn); //再帰の最初のI-1からM-1を選択}}}}/ **配列要素の完全な順列*/ static void permutation(char [] char){permutation(chars、0、chars.length-1); } /**インデックスからの配列のサブアレイは、完全な順列に関与します。 } system.out.println(); } else {for(int i = begin; i <= end; ++ i){//各文字は最初のif(canswap(chars、begin、i)){// deduplicate swap(chars、begin、i); //順列をスワップ(chars、begin + 1、end); //サブアレイスワップの完全な順列を再帰的に見つけます(chars、begin、i); // restore}}}}} static void swap(char [] chars、int、int to){char temp = chars [from]; chars [from] = chars [to]; chars [to] = temp; } static boolean canswap(chars、int begin、int end){for(int i = begin; i <end; ++ i){if(chars [i] == chars [end]){return false; }} trueを返します。 } public static void main(string [] args){final char [] chars = new char [] {'a'、 'b'、 'c'};順列(chars); System.out.println( "==================================================================上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。