Se non ti sto fraintendendo, penso che la fattorizzazione del costo minimo possa essere calcolata nel tempo come segue.O(n2)
Per ogni indice i, calcoleremo un gruppo di valori per come segue. Sia il numero intero più piccolo in modo che esista un numero intero soddisfiPer questo particolare , sia la più grande con questa proprietà. Se tale esiste, impostare modo da sapere che ci sono zero valori per questo indice.(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)
Sia il numero intero più piccolo strettamente più grande di soddisfacente, similmente,
per alcuni . Come prima, prendi per essere il massimo dopo aver corretto . In generale è il numero più piccolo di questo numero strettamente più grande di . Se non esiste tale , allora .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
Si noti che per ogni indice i, abbiamo causa dei valori che aumentano geometricamente con . (se esiste , non è solo strettamente più grande di ma più grande di quello di almeno Ciò determina l'aumento geometrico. )Li=O(log(i+1))pℓiℓpℓ+1i(rℓi−1)pℓipℓi/2
Supponiamo ora che tutti i valori vengano dati. Il costo minimo è dato dalla ricorrenza
con la consapevolezza che per abbiamo impostato . La tabella può essere compilata in tempo.(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)
Abbiamo già osservato sopra che limitando il termine termine per termine. Ma in realtà se guardiamo l'intera somma, possiamo dimostrare qualcosa di più nitido.∑jLj=O(∑jlog(j+1))=Θ(nlogn)
Considera l'albero dei suffissi del rovescio di (cioè l'albero dei prefissi di S). ogni contributo alla somma su un bordo di modo che ogni bordo venga addebitato al massimo una volta. Carica ogni sul bordo che emana da e va verso . Qui è la foglia dell'albero del prefisso corrispondente a e nca indica l'antenato comune più vicino.T(S←)S∑iLiT(S←)pjinca(v(i),v(i−pji))v(i−pji)v(i)S[1..i]
Ciò mostra che . I valori possono essere calcolati nel tempo da un attraversamento dell'albero del suffisso, ma lascerò i dettagli a una modifica successiva se qualcuno è interessato.O(∑iLi)=O(n)(pji,rji)O(n+∑iLi)
Fammi sapere se questo ha senso.