Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Случайный конь в вакууме / 25 сообщений из 223, страница 1 из 9
12.02.2020, 11:49
    #39925546
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Прошу прощения за такое название топика )

Вот задача.

На вход поступают случайные числа, допустим от 0 до 9, шанс выпадения любого из чисел одинаковый.
Однако нам нужны только случайные числа от 2 до 7, с таким же одинаковым шансом выпадения.

Решение, пропускать числа, не попадающие в рейндж, не очень интересно.
Нужно именно преобразование.
Можно что-то сохранять между операциями.
Но в идеале чистое математическое преобразование нужно :)
...
Рейтинг: 0 / 0
12.02.2020, 11:53
    #39925549
Gennadiy Usov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Случайные числа от 0 до 9 поступают с "отрезка" (0,9)

Надо сделать "отрезок" (0,5), брать случайные числа и прибавлять 2.
...
Рейтинг: 0 / 0
12.02.2020, 11:54
    #39925551
Имя пользователя1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
hVostt,

числа целые или вещественные? если второе, то 2 + r * 5 / 9
...
Рейтинг: 0 / 0
12.02.2020, 11:55
    #39925552
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Gennadiy Usov
Случайные числа от 0 до 9 поступают с "отрезка" (0,9)

Надо сделать "отрезок" (0,5), брать случайные числа и прибавлять 2.


Ну это понятно. Одинаковое распределение должно остаться. Все поступающие числа должны быть использованы.
...
Рейтинг: 0 / 0
12.02.2020, 11:56
    #39925553
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Имя пользователя1,

Целые. Но операции преобразования могут быть в поле вещественных чисел, а на выходе опять целое.
...
Рейтинг: 0 / 0
12.02.2020, 11:58
    #39925554
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Имя пользователя1
2 + r * 5 / 9


Отрезаем или округляем? Распределение гарантируется?
...
Рейтинг: 0 / 0
12.02.2020, 12:00
    #39925556
Имя пользователя1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
hVostt
Имя пользователя1
2 + r * 5 / 9


Отрезаем или округляем? Распределение гарантируется?
это только для вещественных...

боюсь, что равномерно смапить (0, 1, ... 9) в (2, 3, ..., 7) не получится без вспомогательного рандома
...
Рейтинг: 0 / 0
12.02.2020, 12:41
    #39925584
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Код: sql
1.
n = x < 5 ? 2 : 7;
...
Рейтинг: 0 / 0
12.02.2020, 12:54
    #39925597
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
hVostt
Прошу прощения за такое название топика )

Вот задача.

На вход поступают случайные числа, допустим от 0 до 9, шанс выпадения любого из чисел одинаковый.
Однако нам нужны только случайные числа от 2 до 7, с таким же одинаковым шансом выпадения.

Решение, пропускать числа, не попадающие в рейндж, не очень интересно.
Нужно именно преобразование.
Можно что-то сохранять между операциями.
Но в идеале чистое математическое преобразование нужно :)

Можно попробовать завести массив счетчиков от 2 до 7.
И отображать диапазон random(10) на 2..7 с инкрементом.
Те ячейки которые получат больше счет - имеют шанс выйти на выход
с обнулением (или с вычитанием).

В этом есть что-то от алгортма Брезенхема. Типа накопления ошибки.
...
Рейтинг: 0 / 0
12.02.2020, 13:04
    #39925606
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Dima T
Код: sql
1.
n = x < 5 ? 2 : 7;



Одно из двух? ))
...
Рейтинг: 0 / 0
12.02.2020, 13:05
    #39925607
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
mayton
Можно попробовать завести массив счетчиков от 2 до 7.
И отображать диапазон random(10) на 2..7 с инкрементом.
Те ячейки которые получат больше счет - имеют шанс выйти на выход
с обнулением (или с вычитанием).

В этом есть что-то от алгортма Брезенхема. Типа накопления ошибки.


Я думал тут как-то Монте-Карло нужно применить, но не совсем понял как (
...
Рейтинг: 0 / 0
12.02.2020, 13:06
    #39925608
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
mayton
Можно попробовать завести массив счетчиков от 2 до 7.
И отображать диапазон random(10) на 2..7 с инкрементом.


С массивом такая беда, плохо масштабируется на больших числах :(
...
Рейтинг: 0 / 0
12.02.2020, 13:09
    #39925615
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
hVostt
Dima T
Код: sql
1.
n = x < 5 ? 2 : 7;



Одно из двух? ))

Упс, невнимательно прочитал ТЗ ))

Числа целые или вещественные?
...
Рейтинг: 0 / 0
12.02.2020, 13:10
    #39925620
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Тебе с большой вероятностью первый диапазон (m=10) будет нужен как число составное.
Ну там ... 2^32, 2^64 e.t.c.

Второй (n) может быть любым.

