OSDN Git Service

修正了 斜率优化 中的一个错误。
authorBackSlashDelta <64258212+BackSlashDelta@users.noreply.github.com>
Sun, 1 Nov 2020 14:06:10 +0000 (22:06 +0800)
committerGitHub <noreply@github.com>
Sun, 1 Nov 2020 14:06:10 +0000 (22:06 +0800)
修正了 动态规划/DP 优化/斜率优化 中的一个错误。
(这个错误害人不浅)

docs/dp/opt/slope.md

index 4d0efd8..870cb34 100644 (file)
@@ -18,7 +18,7 @@ author: TrisolarisHD, hsfzLZH1, abc1763613206, greyqz, Ir1d, billchenchina, Chro
 将与 $j$ 无关的移到外面,我们得到
 
 $$
-f_i - (s_i-L')^2=\min_{j<i}\{f_j+s_j^2 + 2s_j(s_i-L') \} 
+f_i - (s_i-L')^2=\min_{j<i}\{f_j+s_j^2 + 2s_j(L'-s_i) \} 
 $$
 
 考虑一次函数的斜截式 $y=kx+b$ ,将其移项得到 $b=y-kx$ 。我们将与 $j$ 有关的信息表示为 $y$ 的形式,把同时与 $i,j$ 有关的信息表示为 $kx$ ,把要最小化的信息(与 $i$ 有关的信息)表示为 $b$ ,也就是截距。具体地,设
@@ -27,14 +27,14 @@ $$
 \begin{aligned}
 x_j&=s_j\\
 y_j&=f_j+s_j^2\\
-k_i&=-2(s_i-L')\\
+k_i&=-2(L'-s_i)\\
 b_i&=f_i-(s_i-L')^2\\
 \end{aligned}
 $$
 
 则转移方程就写作 $b_i = \min_{j<i}\{ y_j-k_ix_j \}$ 。我们把 $(x_j,y_j)$ 看作二维平面上的点,则 $k_i$ 表示直线斜率, $b_i$ 表示一条过 $(x_j,y_j)$ 的斜率为 $k_i$ 的直线的截距。问题转化为了,选择合适的 $j$ ( $1\le j<i$ ),最小化直线的截距。
 
-![](../images/optimization.svg)
+![slope_optimization](../images/optimization.svg)
 
 如图,我们将这个斜率为 $k_i$ 的直线从下往上平移,直到有一个点 $(x_p,y_p)$ 在这条直线上,则有 $b_i=y_p-k_ix_p$ ,这时 $b_i$ 取到最小值。算完 $f_i$ ,我们就把 $(x_i,y_i)$ 这个点加入点集中,以做为新的 DP 决策。那么,我们该如何维护点集?