Как подмешать элементы в массив?

103
24 октября 2019, 14:00

Есть два диапазона, например от 25 до 100 и от 100 до 200. Минимум при этом равен 25, а максимум 200. Я вызываю функцию rand(25,200) при этом, шанс того что выпадет число из первого диапазона примерно 42%, а из второго 58%. Хочу сделать так, чтобы шанс выпадения числа из второго диапазона было примерно 75%.

Думаю решить проблему следующим образом. Создаю массив, в него записываю сначала все элементы из двух диапазонов:

$myarray = array();
for($i = 25; $i<=200;$i++){
    $myarray[] = $i;
}

Таким образом если вызвать rand(0,count($myarray)), то она вернет индекс случайного элемента массива, в этом случае вероятность выпадения чисел из второго диапазона остается прежней, а именно 58%. По идее теперь нужно подмешать в массив ещё немного числе из второго диапазона, чтобы их стало больше и они выпадали чаще.

$a_range_elements = 100-25+1; //Количество элементов в первом диапазоне
$adding_elemets = ($a_range_elements * 100/ 25) - $a_range_elements; //Кол-во элементов которые нужно добавить в массив, чтобы второй диапазон составлял 25% от общего кол-ва элементов

В моем случае нужно добавить (76*100/25)-76 = 228 элементов. Таким образом всего у нас будет в массиве 228 + 76 = 304 элемента, и 76 из них - первый диапазон, что составляет 76*100/304 = 25%, т.е. второй диапазон - 75%.

Собственно вопрос, как теперь подмешать эти элементы в массив? Диапазоны могут быть довольно большие и наверное что-то типа этого мне не очень подходит:

for($i = 0; $i<=304;$i++){
    $myarray[] = rand(100,200);
}
Answer 1

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

Сначала выбрасываем число из диапазона 1-100. Если оно меньше 25 (вероятность 25%), то выбрасываем число из диапазона 25-100, а если больше 25 (вероятность 75%), то выбрасываем число из диапазона 100-200.

READ ALSO
APi получение данных через curl

APi получение данных через curl

Где ошибся и как получить данные? сейчас пишет страница недоступна

123
Как сохранить изображение? [дубликат]

Как сохранить изображение? [дубликат]

На данный вопрос уже ответили:

105
как сделать чтобы доступ к регистрации в dokuwiki был только с одной (например главной) страницы

как сделать чтобы доступ к регистрации в dokuwiki был только с одной (например главной) страницы

как сделать чтобы доступ к регистрации в dokuwiki был только с одной (например главной) страницы

101
Как хранить данные XML или что?

Как хранить данные XML или что?

Есть сайт об играхНа каждой странице есть ссылка на покупку игры в магазине, в котором самая низкая цена

133