Os algoritmos de arranjo e combinação são amplamente utilizados e precisam ser dominados. Para diminuir o limiar, este artigo se concentra principalmente na lógica e na simplicidade do algoritmo, mas não presta atenção à eficiência do algoritmo. Combinando a implementação em livros on -line e suas próprias necessidades, existem quatro objetivos aqui:
1. Arranjo completo de todos os elementos: o arranjo completo de AB é AB, BA (Relacionado à Ordem);
2. Combinação completa de todos os elementos: a combinação completa de AB é A, B, AB (ordem irrelevante);
3. Descubra quais são as combinações de selecionar os elementos M entre os elementos n: a combinação de 2 elementos no ABC é AB, AC, BC;
4. Descubra quais são os arranjos para a seleção de M elementos entre os elementos: os arranjos para a seleção de 2 elementos no ABC são AB, BA, AC, CA, BC, CB;
Pode -se descobrir que, depois de encontrar o arranjo de selecionar M elementos entre os elementos N, organizamos o conjunto de elementos (matrizes) compostos por cada combinação depois de encontrar o método de combinação de seleção de M elementos entre os elementos, portanto, é uma função de montagem e os exemplos não estão listados. Para os outros três objetivos, consulte o código:
Classe final public PermuTationCombinationHolder { / ** Combinação completa de elementos da matriz* / Combinação de vazio estático (char [] chars) {char [] subchars = new char [chars.length]; // Matrizes que armazenam dados de subcombinação // O problema de toda a combinação é selecionar 1 elemento de todos os elementos (indicado como n), além da combinação de 2 elementos ... mais a soma da combinação de n elementos para (int i = 0; i <chars.length; ++ i) {final int m = i +1; combinação (chars, chars.length, m, subchars, m); }} /*** Implementação da combinação de n elementos com n elementos. O princípio é o seguinte: * Selecione de trás para a frente, selecione a posição I e, em seguida, selecione M-1 no primeiro I-1. * Por exemplo: 3 elementos são selecionados de 1, 2, 3, 4, 5. * 1) depois de selecionar 5, depois selecionar 2 nos primeiros 4 primeiros e selecionar 2 nos 4 primeiros 4 é outro subproblema, apenas recursivo; * 2) Se você não incluir 5, selecione 4 diretamente, selecione 2 nos 3 primeiros e selecionar 2 nos três primeiros é outro subproblema, apenas recursivo; * 3) Se você não incluir 4, selecione 3 diretamente e selecione 2 nos primeiros 2 e há apenas dois nos 2 primeiros. * Olhando para a direção vertical, 1 e 2 e 3 são um loop, o valor inicial é 5 e o valor final é m. * Olhando para a direção horizontal, esse problema é um recursivo de M-1 no primeiro I-1. */combinação de vazio estático (char [] chars, int n, int m, char [] subchars, int subn) {if (m == 0) {// exportar para (int i = 0; i <subn; ++ i) {System.out.print (subchars [i]); } System.out.println (); } else {for (int i = n; i> = m; --i) {// selecione subchars [m - 1] = chars [i - 1]; // Selecione uma combinação (chars, i - 1, m - 1, subchars, subn); // selecione M-1 no primeiro I-1 para recursão}}}}/ ** Permutação completa dos elementos da matriz*/ Permutação de void estático (char [] chars) {Permutação (chars, 0, chars.length-1); } /** Subarra a matriz do índice começa a índice final Participe em plena permutação* /Permutação de vazio estático (char [] chars, int Begin, int end) {if (begin == end) {// a saída é quando apenas o último caractere é deixado para (int i = 0; i <chars.Length; } System.out.println (); } else {for (int i = Begin; i <= end; ++ i) {// Cada caractere é corrigido no primeiro if (canwap (chars, comece, i)) {// deduplicar swap (chars, começar, i); // Swap Permutação (chars, Begin + 1, End); // encontra recursivamente toda a permutação da troca de sub-maiores (chars, começo, i); // Restauração}}}}} Swap void estático (char [] chars, int, int para) {char temp = chars [de]; chars [de] = chars [para]; chars [para] = temp; } estático booleano canwap (char [] chars, int em começo, int end) {for (int i = começo; i <end; ++ i) {if (chars [i] == chars [end]) {return false; }} retornar true; } public static void main (string [] args) {final char [] chars = new char [] {'a', 'b', 'c'}; permutação (chars); System.out.println ("========================================================= System.out.println (chars);}}}}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.