Skip to content

Избегание паттернов. Паттерн Зимина.

Исполнительное резюме

Тема относится к комбинаторике слов. Исторически она начинается с работ Axel Thue 1906 и 1912 годов о бесквадратных и перекрытие-свободных словах; в современном виде теория избегания паттернов была формализована в 1979 году в статье Avoidable Patterns in Strings of Symbols и независимо в 1982/1984 году в статье A. I. Zimin Blocking Sets of Terms. Центральный факт: паттерн \(p\) с \(n\) различными переменными является неизбежным тогда и только тогда, когда он встречается в \(Z*n\), где \(Z*n\)\(n\)-й паттерн Зимина. Это превращает \(Z\*n\) в полный тест на неизбежность.

Для решения задач практически важны четыре инструмента. Первый: критерий Зимина, то есть проверка вхождения паттерна в \(Z*n\). Второй: длиновой критерий \( |p|\le 2^n-1 \) для неизбежного паттерна с \(n\) переменными; в частности, любой паттерн длины \(\ge 2^n\) избегаем. Третий: свободные буквы и редукции BEM-типа. Четвёртый: алгоритмический критерий через короткие границы, дающий линейное вычисление Zimin type слова и квадратичный поиск \(Z*k\) в произвольном слове.

Количественная сторона задачи описывается функцией \(f(n,q)\): это минимальная длина, начиная с которой каждое слово над \(q\)-буквенным алфавитом содержит \(Z\*n\). Из точных значений базовые: \(f(1,q)=1\), \(f(2,q)=2q+1\), а также \(f(3,2)=29\). Для фиксированного \(q\) рост \(f(n,q)\) по \(n\) имеет башенный тип; для \(n=3\) известно \(f(3,q)=\Theta(2^q q!)\).

С вычислительной точки зрения общая задача распознавания неизбежности паттерна NP-полна, но отдельные подзадачи существенно проще: проверка свободной буквы полиномиальна, вычисление Zimin type префиксов — линейно, поиск \(Z\*k\) в префиксах слова Фибоначчи — логарифмичен.

Формальный аппарат

Пусть \(\Delta\) — алфавит переменных, \(\Sigma\) — конечный алфавит букв. Паттерн — это непустое слово \(p\in \Delta^+\). Слово \(w\in\Sigma^\*\) встречает паттерн \(p\), если существует не стирающий морфизм \(h:\Delta^\*\to\Sigma^\*\) такой, что \(h(p)\) является фактором слова \(w\). Если такого морфизма нет, \(w\) избегает \(p\). Паттерн называется \(k\)-избегаемым, если существует бесконечное слово над \(k\)-буквенным алфавитом, избегающее \(p\); его индекс избегаемости \(\lambda(p)\) — минимальное такое \(k\), а \(\lambda(p)=\infty\) означает неизбежность. Паттерн называется \(q\)-неизбежным, если любое достаточно длинное \(q\)-ичное слово его встречает; неизбежный означает \(q\)-неизбежный для всех \(q\ge1\).

Рекурсивно определяются паттерны Зимина: [ Z1=x1,\qquad Z{n+1}=Zn\,x{n+1}\,Zn. ] Первые члены: [ Z2=x1x2x1,\qquad Z3=x1x2x1x3x1x2x1,\qquad Z4=x1x2x1x3x1x2x1x4x1x2x1x3x1x2x1. ] После переобозначения \(x*1=a,x*2=b,x*3=c,x*4=d\) получаем [ Z3=abacaba,\qquad Z4=abacabadabacaba. ] Из рекурсии сразу следует \(|Z*n|=2^n-1\), а буква \(x*i\) входит в \(Z\*n\) ровно \(2^{\,n-i}\) раз.

Рекурсивная структура \(Z*n\) удобна в виде дерева вложений. Она не добавляет новых фактов по сравнению с формулой выше, а лишь визуализирует разбиение \(Z*{n+1}=Z*nx\_{n+1}Z*n\).