Велика вероятность что будет некое кратное число между m,n и мы можем как-то на этом сыграть.
Может трекать не n чисел на некое (p) номер группы. А номер группы будет трекать счетчики.

Пока еще сам не понял что сказал.
...
Рейтинг: 0 / 0
12.02.2020, 13:15
    #39925630
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Dima T
Упс, невнимательно прочитал ТЗ ))

Числа целые или вещественные?


Целые, но математика может быть в вещественном поле
...
Рейтинг: 0 / 0
12.02.2020, 13:22
    #39925640
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Если числа целые, то нам надо 10 равновероятных вариантов превратить в 6 (2,3,4,5,6,7).

ИМХО Без запоминания чего-нибудь после расчета никак не получить равную вероятность.

Как вариант накапливать сумму
Код: plaintext
1.
2.
3.
4.
thread_local int sum = 0;
sum += rand();
while (sum > 5) sum -= 6;
return sum + 2;
...
Рейтинг: 0 / 0
12.02.2020, 13:25
    #39925644
iOracleDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Массив чисел, берем каждое следующее прокруткой массива в соответствии с случайным количеством шагов из последовательности 0-9. Например для интервала 2-7 - шесть чисел, индексы массива 0-5, первое число из последовательности - 8, получаем проходом по массиву 2, следующее число из последовательности 1, шаг по массиву получаем 3 и так далее. Сохранится ли закон распределения понятия не имею))
...
Рейтинг: 0 / 0
12.02.2020, 13:29
    #39925650
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
hVostt
Dima T
Упс, невнимательно прочитал ТЗ ))

Числа целые или вещественные?


Целые, но математика может быть в вещественном поле

Преобразование целых в вещественные не поможет, т.к. все-равно 10 целых превратятся в другие 10 целых, и в итоге получим два числа будут выдаваться в вероятностью 1/10, а четыре других 2/10.

Преобразование возможно только если количество исходных вариантов кратно количеству конечных. Например 10 в 5 (2...6) получится.
Код: sql
1.
2 + x / 2
...
Рейтинг: 0 / 0
12.02.2020, 13:31
    #39925651
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Dima T
Если числа целые, то нам надо 10 равновероятных вариантов превратить в 6 (2,3,4,5,6,7).

ИМХО Без запоминания чего-нибудь после расчета никак не получить равную вероятность.

Как вариант накапливать сумму


А как доказать, что распределение будет ровное? )
...
Рейтинг: 0 / 0
12.02.2020, 13:34
    #39925655
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Ну я пока один вариант вижу, гарантированный.

Если на входе у нас [0..M)
А нам нужно [0..N)

То нужно брать из входа N значений, затем делить на M.

===

На приведённом примере.
У нас 10 случайных чисел.
Нам нужно 6.

Значем берём 6 случайных чисел [0..9] и делим на 10.

Но это очень плохо масштабируется на больших числах.
...
Рейтинг: 0 / 0
12.02.2020, 13:34
    #39925656
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Хотя у меня чёт сомнения насчёт "гарантированный" )
...
Рейтинг: 0 / 0
12.02.2020, 13:36
    #39925658
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
Dima T
Преобразование возможно только если количество исходных вариантов кратно количеству конечных. Например 10 в 5 (2...6) получится.
Код: sql
1.
2 + x / 2



Это было бы слишком легко )
...
Рейтинг: 0 / 0
12.02.2020, 13:37
    #39925659
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
iOracleDev
Массив чисел, берем каждое следующее прокруткой массива в соответствии с случайным количеством шагов из последовательности 0-9. Например для интервала 2-7 - шесть чисел, индексы массива 0-5, первое число из последовательности - 8, получаем проходом по массиву 2, следующее число из последовательности 1, шаг по массиву получаем 3 и так далее. Сохранится ли закон распределения понятия не имею))


Во! А нужно хоть какое-то вшивое доказательство )
...
Рейтинг: 0 / 0
12.02.2020, 13:40
    #39925665
Имя пользователя1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
hVostt,

тебе нужен вспомогательный рандом.

покажу на примере:

допустим, на входе 5 возможных равновероятных вариантов, на выходе надо 3


---------------
---------------


красный, желтый и оранжевый отрезки (числа 0, 2, 4) однозначно заходят на (0, 1, 2), а зеленый и синий (1 и 3) надо резать. С вероятностью 2/3 зеленый уходит на красный отрезок, иначе на желтый. Для синего аналогично.

Ты в своем преобразователе имеешь право поюзать рандом?
...
Рейтинг: 0 / 0
12.02.2020, 13:42
    #39925668
Имя пользователя1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Случайный конь в вакууме
то есть если исходное количество вариантов не делится на целевое, то придется резать "промежуточные" числа. Смекни пропорцию, напиши функцию...
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Случайный конь в вакууме / 25 сообщений из 223, страница 1 из 9
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]