У нас совпало
символов строки. Какая разница, будет ли это "Ц" или всё тот же ноль?
Зависит от того, встречается ли новый неудачный символ в уже совпавшей части строки, или же нет. Если да, то мы начнём поиск не с начала, а с середины.
Пример: мы ищем 010, уже сгенерировано 110. Если следующим выпадет 1, то мы продвинулись на один шаг вперёд, а если 0 — не продвинулись вперёд, но и не отступили назад. Допустим выпало 1, тогда последние символы 1101. Если сейчас выпадет 0, то удача, а если 1 — мы откатимся назад на 2, то есть начнём всё с начала.
Другой пример: мы ищем 001, уже сгенерировано 110. Если следующим выпадет 1, то мы отступим назад на 1 шаг, а если 0 — продвинемся вперёд на 1. Допустим выпало 0, тогда последние символы 1100. Если выпадет 1 — удача, а если выпадет 0, то мы не продвинемся вперёд, но и не отступим назад. Теперь всё что нужно — это дождаться первой единицы, а это будет в среднем за 2 новых символа.
Но на самом деле то, что поиск начинается с середины в случае предыдущей неудачи, — обманчивая иллюзия. В таких случаях среднее время ожидания искомой строки оказывается больше, чем у других строк той же длины, но без самоповторений.
-- 21.01.2018, 14:13 --Вот, например, табличка для последовательностей орлов и решек, упорядоченная по возрастанию среднего числа символов:
Строка______Ожидание
О___________2
Р___________2
ОР__________4
РО__________4
ОО__________6
РР__________6
ООР_________8
РРО_________8
ОРР_________8
РОО_________8
ОРО_________10
РОР_________10
ООО_________14
РРР_________14
ОООР________16
РРРО________16
ООРР________16
РРОО________16
ОРРР________16
РООО________16
ООРО________18
РРОР________18
ОРОО________18
РОРР________18
ОРРО________18
РООР________18
ОРОР________20
РОРО________20
ОООО________30
РРРР________30