Выбрать числа из множеств, чтобы они не пересекались?
Всем привет!
Имеются множества, например A = [0- 100], B = [101-544], C = [555-1400], D = [1401-2346]
Нужно случайным образом выбрать 2 числа из разных множеств, как это лучше сделать?
При этом нужно сохранять вероятности выпадения того или иного множества
Есть один вариант:
1. Генерируем 1 случайное число из диапазона 0-2346 (например, 105)
2. Получаем множество и границы этого множества (мн. B, границы 101-554)
3. Генерируем второе число. Если это число опять в множестве B, то повторяем генерацию. И так до тех пор, пока не будет получено любое другое множество
Но есть минус, при очень больших диапазонах, может несколько раз выпадать число из одного и того же диапазона
Может есть более эффективные алгоритмы?
Заранее спасибо за ответы
#, например даны множества: A: [0-100], B: [101-300], C: [301-800], D: [801-1000]
Тогда вероятности что полученное число будет из того или иного множества будут: A - 10%, B - 20%, C - 50%, D - 20%
например даны множества: A: [0-100], B: [101-300], C: [301-800], D: [801-1000]
Тогда вероятности что полученное число будет из того или иного множества будут: A - 10%, B - 20%, C - 50%, D - 20%
это равномерное распределение?
оно априори не может вам гарантировать подряд идущие попадания в разные диапазоны
это ваш вопрос - исследовать (посчитать вероятности ;), на сколько будет искажено распределение, если вы будете рандомно выбирать диапазон, потом число в нем ;))
а альтернатива одна - то что описали сами сразу - генерить первый рандом, потом следующий, пока он не окажется в другом диапазоне. точка (большая и жирная)
Задача содержит внутреннее противоречие.
Допустим, у вас диапазоны такие: [0-1] [2-3] [4-5] [6-30005]
Как бы вы ни выбирали 2 числа из разных диапазонов, сохранять вероятности выпадения множеств не получится.
Сумма вероятностей выпадения чисел из множеств [0-1] [2-3] [4-5] будет примерно равна вероятности выпадения [6-30005], в то время как она должна быть в 10000 раз меньше.