graph TD Z1["Z1 = x1"] Z2["Z2 = Z1 x2 Z1"] Z3["Z3 = Z2 x3 Z2"] Z4["Z4 = Z3 x4 Z3"] Z1 --> Z2 Z2 --> Z3 Z3 --> Z4

Для редукционных критериев нужна свободная буква. Буква \(x\) паттерна \(w\) называется свободной, если не существует цепочки 2-факторов вида [ xa_1,\; b_1a_1,\; b_1a_2,\; b_2a_2,\; \dots,\; b_nx, ] где все перечисленные двубуквенные слова являются факторами \(w\). Если \(x\) встречается один раз, то она автоматически свободна. Обозначим через \(w^x\) слово, полученное удалением всех вхождений \(x\). Тогда действует базовая лемма: если \(x\) свободна в \(w\) и \(w^x\) неизбежно, то \(w\) неизбежно. В современной формулировке Sauer/BEM есть и более сильный критерий через последовательности удалений свободных букв и отождествлений букв.

Для алгоритмов над конкретным словом \(u\) вводится Zimin type: [ \mathrm{Ztype}(u)=\max{k:\; u \text{ является образом } Z*k \text{ при не стирающем морфизме}}. ] Для пустого слова \(\mathrm{Ztype}(\varepsilon)=0\). Если \(\mathrm{ShortBord}(u)\) — наибольшая собственная граница длины \(<|u|/2\), то [ \mathrm{Ztype}(u)=1+\mathrm{Ztype}(\mathrm{ShortBord}(u)). ] Это ключевая рекурсия для линейного алгоритма.

Ниже — компактное сравнение основных вариантов задачи.

Класс Определяющее отличие Репрезентативный результат Источник
Обычные паттерны Точные образы переменных под не стирающим морфизмом Неизбежность полностью характеризуется через \(Z\*n\)
\(q\)-неизбежность Алфавит фиксирован, размер \(q\) существенен Примеры паттернов, различающих \(q\) и \(q+1\), известны для малых \(q\); задача существенно тоньше полной неизбежности
Паттерны Зимина Канонические неизбежные паттерны \(f(1,q)=1\), \(f(2,q)=2q+1\), \(f(3,2)=29\)
Абелевы паттерны Равенство образов заменяется абелевой эквивалентностью по вектору Париха Имеется отдельная большая теория и современный обзор с открытыми вопросами
Формулы Изолированные переменные заменяются точками, остаются фрагменты Для формул не более чем с двумя повторяющимися переменными дана полная бинарная классификация
Doubled patterns Каждая переменная встречается минимум дважды Каждый doubled pattern 3-избегаем
Паттерны с разворотом Допускаются переменные \(x^R\), чьи образы обращаются Для бинарных паттернов с разворотом индекс избегаемости полностью определён

Основные теоремы и доказательства

Ключевая теорема темы такова: если паттерн \(p\) содержит ровно \(n\) различных переменных, то \(p\) неизбежен тогда и только тогда, когда \(Z\*n\) встречает \(p\). Это и есть стандартная BEM–Zimin-характеризация неизбежности. В одной линии она говорит: все неизбежные паттерны ровно те, которые “сидят внутри” соответствующего паттерна Зимина.

Доказательство направления \(Z\*n \Rightarrow\) неизбежность. Если \(Z*n\) встречает \(p\), то существует не стирающий морфизм \(h\), для которого \(h(p)\) — фактор \(Z*n\). Так как \(Z*n\) неизбежен, то любое достаточно длинное слово \(w\) над любым конечным алфавитом содержит некоторый образ \(g(Z*n)\). Тогда фактор \(g(h(p))\) является в \(w\) вхождением \(p\). Следовательно, \(p\) неизбежен. Обратное направление существенно нетривиально и составляет содержательную часть работ 1979 и 1982/1984 годов; именно там доказывается, что всякий неизбежный паттерн можно обнаружить внутри \(Z\*n\).

Из этой теоремы немедленно вытекает главный длиновой критерий. Пусть \(p\) неизбежен и использует \(n\) переменных. Тогда \(Z*n\) встречает \(p\), то есть существует фактор \(u\) паттерна \(Z*n\), равный \(h(p)\) для не стирающего морфизма \(h\). Поскольку \(h\) не стирает буквы, \(|h(p)|\ge |p|\). Но \(|h(p)|=|u|\le |Z*n|=2^n-1\). Значит, [ |p|\le 2^n-1. ] Следовательно, любой паттерн с \(n\) переменными и длиной \(\ge 2^n\) избегаем. Если же \(|p|=2^n-1\), то все образы переменных должны иметь длину 1 и соответствующий фактор должен совпасть со всем \(Z*n\); значит, \(p\) совпадает с \(Z\*n\) с точностью до переименования переменных. Именно это в отдельной форме доказывается в Long Unavoidable Patterns*.

Практическая lемма о свободной букве такова: если \(x\) свободна в \(\alpha\), а \(\alpha^x\) неизбежно, то \(\alpha\) неизбежно. Она полезна для задач “снизу вверх”: сначала доказывается неизбежность укороченного паттерна, затем обратно добавляется свободная буква. Самый частый частный случай — буква, встречающаяся ровно один раз. Она всегда свободна.

Для \(Z*2=x*1x*2x*1\) есть точный критерий в терминах текста: слово \(w\) содержит \(Z*2\) тогда и только тогда, когда некоторая буква встречается в \(w\) в двух несоседних позициях. Отсюда сразу получается точная формула [ f(2,q)=2q+1. ] Доказательство. Максимальный \(q\)-ичный избегатель \(Z*2\) может содержать каждую букву не более чем в одном блоке длины 1 или 2, иначе найдутся две несоседние одинаковые буквы. Значит, длина любого избегателя не превосходит \(2q\). С другой стороны, слово [ a_1a_1a_2a_2\cdots a_qa_q ] имеет длину \(2q\) и избегает \(Z\*2\), поскольку каждой букве соответствуют только соседние вхождения. Следовательно, порог равен \(2q+1\).

Для бинарных паттернов известны два важных критерия. Во-первых, в статье Every Binary Pattern of Length Six is Avoidable on the Two-Letter Alphabet доказано, что всякий паттерн на двух переменных длины не менее 6 является 2-избегаемым; граница точна, потому что существуют 2-неизбегаемые паттерны длины 5. Во-вторых, Unavoidable Binary Patterns даёт полную классификацию неизбежных бинарных паттернов. Для задач это означает: при двух переменных уже одна длина несёт очень много информации.

С количественной стороны важна функция [ f(n,q)=\min{M:\; \text{любое } q\text{-ичное слово длины } M \text{ содержит } Z*n}. ] Для неё известны базовые точные значения и сильные асимптотики: \(f(1,q)=1\), \(f(2,q)=2q+1\), \(f(3,2)=29\), \(f(3,q)=\Theta(2^q q!)\), а при фиксированном \(q\) рост по \(n\) имеет башенный тип. В 2019 году были получены по существу точные верхние и нижние оценки этого типа.

Алгоритмы и вычислительные методы

Алгоритмически полезно разделять три задачи: проверка свободной буквы в паттерне, проверка общей неизбежности паттерна и поиск \(Z\*k\) в конкретном слове. Их вычислительная сложность существенно различается.

Задача Идея Сложность Статус
Проверить, свободна ли буква \(x\) в паттерне \(\alpha\) Граф 2-факторов \(G\alpha\): \(x\) не свободна тогда и только тогда, когда существует путь из вершины, начинающейся с \(x\), в вершину, оканчивающуюся на \(x\) Полиномиально; в явной реализации Sauer — \(O(m^2)\) для длины \(m\) Практично для ручных и программных проверок
Проверить, неизбежен ли паттерн \(\alpha\) Редукции по свободным буквам и отождествлениям либо проверка вхождения в \(Z\*n\) Общая задача NP-полна Теоретически трудная, но малая размерность часто берётся перебором
Вычислить \(\mathrm{Ztype}\) всех префиксов слова Границы и короткие границы; рекурсия \(\mathrm{Ztype}(u)=1+\mathrm{Ztype}(\mathrm{ShortBord}(u))\) Онлайн \(O(m)\) по времени и \(O(m)\) по памяти Основной алгоритм для конкретных слов
Найти, входит ли \(Z\*k\) в произвольное слово Запустить вычисление Zimin type на всех суффиксах \(O(m^2)\) времени, \(O(m)\) памяти Опубликованный общий алгоритм
Найти максимальный \(k\) для префикса слова Фибоначчи Специальная структура фибоначчевых префиксов \(O(\log n)\) Сильный специальный случай

Псевдокод линейного вычисления Zimin type повторяет опубликованный алгоритм Rytter–Shur.

Algorithm ComputeZiminTypes(x[1..m])
 B[0]:= -1
 B[1]:= 0
 Z[0]:= 0
 Z[1]:= 1
 t:= 0
 s:= 0

 for i:= 2 to m do
 while t >= 0 and x[t+1] != x[i] do
 t:= B[t]
 t:= t + 1
 B[i]:= t

 while s >= 0 and (2*s + 1 >= i or x[s+1] != x[i]) do
 s:= B[s]
 s:= s + 1

 Z[i]:= Z[s] + 1

 return Z

Корректность опирается на формулу через \(\mathrm{ShortBord}\), а линейность — на тот же амортизационный анализ, что и у Morris–Pratt: каждая неудачная переустановка указателя компенсируется будущим продвижением вправо.

Для распознавания общей неизбежности естественен недетерминированный перебор по редукциям BEM-типа. В худшем случае он экспоненциален; это согласуется с NP-полнотой задачи.

Algorithm IsUnavoidable(alpha)
 normalize variable names in alpha
 if alpha has 1 symbol total then
 return True

 for each free letter x in alpha do
 if IsUnavoidable(delete_all(alpha, x)) then
 return True

 for each unordered pair of distinct letters x, y in alpha do
 beta:= identify(alpha, x -> y)
 if IsUnavoidable(beta) then
 return True

 return False

Такой алгоритм полезен как учебный и для малых входов. Для строгой оценки: каждая ветвь использует только полиномиальные подшаги (в частности, проверку свободной буквы), но число ветвей растёт combinatorially; в общей постановке задача NP-полна.

Для ручного решения задач удобно следовать короткому маршруту: сначала считать число переменных \(n\), затем применять длиновой критерий \(2^n-1\); если он не решает задачу, искать свободые одиночные буквы; затем пробовать явное вхождение в \(Z\*n\); для слов — использовать короткие границы и Zimin type.

Типовые задачи с решениями

Ниже восемь задач возрастающей сложности. Они покрывают основные техники: рекурсию \(Z\*n\), длиновой критерий, свободые буквы, граф свободности, Zimin type и количественные оценки.

Задача 1. Выписать \(Z*1,Z*2,Z*3,Z*4\). Найти \(|Z*n|\) и число вхождений каждой переменной \(x*i\) в \(Z\*n\).

