Jika saya tidak salah paham dengan Anda, saya pikir faktorisasi biaya minimum dapat dihitung dalam waktu sebagai berikut.O(n2)
Untuk setiap indeks i, kami akan menghitung banyak nilai untuk sebagai berikut. Biarkan menjadi bilangan bulat terkecil sehingga ada bilangan bulat memuaskanUntuk , mari menjadi terbesar dengan properti ini. Jika tidak ada seperti itu, atur sehingga kami tahu ada nilai nol untuk indeks ini.(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)
Biarkan menjadi bilangan bulat terkecil yang benar-benar lebih besar dari memuaskan, demikian juga,
untuk beberapa . Seperti sebelumnya, ambil untuk menjadi yang maksimal setelah memperbaiki . Secara umum adalah angka terkecil yang benar-benar lebih besar dari . Jika tidak ada ada, maka .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
Perhatikan bahwa untuk setiap indeks i, kami memiliki karena nilai meningkat secara geometris dengan . (jika ada, itu tidak hanya benar-benar lebih besar dari tetapi lebih besar dari itu dengan setidaknya Ini menetapkan peningkatan geometris. )Li=O(log(i+1))pℓiℓpℓ+1i(rℓi−1)pℓipℓi/2
Misalkan sekarang semua nilai diberikan kepada kami. Biaya minimum diberikan oleh perulangan
dengan pemahaman bahwa untuk kita atur . Tabel dapat diisi waktu .(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)
Kami telah mengamati di atas bahwa dengan membatasi jumlah penjumlahan dengan istilah. Tetapi sebenarnya jika kita melihat seluruh jumlah, kita dapat membuktikan sesuatu yang lebih tajam.∑jLj=O(∑jlog(j+1))=Θ(nlogn)
Pertimbangkan pohon akhiran dari kebalikan dari (yaitu, pohon awalan S). Kami akan membebankan setiap kontribusi ke jumlah ke tepi sehingga setiap tepi akan dibebankan paling banyak satu kali. Isi daya setiap ke tepi yang berasal dari dan menuju . Di sini adalah daun dari pohon awalan yang bersesuaian dengan dan nca menunjukkan leluhur bersama terdekat.T(S←)S∑iLiT(S←)pjinca(v(i),v(i−pji))v(i−pji)v(i)S[1..i]
Ini menunjukkan bahwa . Nilai-nilai dapat dihitung dalam waktu oleh traversal dari pohon suffix tetapi saya akan meninggalkan detailnya untuk diedit nanti jika ada yang tertarik.O(∑iLi)=O(n)(pji,rji)O(n+∑iLi)
Beri tahu saya jika ini masuk akal.