Ваш конкретный пример невозможен. Когда вы начинаете конструировать строку из нужной таблицы префиксов, вы получаете
0 0 1 2 3 0 1 2 3 4 5 3 4 5 6 7 0 1 2
a b a b a c a b a b a
- первый символ произвольный, скажем
- второй символ должен отличаться от первого, иначе длина префикса будет 1
- третий должен совпадать с первым
- четвертый должен совпадать со вторым
- пятый должен совпадать с третьим
- не может быть ни одним из двух используемых на данный момент символов, a даст длину префикса 1, b - 4
- седьмой должен быть первым
- должен быть вторым
- должно быть третьим
- должно быть четвертым
- должно быть пятым
- a даст длину префикса 1, b даст 4, c даст 6, все остальное даст 0
Запись в таблице, соответствующая префиксу длины p
, дает ширину самой широкой границы b
этого префикса, скажем w
. Следующая запись может быть только w+1
(если b
является расширяемой), 0 (если не совпадает префикс) или на одну единицу больше ширины какой-либо границы b
.
Так что, если table[p]
содержит ширину самой широкой границы префикса length-p (с table[0] = -1
), то table[p+1]
является одним из 1+table[p]
, 1+table[table[p]]
, ..., 1+table[table[...[table[p]]]] = 1 + table[0] = 0
.