Решение. По определению [ Z1=x1,\qquad Z{n+1}=Znx{n+1}Zn. ] Следовательно, [ Z2=x1x2x1,\quad Z3=x1x2x1x3x1x2x1,\quad Z4=x1x2x1x3x1x2x1x4x1x2x1x3x1x2x1. ] Для длины имеем рекурсию \(L*{n+1}=2L_n+1\), \(L_1=1\), откуда \(L_n=2^n-1\). Для кратности буквы \(x*i\): при переходе \(Z*n\to Z*{n+1}\) все старые буквы удваиваются, а новая \(x*{n+1}\) входит ровно один раз. Поэтому \(\\#*{x*i}(Z*n)=2^{n-i}\).

Задача 2. Доказать: если паттерн \(p\) с \(n\) различными переменными неизбежен, то \(|p|\le 2^n-1\). Применить это к паттерну \(abab\).

Решение. По теореме Зимина неизбежный \(p\) встречается в \(Z*n\). Значит, имеется не стирающий морфизм \(h\) такой, что \(h(p)\) — фактор \(Z*n\). Тогда \(|p|\le |h(p)|\le |Z\*n|=2^n-1\). Для \(p=abab\): число переменных равно \(2\), а \(|abab|=4>2^2-1=3\). Следовательно, \(abab\) избегаем.

Задача 3. Показать, что паттерн \(abca\) неизбежен.

Решение. Буква \(b\) встречается ровно один раз, значит, она свободна. После удаления \(b\) получаем паттерн \(aca\), который совпадает с \(Z*2\) с точностью до переименования переменных. Паттерн \(Z*2\) неизбежен. По лемме о свободной букве из неизбежности \(aca\) следует неизбежность \(abca\). Альтернативно: \(abca\) явно встречается в \(Z*3=abacaba\), если положить \(a\mapsto x*1\), \(b\mapsto x*2x*1\), \(c\mapsto x*3\); тогда образ \(abca\) равен \(x*1x*2x*1x*3x*1\), а это фактор \(Z\*3\).

Задача 4. Определить, свободна ли буква \(b\) в паттерне \(abcbab\). Затем решить, неизбежен ли этот паттерн.

Решение. Его 2-факторы: \(ab,bc,cb,ba\). Для проверки свободности \(b\) по графу 2-факторов стартовыми являются вершины \(0ba,0bc\), а целевыми — \(1ab,1cb\). Достижимость:

  • \(0bc\to 1bc\to 0bc,0ba\);
  • \(0ba\to 1ba\to 0bc,0ba\).

Ни \(1ab\), ни \(1cb\) недостижимы, значит, \(b\) свободна. После удаления \(b\) получаем \(aca\cong Z\*2\), а значит, по лемме о свободной букве \(abcbab\) неизбежен.

Задача 5. Найти \(f(2,4)\).

Решение. Для \(Z*2\) действует точная формула \(f(2,q)=2q+1\). Поэтому [ f(2,4)=2\cdot 4+1=9. ] Экстремальный избегатель длины \(8\)\(aabbccdd\): каждая буква повторяется только в соседних позициях, двух несоседних одинаковых букв нет, следовательно, \(Z*2\) не встречается. Любое 4-ичное слово длины \(9\) уже содержит \(Z\*2\).

Задача 6. Вычислить Zimin type всех префиксов слова \(u=\texttt{abacaba}\).

Решение. Используем формулу \(\mathrm{Ztype}(u)=1+\mathrm{Ztype}(\mathrm{ShortBord}(u))\).

Префикс \(\mathrm{ShortBord}\) Zimin type
a \(\varepsilon\) 1
ab \(\varepsilon\) 1
aba a 2
abac \(\varepsilon\) 1
abaca a 2
abacab ab 2
abacaba aba 3

Следовательно, \(\texttt{abacaba}\) имеет Zimin type \(3\), то есть является образом \(Z*3\). В самом деле, здесь даже тождественный образ после переименования \(x*1=a,x*2=b,x*3=c\).

Задача 7. Доказать: если \(u\) является образом \(Z*n\), то для любого непустого слова \(v\) слово \(uvu\) является образом \(Z*{n+1}\). Применить к \(u=\texttt{abacaba}\), \(v=\texttt{d}\).

Решение. Пусть \(u=h(Z*n)\). Определим новый морфизм \(h'\) так: [ h'(xi)=h(xi)\quad (1\le i\le n),\qquad h'(x{n+1})=v. ] Тогда [ h'(Z)=h'(ZnxZn)=h(Zn)\,v\,h(Z*n)=uvu. ] Значит, \(uvu\) — образ \(Z*{n+1}\). Для \(u=\texttt{abacaba}\cong Z*3\) и \(v=\texttt{d}\) получаем \(\texttt{abacabadabacaba}\), то есть образ \(Z\*4\).

Задача 8. Получить верхнюю оценку на \(f(3,2)\) из рекуррентной оценки через число минимальных слов типа 2.

Решение. Из Rytter–Shur: [ f(n+1,k)\le (f(n,k)+1)\,m(n,k)+f(n,k), ] где \(m(n,k)\) — число минимальных \(k\)-ичных слов Zimin type \(n\). Для \(n=2,k=2\) в статье вычислено \(m(2,2)=6\), а \(f(2,2)=5\). Поэтому [ f(3,2)\le (5+1)\cdot 6 +5 = 41. ] Это не точное значение, а только верхняя оценка. Точное значение, найденное там же прямым перебором минимальных слов, равно [ f(3,2)=29. ] Такой расчёт важен методически: сначала строится общая оценка, потом она уточняется специализированным перебором.

Источники, история и открытые вопросы

Историческая траектория такова. Работы Туе 1906 и 1912 годов положили начало систематическому изучению повторов и избегаемых структур в словах. Статья 1979 года Avoidable Patterns in Strings of Symbols впервые дала полную характеристику неизбежных паттернов в современном смысле. Русский первоисточник Зимина 1982 года Blocking Sets of Terms дал независимую эквивалентную характеризацию и ввёл центральные объекты, теперь называемые паттернами Зимина. Дальнейшая линия шла в двух направлениях: классификация малых классов паттернов и количественно-алгоритмическое изучение функции \(f(n,q)\) и распознавания.

Ниже — приоритетный список источников, достаточный для учебной и задачной работы.

Источник Роль в теме Приоритет
Über unendliche Zeichenreihen (1906) и Über die gegenseitige Lage gleicher Teile gewisser Zeichenreihen (1912) Историческое начало теории избегания повторов очень высокий
Avoidable Patterns in Strings of Symbols (1979) Независимая первичная характеризация неизбежных паттернов очень высокий
Blocking Sets of Terms (Мат. сб., 1982; англ. пер. 1984) Русский первоисточник Зимина; блокирующие множества и паттерны Зимина очень высокий
Long Unavoidable Patterns (1987) Максимальная длина \(2^n-1\), единственность экстремального неизбежного паттерна очень высокий
Every Binary Pattern of Length Six is Avoidable on the Two-Letter Alphabet (1992) Точная длиновая граница для двухпеременных паттернов над двоичным алфавитом высокий
Unavoidable Binary Patterns (1993) Полная классификация неизбежных бинарных паттернов высокий
On Searching Zimin Patterns (2015) Линейное вычисление Zimin type, квадратичный поиск, \(f(3,2)=29\) очень высокий
Bounds on Zimin Word Avoidance (2014) Ранние сильные оценки сверху для \(f(n,q)\) высокий
Tower-type bounds for unavoidable patterns in words (2019) Почти точные башенные оценки и \(\Theta(2^q q!)\) для \(f(3,q)\) очень высокий
The Complexity of Unavoidable Word Patterns (2022) NP-полнота общей задачи распознавания неизбежности, алгоритмы для свободных букв очень высокий
Abelian Combinatorics on Words: a Survey (2022/2023) Современный обзор абелевых аналогов и открытых вопросов высокий
Doubled Patterns are 3-Avoidable (2016) и Doubled patterns with reversal and square-free doubled patterns (2021/2023) Современная линия по doubled patterns, reversal и 2-/3-избегаемости высокий

Открытые и недоисследованные направления в найденных источниках формулируются так. Для полной \(q\)-неизбежности хорошо понятен случай “для всех \(q\)” благодаря критерию Зимина, но уже вопрос о существовании паттернов, которые \(q\)-неизбежны, но \((q+1)\)-избегаемы, существенно труднее; в работе 2017/2019 годов отмечено, что примеры известны для \(q=2,3,4\), а дальнейшее продвижение представляет самостоятельный интерес. Точные значения \(f(n,q)\) известны только в немногих малых случаях; даже следующий после \(f(3,2)\) слой в основном описывается оценками. Для doubled patterns в 2021/2023 годах сформулирована и частично проверена гипотеза: каждый square-free doubled pattern 2-избегаем; доказательство дано лишь до 4 переменных. Наконец, после доказательства NP-полноты общей задачи особенно актуальны структурные подзадачи: какие естественные подклассы паттернов допускают эффективное точное распознавание.