Дано выражение для числа слов длины n, составленных из алфавита из k букв, без двух одинаковых подряд и без подстроки длины 3, состоящей из всех разных букв. Сформулируйте задачу подсчёта и предложите по крайней мере два принципиально разных подхода (рекуррентные соотношения, метод автомата, включение-исключение), обсудите преимущества и ограничения каждого
Формулировка задачи (коротко): посчитать количество слов длины nnn над алфавитом размера kkk, такие, что - нет двух одинаковых подрядных букв (то есть для всех iiixi≠xi+1x_i\neq x_{i+1}xi=xi+1); - нет подстроки длины 333, все буквы которой различны (то есть запрещены троики xi,xi+1,xi+2x_i,x_{i+1},x_{i+2}xi,xi+1,xi+2 с тремя разными символами). Ключевое наблюдение (значит упрощение задачи): если одновременно xi≠xi+1x_i\neq x_{i+1}xi=xi+1 и троика xi,xi+1,xi+2x_i,x_{i+1},x_{i+2}xi,xi+1,xi+2 не содержит трёх различных, то при xi≠xi+1x_i\neq x_{i+1}xi=xi+1 и xi+1≠xi+2x_{i+1}\neq x_{i+2}xi+1=xi+2 остаётся только вариант xi=xi+2x_i=x_{i+2}xi=xi+2. Значит для всех iii выполняется xi=xi+2,
x_i=x_{i+2}, xi=xi+2,
то есть слово периодично с периодом 222 (через одно символы равны). В сочетании с запретом одинаковых соседей это даёт: слово — чередование двух разных букв AAA и BBB (шаблон ABAB…ABAB\ldotsABAB…, с A≠BA\neq BA=B). Отсюда очевиден итоговый счёт: a1=k,an=k(k−1) для n≥2.
a_1=k,\qquad a_n=k(k-1)\ \text{для } n\ge2. a1=k,an=k(k−1)дляn≥2.
(Особые случаи: при k=1k=1k=1 получаем a1=1a_1=1a1=1, для n≥2n\ge2n≥2 — 000.) Дальше — способы решения и обсуждение. 1) Рекуррентные соотношения - Постановка: пусть ana_nan — искомое число слов длины nnn. Для n≥3n\ge3n≥3 рассмотрим последние два символа (xn−1,xn)(x_{n-1},x_n)(xn−1,xn). Они различны, всего таких пар k(k−1)k(k-1)k(k−1). Для заданной такой пары возможное добавление символа xn+1x_{n+1}xn+1 должно удовлетворять xn≠xn+1x_n\neq x_{n+1}xn=xn+1 и запрещению троики — следовательно единственный допустимый выбор xn+1=xn−1x_{n+1}=x_{n-1}xn+1=xn−1. Значит из любой допустимой длины n≥2n\ge2n≥2 есть ровно один допустимый переход к длине n+1n+1n+1. - Следствие: a2=k(k−1)a_2=k(k-1)a2=k(k−1) и для всех n≥2n\ge2n≥2an+1=ana_{n+1}=a_nan+1=an, т.е. an=k(k−1)(n≥2).
a_n=k(k-1)\quad(n\ge2). an=k(k−1)(n≥2).
Преимущества: простой, детерминированный вывод, малые вычисления. Ограничения: требует интуиции о состоянии «последние две буквы» и справедлив только потому, что правило локальное и сильно ограничивает расширения; при более сложных локальных шаблонах рекурренты могут быть значительно более сложными. 2) Метод автомата (ДКА / матрицы переходов) - Постройте автомат, состояния которого — упорядоченные пары различных букв (u,v)(u,v)(u,v) (последние два символа); начальные состояния для длины 111 можно трактовать отдельно. Переход из состояния (u,v)(u,v)(u,v) ведёт единственно в состояние (v,u)(v,u)(v,u) (потому что следующий символ обязателен uuu). Матрица переходов — пермутационная матрица с собственной структурой: каждая соответствующая вершина имеет ровно один выход. - Количество допустимых слов длины nnn — число путей длины n−2n-2n−2 в этом автомате, умноженное на число допустимых первых двух символов k(k−1)k(k-1)k(k−1) (или отдельно учитывать n=1n=1n=1). Из структуры матрицы видно, что число путей не меняется с увеличением длины: даёт тот же результат a1=k,an=k(k−1) (n≥2).
a_1=k,\qquad a_n=k(k-1)\ (n\ge2). a1=k,an=k(k−1)(n≥2).
Преимущества: автоматический, системный, даёт явную матричную интерпретацию; легко обобщается на другие локальные ограничения с конечным числом состояний. Ограничения: число состояний может быть O(km)O(k^m)O(km) при учёте последних mmm символов, что даёт экспоненциальный рост сложности в общем случае. 3) Метод включения–исключения (и метод кластеров / Goulden–Jackson) - Можно начать с подсчёта слов без равных соседей: k(k−1) n−1k(k-1)^{\,n-1}k(k−1)n−1, затем исключать те, что содержат запрещённые троики (в каждой позиции i событие «тройка i — три разные»). Однако эти события перекрываются и имеют сложную зависимость. Прямой IE даёт громоздкие суммы; полезен подход кластеров (Goulden–Jackson), который строит автоморфизмы запрещённых кластеров и даёт формулу через рациональные функции. В нашем конкретном случае анализ кластеров показывает, что единственные бесклассные слова без соседних равных и без запрещённых троек — те, у которых для каждого i xi=xi+2x_i=x_{i+2}xi=xi+2 (т.е. чередование), что снова даёт an=k(k−1) (n≥2).
a_n=k(k-1)\ (n\ge2). an=k(k−1)(n≥2).
Преимущества: общий метод, применим к произвольному набору запрещённых подслов; даёт точные формулы даже при перекрытиях. Ограничения: часто приводит к сложной комбинаторике кластеров и вычислительно трудоёмок — в простых случаях (как здесь) чрезмерен; для многих запретов аналитика и вычисления становятся громоздкими. Краткое заключение: из локальных ограничений следует строгая периодичность через два символа, поэтому ответ прост: a1=ka_1=ka1=k, an=k(k−1)a_n=k(k-1)an=k(k−1) для n≥2n\ge2n≥2. Рекуррентный и автоматный подходы дают короткое и прозрачное решение; включение–исключение универсально, но в этом случае избыточно и сложнее в реализации.
- нет двух одинаковых подрядных букв (то есть для всех iii xi≠xi+1x_i\neq x_{i+1}xi =xi+1 );
- нет подстроки длины 333, все буквы которой различны (то есть запрещены троики xi,xi+1,xi+2x_i,x_{i+1},x_{i+2}xi ,xi+1 ,xi+2 с тремя разными символами).
Ключевое наблюдение (значит упрощение задачи): если одновременно xi≠xi+1x_i\neq x_{i+1}xi =xi+1 и троика xi,xi+1,xi+2x_i,x_{i+1},x_{i+2}xi ,xi+1 ,xi+2 не содержит трёх различных, то при xi≠xi+1x_i\neq x_{i+1}xi =xi+1 и xi+1≠xi+2x_{i+1}\neq x_{i+2}xi+1 =xi+2 остаётся только вариант xi=xi+2x_i=x_{i+2}xi =xi+2 . Значит для всех iii выполняется
xi=xi+2, x_i=x_{i+2},
xi =xi+2 , то есть слово периодично с периодом 222 (через одно символы равны). В сочетании с запретом одинаковых соседей это даёт: слово — чередование двух разных букв AAA и BBB (шаблон ABAB…ABAB\ldotsABAB…, с A≠BA\neq BA=B). Отсюда очевиден итоговый счёт:
a1=k,an=k(k−1) для n≥2. a_1=k,\qquad a_n=k(k-1)\ \text{для } n\ge2.
a1 =k,an =k(k−1) для n≥2. (Особые случаи: при k=1k=1k=1 получаем a1=1a_1=1a1 =1, для n≥2n\ge2n≥2 — 000.)
Дальше — способы решения и обсуждение.
1) Рекуррентные соотношения
- Постановка: пусть ana_nan — искомое число слов длины nnn. Для n≥3n\ge3n≥3 рассмотрим последние два символа (xn−1,xn)(x_{n-1},x_n)(xn−1 ,xn ). Они различны, всего таких пар k(k−1)k(k-1)k(k−1). Для заданной такой пары возможное добавление символа xn+1x_{n+1}xn+1 должно удовлетворять xn≠xn+1x_n\neq x_{n+1}xn =xn+1 и запрещению троики — следовательно единственный допустимый выбор xn+1=xn−1x_{n+1}=x_{n-1}xn+1 =xn−1 . Значит из любой допустимой длины n≥2n\ge2n≥2 есть ровно один допустимый переход к длине n+1n+1n+1.
- Следствие: a2=k(k−1)a_2=k(k-1)a2 =k(k−1) и для всех n≥2n\ge2n≥2 an+1=ana_{n+1}=a_nan+1 =an , т.е.
an=k(k−1)(n≥2). a_n=k(k-1)\quad(n\ge2).
an =k(k−1)(n≥2). Преимущества: простой, детерминированный вывод, малые вычисления. Ограничения: требует интуиции о состоянии «последние две буквы» и справедлив только потому, что правило локальное и сильно ограничивает расширения; при более сложных локальных шаблонах рекурренты могут быть значительно более сложными.
2) Метод автомата (ДКА / матрицы переходов)
- Постройте автомат, состояния которого — упорядоченные пары различных букв (u,v)(u,v)(u,v) (последние два символа); начальные состояния для длины 111 можно трактовать отдельно. Переход из состояния (u,v)(u,v)(u,v) ведёт единственно в состояние (v,u)(v,u)(v,u) (потому что следующий символ обязателен uuu). Матрица переходов — пермутационная матрица с собственной структурой: каждая соответствующая вершина имеет ровно один выход.
- Количество допустимых слов длины nnn — число путей длины n−2n-2n−2 в этом автомате, умноженное на число допустимых первых двух символов k(k−1)k(k-1)k(k−1) (или отдельно учитывать n=1n=1n=1). Из структуры матрицы видно, что число путей не меняется с увеличением длины: даёт тот же результат
a1=k,an=k(k−1) (n≥2). a_1=k,\qquad a_n=k(k-1)\ (n\ge2).
a1 =k,an =k(k−1) (n≥2). Преимущества: автоматический, системный, даёт явную матричную интерпретацию; легко обобщается на другие локальные ограничения с конечным числом состояний. Ограничения: число состояний может быть O(km)O(k^m)O(km) при учёте последних mmm символов, что даёт экспоненциальный рост сложности в общем случае.
3) Метод включения–исключения (и метод кластеров / Goulden–Jackson)
- Можно начать с подсчёта слов без равных соседей: k(k−1) n−1k(k-1)^{\,n-1}k(k−1)n−1, затем исключать те, что содержат запрещённые троики (в каждой позиции i событие «тройка i — три разные»). Однако эти события перекрываются и имеют сложную зависимость. Прямой IE даёт громоздкие суммы; полезен подход кластеров (Goulden–Jackson), который строит автоморфизмы запрещённых кластеров и даёт формулу через рациональные функции. В нашем конкретном случае анализ кластеров показывает, что единственные бесклассные слова без соседних равных и без запрещённых троек — те, у которых для каждого i xi=xi+2x_i=x_{i+2}xi =xi+2 (т.е. чередование), что снова даёт
an=k(k−1) (n≥2). a_n=k(k-1)\ (n\ge2).
an =k(k−1) (n≥2). Преимущества: общий метод, применим к произвольному набору запрещённых подслов; даёт точные формулы даже при перекрытиях. Ограничения: часто приводит к сложной комбинаторике кластеров и вычислительно трудоёмок — в простых случаях (как здесь) чрезмерен; для многих запретов аналитика и вычисления становятся громоздкими.
Краткое заключение: из локальных ограничений следует строгая периодичность через два символа, поэтому ответ прост: a1=ka_1=ka1 =k, an=k(k−1)a_n=k(k-1)an =k(k−1) для n≥2n\ge2n≥2. Рекуррентный и автоматный подходы дают короткое и прозрачное решение; включение–исключение универсально, но в этом случае избыточно и сложнее в реализации.