Выбрать числа из множеств, чтобы они не пересекались? Всем привет!
Имеются множества, например A = [0- 100], B = [101-544], C = [555-1400], D = [1401-2346
Нужно случайным образом выбрать 2 числа из разных множеств, как это лучше сделать
При этом нужно сохранять вероятности выпадения того или иного множеств
Есть один вариант
1. Генерируем 1 случайное число из диапазона 0-2346 (например, 105
2. Получаем множество и границы этого множества (мн. B, границы 101-554
3. Генерируем второе число. Если это число опять в множестве B, то повторяем генерацию. И так до тех пор, пока не будет получено любое другое множеств
Но есть минус, при очень больших диапазонах, может несколько раз выпадать число из одного и того же диапазон
Может есть более эффективные алгоритмы
Заранее спасибо за ответы

21 Авг 2019 в 06:04
136 +1
0
Ответы
1

Для более эффективного подхода можно использовать следующий алгоритм:

Вычислить суммарное количество чисел в каждом множестве (например, в A - 101, в B - 444, в C - 846, в D - 946).Сгенерировать случайное число от 1 до суммарного количества чисел во всех множествах.Определить, из какого множества было выбрано число на основе сгенерированного случайного числа и количества чисел в каждом множестве.Сгенерировать второе число из другого множества (не из того же, что и первое число), учитывая вероятности выпадения чисел из каждого множества.

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

20 Апр в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 559 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир