Выбрать числа из множеств, чтобы они не пересекались? Всем привет!
Имеются множества, например 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
160 +1
0
Ответы
1

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

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

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

20 Апр 2024 в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир