Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Kita Boleh Menemui Pilihatur Ke-N bagi Set Secara Terus Tanpa Menjana Semua Pilihatur Terdahulu?

Bagaimanakah Kita Boleh Menemui Pilihatur Ke-N bagi Set Secara Terus Tanpa Menjana Semua Pilihatur Terdahulu?

Barbara Streisand
Barbara Streisandasal
2024-12-05 09:35:14737semak imbas

How Can We Find the N-th Permutation of a Set Directly Without Generating All Preceding Permutations?

Mendapatkan Pilihatur ke-n Secara Terus

Tugasnya ialah untuk mencari pilihatur ke-n bagi satu set elemen tanpa mengira semua secara eksplisit pilih atur sebelumnya. Ini boleh dicapai menggunakan algoritma pintar yang dipanggil Algoritma Factoradic.

Algoritma Factoradic memanfaatkan penguraian faktorial indeks pilih atur. Dengan berulang kali melakukan pembahagian Euclidian dengan nombor faktorial, kami memperoleh satu set hasil bahagi yang mewakili pilih atur.

Begini cara algoritma berfungsi:

  1. Penguraian Faktor: Bahagikan indeks pilih atur n dengan faktorial bagi (n-1)!, (n-2)!, dan seterusnya pada. Hasil bahagi disimpan dalam tatasusunan.
  2. Permutasi Perwakilan: Setiap hasil bahagi mewakili indeks unsur yang dipilih daripada elemen yang tinggal.
  3. Pelarasan: Memandangkan hasil bagi tidak mengambil kira nilai sebelumnya, ia perlu dilaraskan untuk mencerminkan pilih atur yang betul. Tambahkan setiap hasil bahagi dengan bilangan hasil bahagi sebelumnya yang lebih rendah atau sama dengannya.

Sebagai contoh, mari cari pilih atur ke-3 bagi {'A', 'B', 'C'}.

  • n = 3
  • Petikan: [1, 0, 0]
  • Petikan Dilaraskan: [1, 0, 1]

Pilihan itu ialah 'B', 'A', 'C', yang sememangnya pilih atur ke-3 bagi set yang diberikan.

Kod C yang disediakan melaksanakan Algoritma Factoradic, menunjukkan cara untuk mendapatkan n-th pilih atur terus tanpa mengira yang sebelumnya.

Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Menemui Pilihatur Ke-N bagi Set Secara Terus Tanpa Menjana Semua Pilihatur Terdahulu?. 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