Пусть у нас есть генератор случайных символов из некоторого алфавита длины
. Причём все символы, выдаваемые этим генератором равновероятны и не зависят от предыдущих. И у нас есть некоторая строка длины
символов из того же алфавита. Вопрос в том, сколько в среднем потребуется нагенерировать символов, чтобы в качестве последних
получилась искомая строка.
Если честно, то я без понятия с какого боку к этой задаче вообще подойти. Единственное, что приходит в голову, — это взять какие-нибудь простейшие случаи и посчитать в лоб. Вот, например, пусть искомая строка имеет длину один. Тогда нам всё равно из какого символа она состоит, так как все они равновероятны. Вероятность того, что искомый символ выпадет на n-ой позиции равна:
Тогда средняя ожидаемая длина последовательности будет
Выведя вот такую формулу:
Можно посчитать и длину:
Удивительно, что результат — это целое число.
Можно видеть что даже в простейшем случае получаются не хилые такие выкладки. Дальше ещё интереснее. Пусть теперь для простоты длина алфавита будет два. Опять же для простоты пусть это будут символы "А" и "Б". И пусть искомая стока — это пара символов "АА". Для этого случая я составил такую последовательность:
А 1/2
Б 1/2
АА! 1/4
БА 1/4
?Б 2/4
БАА! 1/8
?БА 2/8
??Б 3/8
?БАА! 2/16
??БА 3/16
???Б 5/16
??БАА! 3/32
???БА 5/32
????Б 8/32
???БАА! 5/32
????БА 8/32
?????Б 13/32В этой последовательности числа в числителях вероятности ни что иное, как числа Фибоначчи!!! Кто бы мог подумать! В результате формула для средней длины последовательности получается такая:
Я без понятия как такую бесконечную сумму можно свернуть, но численный расчёт показал, что значение очень близко к 6. Аналогично рассматривается поиск пары символов "АБ". В этом случае ответ такой:
Тоже целое число.
То, что результатами являются целые числа, вызывает у меня смутное подозрение, что здесь есть какая-то хитрость. Возможно какая-то рекуррентная формула или что-то ещё, что сильно упрощает расчёт. Подскажите, пожалуйста, в каком направлении копать?