내가 당신을 오해하지 않는다면, 최소 비용 인수 분해는 다음과 같이 시간으로 계산 될 수 있다고 생각합니다 .O(n2)
각 인덱스 i에 대해 다음과 같이 대한 여러 값 을 계산 합니다. 하자 정수가되도록 정수 최소치 만족이 특정 경우 이이 특성을 가진 가장 큰 이되게하십시오. 그러한 가 존재 하지 않으면 설정 대해 0 값이 있음을 알 수 있습니다.(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)
하자 보다 엄격하게 더 작은 정수 만족 마찬가지로
일부 입니다 . 이전과 마찬가지로 를 고정 가진 최대 값으로 사용하십시오 . 일반적으로 은 보다 엄격하게 큰 숫자 입니다. 그러한 이 입니다.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
각 인덱스 i에 대해 값이 과 함께 기하학적으로 증가 하기 때문에 있습니다. ( 이 존재하는 경우 보다 엄격하게 크지 않고 최소한 보다 큰 것입니다 . 이것은 기하학적 인 증가를 설정합니다. )Li=O(log(i+1))pℓiℓpℓ+1i(rℓi−1)pℓipℓ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>jdp(i,j)=+∞O(n2+n∑jLj)
우리는 이미 . 그러나 실제로 우리가 전체의 합계를 보면, 더 날카로운 것을 증명할 수 있습니다.∑jLj=O(∑jlog(j+1))=Θ(nlogn)
의 반대의 접미사 트리 (즉, 의 접두사 트리)를 고려하십시오. 우리는 합계 에 대한 각 기부금을 가장자리에 청구하여 각 가장자리에 최대 한 번 청구됩니다. 각각의 를 하고 쪽으로 이동 하는 가장자리까지 충전 하십시오 . 여기서 는 해당하는 접두사 트리의 잎 이고 nca는 가장 가까운 공통 조상을 나타냅니다.T(S←)S∑iLiT(S←)pjinca(v(i),v(i−pji))v(i−pji)v(i)S[1..i]
이것은 입니다. 값 은 접미사 트리의 순회를 통해 시간 에서 계산할 수 있지만 관심이있는 사람은 나중에 편집 할 세부 사항을 남겨 둡니다.O(∑iLi)=O(n)(pji,rji)O(n+∑iLi)
이것이 의미가 있는지 알려주십시오.