Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Равномерная пропорция.
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Всем добра!Как случайным образом определить равномерную пропорцию между N сегментами.Например 4 сегмента случайная пропорция = [0.27, 0.33, 0.21, 0.19].То есть сумма всех сегментов равна 1.Условие что бы пропорция была равномерная.
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Ваш алгоритм не правильно работает.
----- $i = 0;
$i = $i++ + ++$i; ?
Строитель
Отправлено: 10 Января, 2018 - 19:52:51
Участник
Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 74 раз(а)
jonston, тогда подождите, может кто-то ещё подскажет.
Sail
Отправлено: 10 Января, 2018 - 20:56:44
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
jonston, напомните, пожалуйста, что есть "равномерная" пропорция?
Помню про геометрическую, арифметическую, гармоническую... а вот равномерная?
Из первого сообщения понятно, что "случайная" - это просто N случайных величин, сумма которых === 1, чего не сказать о "равномерной" (и примера для ясности нет...)
jonston
Отправлено: 11 Января, 2018 - 12:37:28
Посетитель
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Sail пишет:
jonston, напомните, пожалуйста, что есть "равномерная" пропорция?
Помню про геометрическую, арифметическую, гармоническую... а вот равномерная?
Из первого сообщения понятно, что "случайная" - это просто N случайных величин, сумма которых === 1, чего не сказать о "равномерной" (и примера для ясности нет...)
Подразумеваю то, что для каждой части есть равный шанс получить тот или иной процент.
----- $i = 0;
$i = $i++ + ++$i; ?
Строитель
Отправлено: 11 Января, 2018 - 13:16:59
Участник
Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 74 раз(а)
jonston пишет:
Подразумеваю то, что для каждой части есть равный шанс получить тот или иной процент.
А как тогда все эти части "вместить" в единицу? К примеру, 1 / 4 = 0.25; Если одна из случайно сгенерированных четырех четвертей получит значение 0.98, то для второй четверти подойдёт 0.01 или 0.02. А вот для четвёртой (последней) четверти значения закончились, т.к. диапазон 1 исчерпан.
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Строитель пишет:
А как тогда все эти части "вместить" в единицу? К примеру, 1 / 4 = 0.25; Если одна из случайно сгенерированных четырех четвертей получит значение 0.98, то для второй четверти подойдёт 0.01 или 0.02. А вот для четвёртой (последней) четверти значения закончились, т.к. диапазон 1 исчерпан.
Вот опишу не правильный алгоритм.Вернее он правильный но не совсем.
1. Берем рандом от 0 до 1.Получается скажем 0.7.Остаток 0.3.
2. От остатка берем еще рандом от 0 до 0.3.Получается скажем 0.1.
3. Повторяем операцию до нужного количества частей.
При таком алгоритме у предыдущей части шанс быть больше последующей больше.
То есть насколько я понимаю, нужно после всех операций перемешать массив, что бы не разброс был равномерным.Ну это я так думаю.
----- $i = 0;
$i = $i++ + ++$i; ?
Строитель
Отправлено: 11 Января, 2018 - 17:41:08
Участник
Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 74 раз(а)
jonston пишет:
1. Берем рандом от 0 до 1.Получается скажем 0.7
А если получаем 0.8 ? Или 0.9 ? Последний мой пример из предыдущего поста тоже не подходит?
jonston
Отправлено: 11 Января, 2018 - 19:31:57
Посетитель
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
Строитель пишет:
jonston пишет:
1. Берем рандом от 0 до 1.Получается скажем 0.7
А если получаем 0.8 ? Или 0.9 ? Последний мой пример из предыдущего поста тоже не подходит?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.