Rumah  >  Artikel  >  hujung hadapan web  >  Cara Menjana Nombor Rawak Berwajaran: Adakah Taburan Kebarangkalian Terkumpul Jawapannya?

Cara Menjana Nombor Rawak Berwajaran: Adakah Taburan Kebarangkalian Terkumpul Jawapannya?

Linda Hamilton
Linda Hamiltonasal
2024-11-11 04:09:03899semak imbas

How to Generate Weighted Random Numbers: Is Cumulative Probability Distribution the Answer?

Jana Nombor Rawak Berwajaran: Melampaui Persampelan Penolakan

Dalam bidang kebarangkalian, penjanaan nombor rawak berwajaran berfungsi sebagai alat penting untuk simulasi dan pemodelan statistik. Walaupun pensampelan penolakan sering berfungsi sebagai penyelesaian yang mudah, ia memberikan had dalam prestasi dan penggunaan memori.

Alternatif yang elegan muncul dalam bentuk taburan kebarangkalian terkumpul. Pendekatan ini menghapuskan keperluan untuk jadual carian yang telah dibina sebelumnya, yang membawa kepada penjimatan memori yang ketara dan prestasi masa tetap dalam memilih nilai. Begini cara ia berfungsi dalam JavaScript:

function weightedRand(spec) {
  var sum = 0;
  for (var i in spec) {
    sum += spec[i];
  }
  var r = Math.random() * sum;
  for (i in spec) {
    r -= spec[i];
    if (r <= 0) return i;
  }
}

Penjana nombor rawak berwajaran sering mencari aplikasi dalam senario seperti:

  • Simulasi peristiwa kebarangkalian
  • Pemilihan item daripada inventori dengan kebarangkalian yang berbeza-beza
  • Menjana set data realistik yang mematuhi pengagihan tidak seragam

Dalam kes tertentu, di mana pemberat diagihkan sama rata, pendekatan yang lebih mudah terbukti berkesan: hanya pilih indeks rawak daripada tatasusunan yang mewakili nilai yang mungkin. Walau bagaimanapun, kaedah ini adalah pendek untuk pengagihan berat yang tidak sekata.

Ingat, pilihan pelaksanaan bergantung pada faktor seperti bilangan pilihan, pengagihan pemberat dan ciri prestasi yang diingini.

Atas ialah kandungan terperinci Cara Menjana Nombor Rawak Berwajaran: Adakah Taburan Kebarangkalian Terkumpul Jawapannya?. 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