Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah algoritma `std::next_permutation` berfungsi dan apakah yang diwakili oleh pembolehubah `i`, `j` dan `k`?
std::next_permutation Penjelasan Pelaksanaan
Soalan:
Bagaimanakah std::next_permutation kerja algoritma? Apakah yang diwakili oleh pembolehubah i, j dan k, dan bagaimanakah nilainya berubah semasa pelaksanaan?
Memahami Konsep:
Untuk memahami std::next_permutation, kita boleh melihat pilih atur sebagai nombor dengan digitnya diwakili oleh unsur. Matlamatnya ialah untuk menjana pilih atur seterusnya dalam tertib "menaik", meminimumkan jumlah yang mana bilangan itu bertambah.
Gelung Teras:
Di tengah-tengah algoritma terletak pada gelung sementara:
while (true) { It j = i; --i; if (*i < *j) { // ... } if (i == begin) { // ... } }
Gelung ini berulang ke belakang dari elemen terakhir kepada elemen pertama. Wawasan utama ialah kita hanya perlu menukar kedudukan digit apabila segala-galanya di sebelah kanan adalah dalam tertib menurun.
Mencari Urutan Turun Paling Kiri:
Jika unsur-unsur yang ditunjuk oleh i dan j adalah dalam tertib menaik, kita ada menemui jujukan menurun paling kiri.
Bertukar dan Menyusun Semula:
Apabila kita menemui jujukan menurun paling kiri, kita menukar digit yang ditunjuk oleh i dengan digit "terbesar seterusnya" di sebelah kanannya. Digit ini dikenal pasti dengan mengulang dari penghujung dan berhenti apabila kita menjumpai digit yang lebih besar daripada i.
Selepas bertukar, baki digit di sebelah kanan sudah dalam tertib menurun, jadi kita hanya perlu terbalikkannya untuk mendapatkan pilih atur seterusnya.
Spesifik Pembolehubah:
Atas ialah kandungan terperinci Bagaimanakah algoritma `std::next_permutation` berfungsi dan apakah yang diwakili oleh pembolehubah `i`, `j` dan `k`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!