@Prudya

Какова вероятность появления последовательности?

Сам придумал себе задачу и сам ломаю над ней голову. Имеется последовательность из n 0 и 1. Найти вероятность того, что в данной последовательности найдется хотя бы одна подпоследовательность из подряд идущих 0 или 1 длины m, если мы считаем вероятность появления 0 и 1 в ячейке равными 0.5. Если говорить ещё более простыми словами, то нужно найти вероятность того, что из n бросков монетки мы хотя бы раз выбьем m орлов или решек подряд.
  • Вопрос задан
  • 298 просмотров
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
Прямая формула что-то не вырисовывается, а вот рекуррентная - вполне.

Покажу сразу на примере: N бросков, М = 4, т.е. считаем F4(N)
Неважно, что выпало первым броском, пусть, например, 0. Теперь есть следующие варианты:

1) Вторым броском выпадает 1 (т.е. не то, что в первом броске). Вероятность такого дела 1/2, и задача сводится к F4(N-1) - первый бросок прошел впустую, но ещё "не всё потеряно".
2) Вторым и третьим выпадает 0, 1. Вероятность 1/4, задача сводится к F4(N-2)
3) Вторым, третьим и четвертым выпадает 0, 0 ,1. Вероятность 1/8, задача сводится к F4(N-3)
4) Вторым, третьим и четвертым выпадает 0, 0 ,0. Ура!!! Вероятность 1/8, дальше смотреть не надо.

Итого, по полной вероятности, F4(N) = F4(N-1)/2 + F4(N-2)/4 + F4(N-3)/8 + 1/8

Ну и конечно, база рекурсии: Fm(N) = 0, если N < M

Как обобщить, думаю, очевидно (в знаменателях - степени двойки). Для маленьких M можно нарисовать формулу, например,
Для М = 2, будет F2(N) = F2(N-1)/2 + 1/2, тут прямо сразу выскакивает F2(N) = 1 - 1/(2^(N-1))

Для М = 3, получаем F3(N) = F3(N-1)/2 + F3(N-2)/4 + 1/4, тут кури вот это

и т.д.

Программно вычисляется с помощью "динамического программирования". С правильным подходом - за O(N) по времени и O(M) памяти, навскидку тут хорошо зайдет кольцевой буфер. Если надо, могу расписать, но там ничего сложного.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы