Якщо я вас не розумію, я думаю, що мінімальна вартість витрат може бути обчислена за O(n2) час таким чином.
Для кожного індексу i обчислимо купу значень (pℓi,rℓi) для ℓ=1,2,… наступним чином. Нехай p1i≥1 - найменше ціле число, таке, що існує ціле число r≥2 задовольняє S[i−rp1i+1,i−p1i]=S[i−(r−1)p1i+1,i].
Для цього конкретногоp1i , нехайr1i є найбільшимr з цією властивістю. Якщо такогоpi немає, встановітьLi=0 щоб ми знали, щодля цього індексує нульові(pℓi,rℓi) значення.
Нехай p2i - найменше ціле число, строго більше, ніж (r1i−1)p1i задовольняє також
S[i−r2ip2i+1,i−p2i]=S[i−(r2i−1)p2i+1,i]
для деяких r2i≥2 . Як і раніше, приймайте r2i як максимальний з фіксованим p2i . Загалом pℓi - найменша така кількість, строго більша, ніж (rℓ−1i−1)pℓ−1i . Якщо такого pℓi існує, то Li=ℓ−1 .
Зауважимо, що для кожного індексу i маємо Li=O(log(i+1)) за рахунок значень pℓi геометрично збільшуються з ℓ . (якщо pℓ+1i існує, це не просто суворо більше, ніж (rℓi−1)pℓi але більше, ніж принаймні pℓi/2 Це встановлює геометричне збільшення.)
Припустимо, тепер всі (pℓi,rℓi) значення задані нам. Мінімальна вартість задається повторенням
dp(i,j)=min{dp(i,j−1)+1,minℓ(dp(i,j−rℓjpℓj)+dp(j−rℓjpℓj+1,j−pℓj))}
з розумінням того, що дляi>jвстановимоdp(i,j)=+∞. Таблицю можна заповнити заO(n2+n∑jLj).
Ми вже відзначали вище , що ∑jLj=O(∑jlog(j+1))=Θ(nlogn) з допомогою обмежує термін суми на термін. Але насправді, якщо ми подивимось на всю суму, ми можемо довести щось гостріше.
Розглянемо дерево суфікса T(S←) звороту S (тобто дерево префікса S). Ми стягуватимемо кожен внесок на суму ∑iLi до краю T(S←) так що кожне ребро буде нараховано не більше одного разу. Заряджайте кожну pji до краю, що виходить від nca(v(i),v(i−pji)) і рухаючись у напрямку v(i−pji) . Тутv(i) - лист дерева префікса, що відповідаєS[1..i] а nca позначає найближчого спільного предка.
Це показує, що O(∑iLi)=O(n) . Значення (pji,rji) можна обчислити за часом O(n+∑iLi) шляхом проходження дерева суфіксів, але я залишу деталі для подальшого редагування, якщо когось цікавить.
Дайте мені знати, чи це має сенс.