TGViewer
FAANG Master FAANG Master @faangmaster · 2.94K subscribers
Post #1031 1.92K
FAANG Master Вопросы с собеседования на позицию Quant разработчика в хэдж-фонд в Лондоне на £350k/$465k 1) Как протестировать генератор случайный чисел? 2) Дана монетка, нужно симулировать 6-гранный кубик.
Дана монетка, нужно симулировать 6-гранный кубик

Код решения:

int rand6() {
while (true) {
int val = 4 * rand2() + 2 * rand2() + rand2();
if (val < 6) {
return 1 + val;
}
}
}

Или можно заменить на битовые операции:
int rand6() {
while (true) {
int val = (rand2() << 2) | (rand2() << 1) | rand2();
if (val < 6) {
return val + 1;
}
}
}

Это классическая задача на Sampling Rejection.
Аналогичные задачи:
1) Написать rand7() имея rand5()
2) Написать rand10() имея rand7()

Почему вероятность - 1/6?

4 * rand2() + 2 * rand2() + rand2() дает равномерно распределенные значения от 0 до 7 (всего 8 значений). Нам надо преобразовать это в диапазон от 1 до 6 (6 значений).

P[результат = x] = P[с первой попытки = x] + P[провал] * P[со второй попытки = x] + P[провал] * P[провал] * P[с третьей попытки = x] + ...

x от 1 до 6.

P[провал] = 2/8 = 1/4. - Вероятность, что выпадет 6 или 7 и нам нужно перейти на следующую итерацию цикла.

P[с первой попытки = x] = P[со второй попытки = x] = P[с третьей попытки = x] = ... = 1/8

Тогда:

P[результат = x] = 1/8 * (1 + 1/4 + 1/4^2 + ...1/4^n + ...) = 1/8 * 1/(1-1/4) = 1/8 * 4/3 = 1/6.

Сколько нужно попыток?

E[N] = 1 + P[провал] + P[провал] ^2 + ... = 1/(1-P[провал]) = 1/P[успеха] = 1/(6/8) = 8/6 = 4/3.

Для других задач формулы аналогичные:
1) Написать rand7() имея rand5(): 5 * rand5() + rand5(). Смотрим <21 и делим на 3.
2) Написать rand10() имея rand7(): 7 * rand7() + rand7(). Смотрим <40 и делим на 4.
Wikipedia Rejection sampling computational statistics technique
  • 👍 13
More from @faangmaster
  1. Sep 13, 2026Навье-Стоксгейт 8 сентября OpenAI заявила, что её невыпущенная модель решила одну из семи…
  2. Sep 3, 2026Uber совместно с британским стартапом Wayve запускает роботакси в Лондоне Пришла нотификац…
  3. Aug 20, 2026Новый HTTP метод QUERY Этим летом в спецификацию HTTP добавили новый метод - QUERY. Добавл…
  4. Aug 15, 2026IOI 2026 В Ташкенте прошел межнар школьников по информатике. Результаты: https://stats.ioi…
  5. Jul 30, 2026В свое время я закончил МФТИ. Относительно непростой вуз для обучения. Закончил неплохо. З…
  6. Jul 18, 2026Документалка про Java В продолжение темы документалок, вышла документалка про Java. Трейле…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →