Penjanaan Pilihatur Pantas Menggunakan Algoritma Knuth
Mengoptimumkan penjanaan pilih atur ialah masalah asas dalam sains komputer. Ini amat penting apabila berurusan dengan set data yang besar, di mana masa yang diperlukan untuk menghitung semua pilih atur boleh menjadi penting. Coretan kod berikut membentangkan algoritma yang cekap untuk menjana pilih atur, yang dikenali sebagai Algoritma Knuth:
private static bool NextPermutation(int[] numList) { // Find the largest index j such that a[j] < a[j + 1]. int largestIndex = -1; for (int i = numList.Length - 2; i >= 0; i--) { if (numList[i] < numList[i + 1]) { largestIndex = i; break; } } // If no such index exists, the permutation is the last permutation. if (largestIndex < 0) return false; // Find the largest index l such that a[j] < a[l]. int largestIndex2 = -1; for (int i = numList.Length - 1 ; i >= 0; i--) { if (numList[largestIndex] < numList[i]) { largestIndex2 = i; break; } } // Swap a[j] with a[l]. int tmp = numList[largestIndex]; numList[largestIndex] = numList[largestIndex2]; numList[largestIndex2] = tmp; // Reverse the sequence from a[j + 1] up to and including the final element a[n]. for (int i = largestIndex + 1, j = numList.Length - 1; i < j; i++, j--) { tmp = numList[i]; numList[i] = numList[j]; numList[j] = tmp; } return true; }
Algoritma ini beroperasi dalam masa O(n^2), dengan n mewakili bilangan elemen dalam senarai input. Ia menggunakan beberapa pengoptimuman untuk meminimumkan pengiraan, termasuk:
Pengoptimuman ini memastikan penjanaan pilih atur seterusnya yang cekap dalam satu set, menjadikan algoritma ini sangat sesuai untuk aplikasi yang memerlukan pilih atur pantas generasi.
Atas ialah kandungan terperinci Bagaimanakah Algoritma Knuth Boleh Menjana Pilihatur Dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!