考虑前 kkk 项的方差。
s2=1k∑i=1k(vˉ−vi)2s=1k(∑i=1k(vˉ2+vi2−2vˉvi))=1k(∑i=1kvˉ2+∑i=1kvi2−∑i=1k2vˉvi))=1k(kvˉ2+∑i=1kvi2−2vˉ∑i=1kvi))=vˉ2+1k∑i=1kvi2−2kvˉ∑i=1kvi=1k2(∑i=1kvi)2+1k∑i=1kvi2−2kvˉ∑i=1kvi=1k2(∑i=1kvi)2+1k∑i=1kvi2−2k2(∑i=1kvi)2=1k∑i=1kvi2−1k2(∑i=1kvi)2\begin{aligned}
s^2&=\frac{1}{k}\sum_{i=1}^k(\bar{v}-v_i)^2s\\
&=\frac 1k\Big( \sum_{i=1}^k (\bar v^2+v_i^2-2\bar vv_i)\Big)\\
&=\frac 1k\Big( \sum_{i=1}^k \bar v^2+\sum_{i=1}^kv_i^2-\sum_{i=1}^k2\bar vv_i)\Big)\\
&=\frac 1k\Big( k\bar v^2+\sum_{i=1}^kv_i^2-2\bar v\sum_{i=1}^kv_i)\Big)\\
&=\bar v^2+\frac 1k\sum_{i=1}^kv_i^2-\frac 2k\bar v\sum_{i=1}^kv_i\\
&=\frac 1{k^2}\Big(\sum_{i=1}^k v_i\Big)^2+\frac 1k\sum_{i=1}^kv_i^2-\frac 2k\bar v\sum_{i=1}^kv_i\\
&=\frac 1{k^2}\Big(\sum_{i=1}^k v_i\Big)^2+\frac 1k\sum_{i=1}^kv_i^2-\frac 2{k^2}\Big(\sum_{i=1}^kv_i\Big)^2\\
&=\frac 1k\sum_{i=1}^kv_i^2-\frac 1{k^2}\Big(\sum_{i=1}^kv_i\Big)^2\\
\end{aligned}s2=k1i=1∑k(vˉ−vi)2s=k1(i=1∑k(vˉ2+vi2−2vˉvi))=k1(i=1∑kvˉ2+i=1∑kvi2−i=1∑k2vˉvi))=k1(kvˉ2+i=1∑kvi2−2vˉi=1∑kvi))=vˉ2+k1i=1∑kvi2−k2vˉi=1∑kvi=k21(i=1∑kvi)2+k1i=1∑kvi2−k2vˉi=1∑kvi=k21(i=1∑kvi)2+k1i=1∑kvi2−k22(i=1∑kvi)2=k1i=1∑kvi2−k21(i=1∑kvi)2
则 mmm 项的方差为 s2=1m∑i=1mvi2−1m2(∑i=1mvi)2s^2=\frac 1m\sum_{i=1}^mv_i^2-\frac 1{m^2}\Big(\sum_{i=1}^mv_i\Big)^2s2=m1i=1∑mvi2−m21(i=1∑mvi)2
乘上 m2m^2m2,得:s2m2=m∑i=1mvi2−(∑i=1mvi)2s^2m^2=m\sum_{i=1}^mv_i^2-\Big(\sum_{i=1}^mv_i\Big)^2s2m2=mi=1∑mvi2−(i=1∑mvi)2
由于 (∑i=1mvi)2\Big(\sum\limits_{i=1}^mv_i\Big)^2(i=1∑mvi)2 固定不变,因此要让 s2m2s^2m^2s2m2 最小,只需要最小化 ∑i=1mvi2\sum\limits_{i=1}^mv_i^2i=1∑mvi2 即可。
定义: f[i][j]f[i][j]f[i][j] 表示前面 iii 个数分成 jjj 段的最小价值,sum[i]=∑i=1iaisum[i]=\sum\limits_{i=1}^i a_isum[i]=i=1∑iai
转移:f[i][j]=mink=1i−1f[k][j−1]+(sum[i]−sum[k])2f[i][j]=\min\limits_{k=1}^{i-1}f[k][j-1]+(sum[i]-sum[k])^2f[i][j]=k=1mini−1f[k][j−1]+(sum[i]−sum[k])2
时间复杂度 Θ(n3)\Theta(n^3)Θ(n3),考虑斜率优化。
设 ka<kbk_a<k_bka<kb 且 kak_aka 优于 kbk_bkb,则有:
f[ka][j−1]+(sum[i]−sum[ka])2<f[kb][j−1]+(sum[i]−sum[kb])2f[k_a][j-1]+(sum[i]-sum[k_a])^2<f[k_b][j-1]+(sum[i]-sum[k_b])^2f[ka][j−1]+(sum[i]−sum[ka])2<f[kb][j−1]+(sum[i]−sum[kb])2
f[ka][j−1]+2sum[i]∗sum[ka]+sum[ka]2<f[kb][j−1]+2sum[i]∗sum[kb]+sum[kb]2f[k_a][j-1]+2sum[i]*sum[k_a]+sum[k_a]^2<f[k_b][j-1]+2sum[i]*sum[k_b]+sum[k_b]^2f[ka][j−1]+2sum[i]∗sum[ka]+sum[ka]2<f[kb][j−1]+2sum[i]∗sum[kb]+sum[kb]2
化简:(f[ka][j−1]+sum[ka]2)−(f[kb][j−1]+sum[kb]2)<2sum[i]×(sum[ka]−sum[kb])(f[k_a][j-1]+sum[k_a]^2)-(f[k_b][j-1]+sum[k_b]^2)<2sum[i]\times(sum[k_a]-sum[k_b])(f[ka][j−1]+sum[ka]2)−(f[kb][j−1]+sum[kb]2)<2sum[i]×(sum[ka]−sum[kb])
整理:整理:(f[ka][j−1]+sum[ka]2)−(f[kb][j−1]+sum[kb]2)(sum[ka]−sum[kb])<2sum[i]\frac{(f[k_a][j-1]+sum[k_a]^2)-(f[k_b][j-1]+sum[k_b]^2)}{(sum[k_a]-sum[k_b])}<2sum[i](sum[ka]−sum[kb])(f[ka][j−1]+sum[ka]2)−(f[kb][j−1]+sum[kb]2)<2sum[i]
单调队列维护递增斜率即可,转移时间复杂度 Θ(1)\Theta(1)Θ(1),总时间复杂度 Θ(n2)\Theta(n^2)Θ(n2)