Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kocok Fisher-Yates Mencapai Kocok Rawak Masa Linear?

Bagaimanakah Kocok Fisher-Yates Mencapai Kocok Rawak Masa Linear?

Barbara Streisand
Barbara Streisandasal
2025-01-21 14:06:11435semak imbas

How Can the Fisher-Yates Shuffle Achieve Linear-Time Random Shuffling?

Algoritma shuffling Fisher-Yates: algoritma shuffling masa linear

Kecekapan adalah penting apabila mengisih senarai integer secara rawak. Walaupun kaedah asal dalam soalan cuba mencapai rawak, ia mungkin menghadapi masalah kecekapan semasa pemprosesan, terutamanya menjelang akhir.

Penyelesaian yang lebih cekap ialah algoritma shuffling Fisher-Yates, algoritma masa linear yang memastikan penyusunan semula senarai input yang benar-benar rawak. Tidak seperti pendekatan asal, yang bergantung pada tatasusunan Boolean untuk menjejaki elemen yang ditukar, algoritma shuffling Fisher-Yates mengambil pendekatan yang lebih mudah.

<code class="language-c#">for (int i = iItemCount - 1; i >= 1; i--)
{
    int j = random.Next(i + 1);
    int temp = values[j];
    values[j] = values[i];
    values[i] = temp;
}</code>

Algoritma berfungsi dengan menukar elemen semasa berulang kali dengan elemen yang dipilih secara rawak sebelum ini dalam senarai. Semasa algoritma diteruskan, ia mengecilkan julat elemen yang tidak diisih, dengan berkesan mengocok keseluruhan senarai dalam masa O(n).

Menggunakan algoritma shuffling Fisher-Yates, anda boleh menyusun semula senarai integer dengan cekap dan rawak, mengelakkan kemungkinan perangkap algoritma asal.

Atas ialah kandungan terperinci Bagaimanakah Kocok Fisher-Yates Mencapai Kocok Rawak Masa Linear?. 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