Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah algoritma `std::next_permutation` berfungsi dan apakah yang diwakili oleh pembolehubah `i`, `j` dan `k`?

Bagaimanakah algoritma `std::next_permutation` berfungsi dan apakah yang diwakili oleh pembolehubah `i`, `j` dan `k`?

Barbara Streisand
Barbara Streisandasal
2024-11-08 03:23:02205semak imbas

How does the `std::next_permutation` algorithm work, and what do the variables `i`, `j`, and `k` represent?

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:

  • i: Penunjuk ke unsur paling kiri bagi jujukan menurun.
  • j: Penunjuk kepada elemen di sebelah kanan i.
  • k: Penunjuk ke elemen di sebelah kanan i yang serta-merta lebih besar daripada i.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn