ОПРЕДЕЛЕНИЯ
[LCP] полное имя самого длинного общего префикса, самый длинный префикс между двумя суффиксами, определим следующее
Значение LCP (I, J) является самым длинным префиксы и суффиксы я и J
Функция [г] функция г [I] представляет собой длинный префикс и суффикс I строки
![](file:///E:\QQ\QQ数据\1037715557\Image\Group\Image4\93$ESHOQ5GWWDXVJ)T_UJ%1.jpg)
[Проблема]
Оба были в решении этой проблемы
Т.е. ищет самый длинный общий префикс и суффикс строки между суффиксами и
Но что-то другое,
Суффикс массив , наконец , определить , что самый длинный общий префикс лексикографические суффиксы I-й и + 1-й суффикс
Z функции , чтобы окончательно определить , что самый длинный общий префикс и суффикс я строки
Затем найдите другое значение по наибольшей общей приставке
Изучение алгоритма []
Суффикс массив []
Суффикс массив может быть получен в н-время лексикографического I-го и я - 1 длинных общий префикс - суффикс
И эта функция обычно называется высота
Значение высоты [I] представляет собой, лексикографический I - наибольший общий префикс и суффикс суффикса г-го
Получено имеет следующие свойства: (s [I] обозначает суффикс I-го)
1. Если я меньше, чем у, ЖКП (I, J) = тт {ЖКП (к - 1, к), г + 1 <= K <= J}
LCP может воспользоваться этим спросом у RMQ
2. Определить Н [я] следующим образом: I-й суффикс, начинающийся перед ним и суффиксом LCP лексикографическом
即: ч [я] = высота [ранг [я]]
Тогда есть, для I> 1 и ранга [я]> 1
ч [я]> ч [я - 1] - 1;
Удостоверяет следующим образом:
И J является первым я - 1 суффикс начала встать на передней позиции суффикса ранжирования
Примечание: J не первый я - 2
В этом случае, суффикс J-й и я - 1-й в суффиксе LCP определяются высота [ранг [я - 1]], то есть ч [я - 1]
То есть часть правой половины из нас, чтобы доказать
Затем мы обсудим J + 1 и я (полученный I - 1 + 1) отношений:
Во-первых, когда у и я - 1, где буквы не равны, ч [я - 1] = 0
Ясно тогда ч [I]> ч [я - 1] - 1
Во-вторых, когда у и я - 1, равна первой букве дела,
Очевидно, то, J, и я - ЖКП 1 ч [я - 1] - 1
В рейтинге суффиксом, чем я экзамен, и суффикс я самый длинный, самый высокий сходство ЖКП явно в SA недавно, что от него
Немедленное SA [ранг [я - 1]] - 1
То есть, ч [я]> = ч [я - 1] - 1
QED
Таким образом, каждый раз, когда мы находим самый длинный префикс, когда доступны из ч [я - 1] начать извлечение
Является аналогом manacher
Код выглядит следующим образом:
недействительный GetHeight () { INT J, K = 0 ; для ( INT I = 1 ; г <= N; я ++ ) { если (к) k-- ; INT J = са [Rak [I] - 1 ]; в то время как (с [I + K] == S [J + K]) K ++ ; Высота [Rak [я]] = K; Е ( " % d \ п " , к); } }
тема:
[SDOI 2008] Sandy карта