@Prudya

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

Сам придумал себе задачу и сам ломаю над ней голову. Имеется последовательность из n 0 и 1. Найти вероятность того, что в данной последовательности найдется хотя бы одна подпоследовательность из подряд идущих 0 или 1 длины m, если мы считаем вероятность появления 0 и 1 в ячейке равными 0.5. Если говорить ещё более простыми словами, то нужно найти вероятность того, что из n бросков монетки мы хотя бы раз выбьем m орлов или решек подряд.
  • Вопрос задан
  • 437 просмотров
Решения вопроса 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) памяти, навскидку тут хорошо зайдет кольцевой буфер. Если надо, могу расписать, но там ничего сложного.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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