Rumah > Soal Jawab > teks badan
Bagaimana untuk mengisih data mengikut kebarangkalian supaya setiap selang kebarangkalian mempunyai keputusan?
Sebagai contoh, andaikan terdapat satu set data seperti berikut
{
a: 40,
b: 20,
c: 10,
d: 5,
e: 5,
f: 5,
g: 5,
h: 5,
i: 3,
j: 2
}
Key ialah nilai yang hendak diisih, dan nilai ialah kebarangkalian setiap nilai yang muncul pada kedudukan itu dalam tatasusunan Sebagai contoh, a mempunyai kebarangkalian 40% untuk muncul pada kedudukan 0 dalam tatasusunan , a mempunyai peluang 40% untuk dipaparkan pertama dalam tatasusunan, dan kemudian yang lain diisih mengikut algoritma berdasarkan kebarangkalian.
Penyelesaian semasa saya (Kaedah Rendah, dan ia tidak boleh terus disokong apabila tatasusunan mengembang):
1 Bahagikan selang mengikut kebarangkalian sedia ada, dengan mengandaikan bahawa selang a ialah 0-40, dan selang b ialah. 40-60, c ialah 60-70, dan seterusnya
2 Gunakan fungsi untuk mendapatkan nombor rawak dalam julat 1-100, dan kemudian lemparkan hasilnya (iaitu, letakkannya dalam selang yang sepadan)
Kod adalah seperti berikut (mencari idea pengoptimuman)
public function getRandValue($rate, $max, $min, $arr)
{
while (count($rate)) {
$rand = $this->getRand($min, $max);
if (0 < $rand && $rand <= 40) {
$num = 40;
} else if (40 < $rand && $rand <= 60) {
$num = 20;
} else if (60 < $rand && $rand <= 70) {
$num = 10;
} else if (70 < $rand && $rand <= 75) {
$num = 5;
} else if (75 < $rand && $rand <= 80) {
$num = 5;
} else if (80 < $rand && $rand <= 85) {
$num = 5;
} else if (85 < $rand && $rand <= 90) {
$num = 5;
} else if (90 < $rand && $rand <= 95) {
$num = 5;
} else if (95 < $rand && $rand <= 98) {
$num = 3;
} else if (98 < $rand && $rand <= 100) {
$num = 2;
}
if (!in_array($num, $arr) && in_array($num, array(40, 20, 10, 3, 2))) {
$arr[] = $num;
} elseif (!in_array($num, array(40, 20, 10, 3, 2))) {
$arr[] = $num;
}
if (count($arr) >= 10) {
break;
}
}
return $arr;
}
Masalah yang dihadapi: (penghakiman in_array adalah kerana nilai selang ini hanya boleh dikira sekali)
1 Nilai yang dikira tidak semestinya mempunyai nilai setiap selang
2
黄舟2017-05-24 11:35:58
Saya rasa ada masalah dengan soalan ini Input sebegitu pun tidak menjamin bahawa pengedaran yang memenuhi syarat wujud.
Dengan {a: 60, b: 40}
为例:全排列的空间是{ab, ba}
. Kemudian mengikut definisi anda sepatutnya:
a出现在位置0的概率为60%,所以 P(ab) = 0.6
且
b出现在位置1的概率为40%,所以 P(ab) = 0.4
我想大声告诉你2017-05-24 11:35:58
Sama seperti apa yang saya tulis == Saya juga ingin tahu bagaimana untuk mengembangkan