случайный — PHP ранд, но с большей вероятностью получить еще один номер?

У меня есть php-файл, в котором я хочу получить случайное число, но я хочу, чтобы с вероятностью 80% оно равнялось 1. А затем с 20% — 2, 3 или 4. Обычно вы можете сделать что-то вроде этого:

rand(1, 4)

Но я хочу иметь больше шансов получить 1как я объяснил.

1

Решение

Вы можете использовать другой ранд:

$rand = rand(1, 10);

if ($rand <= 8)
$value = 1;
else
$value = rand(2,4);
10

Другие решения

Сгенерируйте число в [-10, 4] и преобразуйте:

$value = max(1, rand(-10, 4))

Это будет иметь правильное распределение и должно хорошо работать. Это не так легко, как решение с двумя розыгрышами, но будет быстрее.

4

Хотя ответы @Bathsheba и @djidi являются лучшими. Здесь другой подход.
Так как 1 часть должна 80% и 2,3,4 должно быть 20%, мы умножаем количество сгенерированных случайных чисел таким образом, чтобы 3 числа равнялись 20% (в этом случае получим 15):

<?php

$random = rand(1,15);

$result = 0;
switch($random) {
case 2:
case 3:
case 4:
$result = $random;
break;
default:
$result = 1;
}

echo $result;

Шанс получить 1 = 12/15 = 0,8
Шанс получить либо 2, 3, либо 4 = 1/15 = 0,066666666667

В ответ Вирсавии:
Шанс получить 1 = 12 * 1/15 = 12/15 = 0,8 (поскольку между -10 и 4 существует 15 чисел)
Шанс получить либо 2, 3, либо 4 = 1/15 = 0,066666666667 (так как только 3 числа выживают max() неизмененный)

В ответе Джиди:
Шанс получить 1 = 8/10 = 0,8
Шанс получить 2, 3 или 4 = 2/10 * 1/3 = 2/30 = 1/15 = 0,066666666667

Математика остается прежней =)

1
По вопросам рекламы [email protected]