Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Kocok Tatasusunan dalam JavaScript Dengan Cekap Menggunakan Algoritma Fisher-Yates?

Bagaimanakah Saya Boleh Kocok Tatasusunan dalam JavaScript Dengan Cekap Menggunakan Algoritma Fisher-Yates?

DDD
DDDasal
2024-12-27 21:24:17377semak imbas

How Can I Efficiently Shuffle an Array in JavaScript Using the Fisher-Yates Algorithm?

Pengocokan Tatasusunan yang Cekap Menggunakan Algoritma Fisher–Yates

Dalam JavaScript, shuffling tatasusunan ialah operasi biasa yang sering digunakan dalam rawak atau pembangunan permainan. Untuk mengocok tatasusunan dengan berkesan, algoritma Fisher–Yates yang popular menyediakan pendekatan yang cekap.

Pelaksanaan Algoritma Fisher–Yates

Prinsip teras di sebalik algoritma ini melibatkan pertukaran elemen berulang kali daripada tatasusunan dengan dipilih secara rawak elemen. Proses ini berterusan sehingga semua elemen telah ditukar. Kod berikut melaksanakan algoritma ini:

/**
 * Shuffles an array in place.
 * @param {Array} a Array containing the elements to be shuffled.
 */
function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
}

Versi ES6

Dalam ES6, kod boleh dipermudahkan menggunakan tugasan memusnahkan:

/**
 * Shuffles an array in place. ES6 version.
 * @param {Array} a Array containing the elements to be shuffled.
 */
function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
}

Pelaksanaan Prototaip Array

Untuk meningkatkan kebolehbacaan kod, anda boleh menambah fungsi shuffle sebagai kaedah prototaip untuk tatasusunan:

Object.defineProperty(Array.prototype, 'shuffle', {
    value: function() {
        for (let i = this.length - 1; i > 0; i--) {
            const j = Math.floor(Math.random() * (i + 1));
            [this[i], this[j]] = [this[j], this[i]];
        }
        return this;
    }
});

Ini membolehkan anda hanya memanggil arr.shuffle() untuk mengocok tatasusunan bernama arr.

Contoh Penggunaan

Untuk menggunakan fungsi shuffle, anda boleh menyediakan pelbagai elemen sebagai input, seperti:

let myArray = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
shuffle(myArray);

Fungsi shuffle akan susun semula unsur-unsur dalam myArray secara rawak. Fungsi ini amat berguna dalam senario di mana anda memerlukan data rawak atau kocok kad dalam permainan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kocok Tatasusunan dalam JavaScript Dengan Cekap Menggunakan Algoritma Fisher-Yates?. 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