Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah saya boleh menjana semua kombinasi set yang diberikan dalam PHP menggunakan algoritma rekursif?

Bagaimanakah saya boleh menjana semua kombinasi set yang diberikan dalam PHP menggunakan algoritma rekursif?

DDD
DDDasal
2024-11-28 22:06:11296semak imbas

How can I generate all combinations of a given set in PHP using a recursive algorithm?

Menjana Semua Gabungan Menggunakan Algoritma dalam PHP

Salah satu tugas asas dalam sains komputer ialah menjana gabungan daripada set tertentu. Dalam konteks ini, gabungan merujuk kepada subset unsur daripada set asal, dengan saiz yang ditentukan.

Sebagai contoh, pertimbangkan set A = {A, B, C}. Begini cara kita boleh mendapatkan gabungan pelbagai saiz:

Menjana Gabungan Menggunakan Algoritma Rekursif

Untuk menangani masalah ini, kami boleh menggunakan algoritma rekursif yang meneroka semua kemungkinan kombinasi . Berikut ialah pecahan langkah demi langkah:

  1. Mulakan tatasusunan kosong $kombinasi untuk menyimpan gabungan.
  2. Jika $size bersamaan dengan 1, kami telah mencapai kes asas dan boleh mengembalikan $kombinasi.
  3. Lelaran melalui $chars dan semasa $combinations.
  4. Untuk setiap gabungan dan aksara, tambahkan aksara pada gabungan dan tambahkan gabungan baharu pada $new_combinations.
  5. Panggil secara rekursif fungsi pensampelan dengan $new_combinations yang dikemas kini dan pengurangan $size by 1.

Pelaksanaan dalam PHP

function sampling($chars, $size, $combinations = []) {
    if (empty($combinations)) {
        $combinations = $chars;
    }
    if ($size == 1) {
        return $combinations;
    }
    $new_combinations = [];
    foreach ($combinations as $combination) {
        foreach ($chars as $char) {
            $new_combinations[] = $combination . $char;
        }
    }
    return sampling($chars, $size - 1, $new_combinations);
}

Contoh

Mari kita pertimbangkan set asal kami A = {A, B, C}.

$chars = ['A', 'B', 'C'];
$output = sampling($chars, 2);
var_dump($output);

Output

array(9) {
  [0]=>
  string(2) "AA"
  [1]=>
  string(2) "AB"
  [2]=>
  string(2) "AC"
  [3]=>
  string(2) "BA"
  [4]=>
  string(2) "BB"
  [5]=>
  string(2) "BC"
  [6]=>
  string(2) "CA"
  [7]=>
  string(2) "CB"
  [8]=>
  string(2) "CC"
}

Algoritma ini menyediakan pendekatan sistematik untuk menjana semua kombinasi saiz tertentu daripada set tertentu. Sifat rekursifnya membolehkan penerokaan cekap semua kombinasi yang mungkin, tanpa mengira saiz set input.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menjana semua kombinasi set yang diberikan dalam PHP menggunakan algoritma rekursif?. 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