Декомпозиция Линдона — различия между версиями
(→Существование и единственность) |
|||
Строка 30: | Строка 30: | ||
{{Теорема | {{Теорема | ||
|id=theorem | |id=theorem | ||
− | |statement=Можно построить декомпозицию Линдона любой строки s, причем единственным образом. | + | |statement=Можно построить декомпозицию Линдона любой строки <tex>s</tex>, причем единственным образом. |
|proof= | |proof= | ||
1. Существование. | 1. Существование. | ||
− | Разобьем строку на символы. Будем их склеивать, если подряд идущие символы: s[i] < s[i+1]. Так как символ - простая строка, по лемме s[i..i+1] - тоже простая и s[i..i+1] < s[i]. | + | |
− | Далее склеиваем строки, не удовлетворяющие условию s_1 >= s_2 >= ... >= s_k. | + | Разобьем строку на символы. Будем их склеивать, если подряд идущие символы: <tex>s[i] < s[i+1]</tex>. Так как символ {{---}} простая строка, по лемме <tex>s[i..i+1]</tex> {{---}} тоже простая и <tex>s[i..i+1] < s[i]</tex>. |
− | Это конечный процесс, так как длина строки конечна | + | Далее склеиваем строки, не удовлетворяющие условию <tex>s_1 >= s_2 >= ... >= s_k</tex>. |
+ | Это конечный процесс, так как длина строки конечна <tex>\rightarrow</tex> получим нужное разбиение. | ||
Пусть существует хотя бы одно разбиение строки на простые слова. | Пусть существует хотя бы одно разбиение строки на простые слова. | ||
− | Возьмем разбиение строки на простые слова (без условия s_1>=s_2>=. .. >= s_k) такое, чтобы k было минимально. | + | Возьмем разбиение строки на простые слова (без условия <tex>s_1 >= s_2 >= ... >= s_k</tex>) такое, чтобы <tex>k</tex> было минимально. |
− | Пусть в нем есть s_i < s_ | + | Пусть в нем есть <tex>s_i < s_{i+1}</tex>, тогда эти строки можно сконкатернировать <tex>\rightarrow</tex> получим разбиение с меньшим числом слов {{---}} противоречие с выбором <tex>k</tex>. |
− | Получили: k | + | Получили: <tex>k</tex> {{---}} минимально <tex>\leftrightarrow</tex> нет <tex>s_i < s_{i+1}</tex> |
2. Единственность. | 2. Единственность. | ||
− | Пусть существует несколько разбиений s=s_1 + s_2 + | + | |
+ | Пусть существует несколько разбиений <tex>s = s_1 + s_2 + ... + s_k = s_1' + s_2' + ... + s_k'</tex>, | ||
удовлетворяющих условию теоремы. | удовлетворяющих условию теоремы. | ||
− | Сравним длины первых двух слов s_1 и s_1', если |s_1| = |s_1'|, сравним вторые | + | Сравним длины первых двух слов <tex>s_1</tex> и <tex>s_1'</tex>, если <tex>|s_1| = |s_1'|</tex>, сравним вторые и так далее. |
− | Если у всех слов длины одинаковы, то разбиения совпадают | + | Если у всех слов длины одинаковы, то разбиения совпадают {{---}} противоречие. |
− | Иначе | + | Иначе <tex>\mathcal {9} s_i : |s_i| \neq |s_i'|</tex> |
Покажем, что такого не может быть: | Покажем, что такого не может быть: | ||
− | 1) Пусть |s_i| > |s_i'| | + | |
− | Тогда s_i = s_i' + | + | 1) Пусть <tex>|s_i| > |s_i'|</tex> |
− | + | Тогда <tex>s_i = s_i' + s_{i+1}' + ... + t</tex>, где <tex>t</tex> {{---}} префикс <tex>s_{j+1}'</tex>, <tex>i <= j</tex> | |
− | + | Получаем: <tex>s_i < t</tex> (так как <tex>s_i</tex> простая и по определению меньше своего суффикса), | |
− | + | <tex>t < s_{j+1}'</tex> (так как <tex>t</tex> {{---}} префикс), | |
− | + | <tex>s_{j+1}' < s_i'</tex> (по условию разбиения), | |
− | + | <tex>s_i' < s_i</tex> (их начало совпадает, и <tex>|s_i| < |s_i'|</tex> по предположению. | |
− | + | Получили противоречие: <tex>s_i < s_i</tex>. | |
− | + | ||
+ | 2) Пусть <tex>|s_i| < |s_i'|</tex> {{---}} проверяется аналогично. | ||
+ | То есть не может быть строк <tex>s_i</tex> несовпадающей длины <tex>\rightarrow</tex> разбиения равны. | ||
}} | }} | ||
==Алгоритм Дюваля== | ==Алгоритм Дюваля== |
Версия 22:06, 30 апреля 2014
Основные определения
Определение: |
Простая строка — строка, которая строго лексикографически меньше любого своего суффикса. |
Определение: |
Декомпозиция Линдона строки | — её разложение , где строки просты, и при этом .
Существование и единственность
Лемма: |
1. 2. — простая |
Доказательство: |
1. Так как , и , 2. Пусть — суффикс строки1) 2) 3) — суффикс . Так как — простая, , . Так как — простая, и |
Теорема: |
Можно построить декомпозицию Линдона любой строки , причем единственным образом. |
Доказательство: |
1. Существование. Разобьем строку на символы. Будем их склеивать, если подряд идущие символы: . Так как символ — простая строка, по лемме — тоже простая и . Далее склеиваем строки, не удовлетворяющие условию . Это конечный процесс, так как длина строки конечна получим нужное разбиение.Пусть существует хотя бы одно разбиение строки на простые слова. Возьмем разбиение строки на простые слова (без условия ) такое, чтобы было минимально. Пусть в нем есть , тогда эти строки можно сконкатернировать получим разбиение с меньшим числом слов — противоречие с выбором .Получили: — минимально нет2. Единственность. Пусть существует несколько разбиений , удовлетворяющих условию теоремы. Сравним длины первых двух слов и , если , сравним вторые и так далее. Если у всех слов длины одинаковы, то разбиения совпадают — противоречие. Иначе Покажем, что такого не может быть:1) Пусть Тогда , где — префикс , Получаем: (так как простая и по определению меньше своего суффикса), (так как — префикс), (по условию разбиения), (их начало совпадает, и по предположению. Получили противоречие: .2) Пусть То есть не может быть строк — проверяется аналогично. несовпадающей длины разбиения равны. |