Algoritma pengaturan dan kombinasi banyak digunakan dan perlu dikuasai. Untuk menurunkan ambang batas, artikel ini terutama berfokus pada logika dan kesederhanaan algoritma, tetapi tidak memperhatikan efisiensi algoritma. Menggabungkan implementasi dalam buku online dan kebutuhan mereka sendiri, ada empat tujuan di sini:
1. Pengaturan penuh dari semua elemen: Pengaturan penuh AB adalah AB, BA (terkait pesanan);
2. Kombinasi penuh dari semua elemen: Kombinasi penuh AB adalah A, B, AB (urutan tidak relevan);
3. Cari tahu apa kombinasi dari pemilihan elemen M di antara elemen -elemen N: kombinasi 2 elemen dalam ABC adalah AB, AC, BC;
4. Cari tahu apa pengaturan untuk memilih elemen M di antara elemen N: pengaturan untuk memilih 2 elemen di ABC adalah AB, BA, AC, CA, BC, CB;
Dapat ditemukan bahwa setelah menemukan pengaturan pemilihan elemen M di antara elemen -elemen N, kami benar -benar mengatur serangkaian elemen (array) yang terdiri dari setiap kombinasi setelah menemukan metode kombinasi dalam memilih elemen M di antara elemen N, jadi ini adalah fungsi perakitan, dan contoh -contoh tidak terdaftar. Untuk tiga tujuan lainnya, lihat kodenya:
Public Final Class PermutationCombinationHolder { / ** Kombinasi penuh elemen array* / kombinasi statis batal (char [] chars) {char [] subchars = char baru [chars.length]; // array yang menyimpan data subkombinasi // Masalah seluruh kombinasi adalah untuk memilih 1 elemen dari semua elemen (dilambangkan sebagai n), ditambah kombinasi 2 elemen ... ditambah jumlah kombinasi elemen n untuk (int i = 0; i <chars.length; ++ i) {int int m = i +1; kombinasi (chars, chars.length, m, subchars, m); }} /*** Implementasi kombinasi elemen N dengan elemen N. Prinsipnya adalah sebagai berikut: * Pilih dari belakang ke depan, pilih Posisi I, lalu pilih M-1 di I-1 pertama. * Sebagai contoh: 3 elemen dipilih dari 1, 2, 3, 4, 5. * 1) Setelah memilih 5, kemudian memilih 2 di 4 pertama, dan memilih 2 di 4 pertama adalah sub-masalah lain, hanya rekursif; * 2) Jika Anda tidak menyertakan 5, pilih 4 secara langsung, lalu pilih 2 di 3 pertama, dan pilih 2 di tiga pertama adalah sub-masalah lain, hanya rekursif; * 3) Jika Anda tidak menyertakan 4, pilih 3 secara langsung, lalu pilih 2 di 2 pertama, dan hanya ada dua dalam 2 pertama. * Melihat arah vertikal, 1 dan 2 dan 3 kebetulan menjadi untuk loop, nilai awal adalah 5, dan nilai akhir adalah m. * Melihat arah horizontal, masalah ini adalah rekursif M-1 di I-1 pertama. */kombinasi void statis (char [] chars, int n, int m, char [] subchars, int subn) {if (m == 0) {// ekspor untuk (int i = 0; i <subn; ++ i) {System.out.print (subchars [i]); } System.out.println (); } else {for (int i = n; i> = m; --i) {// pilih subchars [m - 1] = chars [i - 1]; // Pilih kombinasi (chars, i - 1, m - 1, subchars, subn); // Pilih M-1 dari I-1 pertama untuk rekursi}}}}/ ** Permutasi penuh dari elemen array*/ void static permutation (char [] chars) {permutation (chars, 0, chars.length-1); } /** Subarrays in the array from index begin to index end participate in full permutation*/ static void permutation(char[] chars, int begin, int end) { if (begin == end) { //The exit is when only the last character is left for (int i = 0; i < chars.length; ++i) { System.out.print(chars[i]); } System.out.println (); } else {for (int i = begin; i <= end; ++ i) {// Setiap karakter ditetapkan untuk yang pertama jika (canSwap (chars, begin, i)) {// deduplicate swap (chars, begin, i); // pertukaran permutasi (chars, mulai + 1, akhir); // Rekursif menemukan permutasi penuh dari swap sub-array (chars, begin, i); // kembalikan}}}}} static void swap (char [] chars, int from, int to) {char temp = chars [dari]; chars [from] = chars [to]; chars [to] = temp; } static boolean canSwap (char [] chars, int begin, int end) {for (int i = begin; i <end; ++ i) {if (chars [i] == chars [end]) {return false; }} return true; } public static void main (string [] args) {final char [] chars = new char [] {'a', 'b', 'c'}; permutasi (chars); System.out.println ("======================================================================================================================================================================Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.