Хорошая идея - «удвоить» строки и применить стандартный алгоритм динамического программирования. Проблема в том, что для получения оптимальной циклической LCS необходимо «запустить алгоритм из нескольких начальных условий». Только одно начальное условие (например, установка всех переменных Lij на 0 на границах) в общем случае не подойдет. На практике выясняется, что число необходимых начальных состояний равно O (N) (они охватывают диагональ), поэтому мы возвращаемся к алгоритму O (N ^ 3).
Тем не менее, этот подход обладает некоторыми достоинствами, поскольку его можно использовать для разработки эффективных O (N ^ 2) эвристик (не точных, но почти точных) для CLCS.
Я не знаю, существует ли истинный O (N ^ 2), и было бы очень интересно, если бы кто-то его знал.
Проблема CLCS имеет довольно интересные свойства "периодичности": длина CLCS
p-количество повторных строк - это p-кратный CLCS строк. Это можно доказать, приняв геометрическое представление о проблеме.
Кроме того, есть некоторые дополнительные преимущества этой проблемы: можно показать, что если Lc (N) обозначает усредненное значение длины CLCS двух случайных строк длины N, то
| Lc (N) -CN | O (\ sqrt {N}), где C - постоянная Хватала-Санкова. Для усредненной длины L (N) стандартной LCS единственный результат скорости, о котором я знаю, говорит, что | L (N) -CN | является O (sqrt (Nlog N)). Может быть хороший способ сравнить Lc (N) с L (N), но я этого не знаю.
Другой вопрос: ясно, что длина CLCS не является сверхаддитивной, в отличие от длины LCS. Под этим я подразумеваю, что это неправда, что CLCS (X1X2, Y1Y2) всегда больше, чем CLCS (X1, Y1) + CLCS (X2, Y2) (очень легко найти контрпримеры с помощью компьютера).
Но кажется возможным, что усредненная длина Lc (N) сверхаддитивна (Lc (N1 + N2) больше, чем Lc (N1) + Lc (N2)) - хотя, если есть доказательство, я его не знаю.
Один скромный интерес в этом вопросе состоит в том, что значения Lc (N) / N для первых нескольких значений N будут тогда обеспечивать хорошие границы для постоянной Чватала-Санкоффа (намного лучше, чем L (N) / N).