Jeśli cię nie rozumiem, myślę, że minimalizację faktoryzacji kosztów można obliczyć w czasie w następujący sposób.O(n2)
Dla każdego indeksu i wiązkę wartości dla w następujący sposób. Niech będzie najmniejszą liczbą całkowitą, tak że istnieje liczba całkowita spełniającaDla tego konkretnego , niech będzie największym z tą właściwością. Jeśli nie ma takiego , ustaw , abyśmy wiedzieli, że dla tego indeksu istnieją wartości zerowe .(pℓi,rℓi)ℓ=1,2,…p1i≥1r≥2S[i−rp1i+1,i−p1i]=S[i−(r−1)p1i+1,i].
p1ir1irpiLi=0(pℓi,rℓi)
Niech będzie najmniejszą liczbą całkowitą ściśle większą niż spełniającą podobnie,
dla niektórych . Tak jak poprzednio, weź za maksymalny z ustalonym . Ogólnie jest najmniejszą taką liczbą ściśle większą niż . Jeśli nie ma takiego , to .p2i(r1i−1)p1iS[i−r2ip2i+1,i−p2i]=S[i−(r2i−1)p2i+1,i]
r2i≥2r2ip2ipℓi(rℓ−1i−1)pℓ−1ipℓiLi=ℓ−1
Zauważ, że dla każdego indeksu i mamy powodu wzrostu wartości geometrycznie wraz z . (jeśli istnieje , to nie jest ono ściśle większe niż ale większe niż o co najmniej To określa wzrost geometryczny. )Li=O(log(i+1))pℓiℓpℓ+1i(rℓi−1)pℓipℓi/2
Załóżmy, że teraz wszystkie wartości są nam dane. Minimalny koszt jest określony przez wznowienie
przy założeniu, że dla ustawiamy . Tabela może być wypełniona czasem .(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>jdp(i,j)=+∞O(n2+n∑jLj)
Zauważyliśmy już powyżej, że poprzez ograniczenie sumy warunek do terminu. Ale tak naprawdę, jeśli spojrzymy na całą sumę, możemy udowodnić coś ostrzejszego.∑jLj=O(∑jlog(j+1))=Θ(nlogn)
Rozważ drzewo sufiksów z tyłu (tj. Drzewo prefiksów S). każdą składkę sumą do krawędzi , aby każda krawędź została obciążona maksymalnie raz. Naładuj każdy do krawędzi emanującej z i idąc w kierunku . Tutaj jest liściem drzewa prefiksów odpowiadającego a nca oznacza najbliższego wspólnego przodka.T(S←)S∑iLiT(S←)pjinca(v(i),v(i−pji))v(i−pji)v(i)S[1..i]
To pokazuje, że . Wartości można obliczyć w czasie przez przejście do drzewa sufiksów, ale pozostawię szczegóły do późniejszej edycji, jeśli ktoś jest zainteresowany.O(∑iLi)=O(n)(pji,rji)O(n+∑iLi)
Daj mi znać, jeśli to ma sens.