@Narts

Выбрать числа из множеств, чтобы они не пересекались?

Всем привет!
Имеются множества, например A = [0- 100], B = [101-544], C = [555-1400], D = [1401-2346]

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

Есть один вариант:
1. Генерируем 1 случайное число из диапазона 0-2346 (например, 105)
2. Получаем множество и границы этого множества (мн. B, границы 101-554)
3. Генерируем второе число. Если это число опять в множестве B, то повторяем генерацию. И так до тех пор, пока не будет получено любое другое множество

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

Может есть более эффективные алгоритмы?
Заранее спасибо за ответы
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега Алгоритмы
♬♬
  1. Выбираете 1-е число из полного диапазона.
  2. Выкидываете множество выпавшего числа.
  3. Выбираете 2-е число из оставшегося диапазона.


Например:
  1. случайное из [0, 2346] оказалось 105 из диапазона "B"
  2. выкидываем диапазон B, остаётся [0, 1902], т.к. длина "B" 544-101+1 = 444, 2346 - 444 = 1902
  3. случайное из [0,1902] оказалось, например, 404. Для чисел выше 100 добавляем 444 и получаем 848 из диапазона "C" по старому стилю )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@MAGistr_MTM
Учусь программировать
А почему не выбрать сначала два диапазона, а потом для каждого из них выбрать число?
Ответ написан
@Izulle
Задача содержит внутреннее противоречие.
Допустим, у вас диапазоны такие: [0-1] [2-3] [4-5] [6-30005]
Как бы вы ни выбирали 2 числа из разных диапазонов, сохранять вероятности выпадения множеств не получится.
Сумма вероятностей выпадения чисел из множеств [0-1] [2-3] [4-5] будет примерно равна вероятности выпадения [6-30005], в то время как она должна быть в 10000 раз меньше.

Попробуйте переформулировать задачу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы