Jana Nombor Rawak Berwajaran
Penjanaan nombor rawak berwajaran melibatkan pemilihan nombor rawak daripada julat di mana kebarangkalian setiap nombor ditentukan oleh berat badan. Tugas ini timbul dalam pelbagai aplikasi, seperti simulasi dan permainan.
Penyelesaian Awal
Pendekatan biasa ialah pensampelan penolakan, seperti yang ditunjukkan dalam menyediakan kod ColdFusion. Kaedah ini melibatkan penciptaan jadual carian dengan elemen diedarkan mengikut beratnya. Walau bagaimanapun, pendekatan ini mempunyai had, seperti overhed linear dalam membina jadual dan isu penggunaan memori yang berpotensi.
Strategi Alternatif
Pelaksanaan
Pelaksanaan rawak berwajaran penjanaan nombor dalam JavaScript menggunakan pensampelan alias:
function weightedRand(weights) { // Build the alias table let table = []; let totalWeight = 0; for (let i = 0; i < weights.length; i++) { totalWeight += weights[i]; } for (let i = 0; i < weights.length; i++) { let prob = weights[i] / totalWeight; let alias = i; table.push({ prob: prob, alias: alias }); } // Generate a random number return function() { let r = Math.random() * totalWeight; let i = 0; let alias = -1; while (i < table.length && alias === -1) { if (r < table[i].prob) { alias = i; } else { r -= table[i].prob; i = table[i].alias; } } return alias; } }
Atas ialah kandungan terperinci Bagaimanakah Penjanaan Nombor Rawak Berwajaran Boleh Dioptimumkan untuk Kecekapan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!