Loading docs/dp/optimization.md +11 −6 Original line number Diff line number Diff line Loading @@ -52,7 +52,12 @@ By [hsfzLZH1](https://github.com/hsfzLZH1) 由于上一步已经证明出了$cost$满足四边形不等式,而该不等式的左边在上式出现过,将其替换得 $f_{i,x}+f_{x+1,j}+cost_{i,j}+f_{i+1,y}+f_{y+1,j+1}+cost_{i+1,j+1}\le f_{i,x}+f_{x+1,j+1}+cost{i,j+1}+f_{i+1,y}+f_{y+1,j}+cost_{i+1,j}$ $$ \begin{aligned} &&f_{i,\,x}+f_{x+1,\,j}+cost_{i,\,j}+f_{i+1,\,y}+f_{y+1,\,j+1}+cost_{i+1,\,j+1}\\ &\le&f_{i,\,x}+f_{x+1,\,j+1}+cost_{i,\,j+1}+f_{i+1,\,y}+f_{y+1,\,j}+cost_{i+1,\,j}\\ \end{aligned} $$ 消去公共项可得 $f_{i,j}+f_{i+1,j+1}\le f_{i+1,j}+f_{i,j+1}$ Loading @@ -70,7 +75,7 @@ $f_{i,x}+f_{x+1,j}+cost_{i,j}+f_{i+1,y}+f_{y+1,j+1}+cost_{i+1,j+1}\le f_{i,x}+f_ $f_{x+1,j-1}+f_{y+1,j}\le f_{y+1,j-1}+f_{x+1,j}$ 由于我们是令 $y=idx_{i,j-1},x\le y$ 时 $f_{i,j-1}$ 取得最小值,那么 $f_{i,j-1}(idx_{i,j-1}=x)$ 一定大于等于 $dp[i][j-1](idx_{i,j-1}=y)$ ,所以对于 $f_{i,j-1}$ 可以取到最优值的 $y$ ,所有小于它的值,对于 $f_{i,j}$ 来说,都没有 $y$ 优,所以最优决策一定不是小于$y$ 的,那么一定有 由于我们是令 $y=idx_{i,j-1},x\le y$ 时 $f_{i,j-1}$ 取得最小值,那么 $f_{i,j-1}(idx_{i,j-1}=x)$ 一定大于等于 $f_{i,j-1}(idx_{i,j-1}=y)$ ,所以对于 $f_{i,j-1}$ 可以取到最优值的 $y$ ,所有小于它的值,对于 $f_{i,j}$ 来说,都没有 $y$ 优,所以最优决策一定不是小于 $y$ 的,那么一定有 $idx_{i,j-1}\le idx_{i,j}$ 证毕。 Loading @@ -97,13 +102,13 @@ for(int i=n;i>=1;i--) } ``` 注意:由于在计算 $f_{i,j}$ 的时候需要知道 $s_{i,j-1}$ 和 $s_{i+1,j}$ 的值,所以 $i$ 的循环逆序。 注意:由于在计算 $f_{i,j}$ 的时候需要知道 $idx_{i,j-1}$ 和 $idx_{i+1,j}$ 的值,所以 $i$ 的循环逆序。 ### 时间复杂度证明 计算 $f_{i,j}$ 时,我们要循环 $s_{i+1,j}-s_{i,j-1}$ 次,那么一共加起来会循环多少次呢? 计算 $f_{i,j}$ 时,我们要循环 $idx_{i+1,j}-idx_{i,j-1}$ 次,那么一共加起来会循环多少次呢? 因为 $\sum_{i=1}^{n-1}(idx_{i+1,i+1}-idx_{i,i})=idx{n,n}-idx{1,1}$ 很显然和 $n$ 同阶,那么它的 $n$ 倍就和 $n^2$ 同阶,时间复杂度是 $O(n^2)$。 因为 $\sum_{i=1}^{n-1}(idx_{i+1,i+1}-idx_{i,i})=idx_{n,n}-idx_{1,1}$ 很显然和 $n$ 同阶,那么它的 $n$ 倍就和 $n^2$ 同阶,时间复杂度是 $O(n^2)$。 ### 几道练习题 Loading Loading
docs/dp/optimization.md +11 −6 Original line number Diff line number Diff line Loading @@ -52,7 +52,12 @@ By [hsfzLZH1](https://github.com/hsfzLZH1) 由于上一步已经证明出了$cost$满足四边形不等式,而该不等式的左边在上式出现过,将其替换得 $f_{i,x}+f_{x+1,j}+cost_{i,j}+f_{i+1,y}+f_{y+1,j+1}+cost_{i+1,j+1}\le f_{i,x}+f_{x+1,j+1}+cost{i,j+1}+f_{i+1,y}+f_{y+1,j}+cost_{i+1,j}$ $$ \begin{aligned} &&f_{i,\,x}+f_{x+1,\,j}+cost_{i,\,j}+f_{i+1,\,y}+f_{y+1,\,j+1}+cost_{i+1,\,j+1}\\ &\le&f_{i,\,x}+f_{x+1,\,j+1}+cost_{i,\,j+1}+f_{i+1,\,y}+f_{y+1,\,j}+cost_{i+1,\,j}\\ \end{aligned} $$ 消去公共项可得 $f_{i,j}+f_{i+1,j+1}\le f_{i+1,j}+f_{i,j+1}$ Loading @@ -70,7 +75,7 @@ $f_{i,x}+f_{x+1,j}+cost_{i,j}+f_{i+1,y}+f_{y+1,j+1}+cost_{i+1,j+1}\le f_{i,x}+f_ $f_{x+1,j-1}+f_{y+1,j}\le f_{y+1,j-1}+f_{x+1,j}$ 由于我们是令 $y=idx_{i,j-1},x\le y$ 时 $f_{i,j-1}$ 取得最小值,那么 $f_{i,j-1}(idx_{i,j-1}=x)$ 一定大于等于 $dp[i][j-1](idx_{i,j-1}=y)$ ,所以对于 $f_{i,j-1}$ 可以取到最优值的 $y$ ,所有小于它的值,对于 $f_{i,j}$ 来说,都没有 $y$ 优,所以最优决策一定不是小于$y$ 的,那么一定有 由于我们是令 $y=idx_{i,j-1},x\le y$ 时 $f_{i,j-1}$ 取得最小值,那么 $f_{i,j-1}(idx_{i,j-1}=x)$ 一定大于等于 $f_{i,j-1}(idx_{i,j-1}=y)$ ,所以对于 $f_{i,j-1}$ 可以取到最优值的 $y$ ,所有小于它的值,对于 $f_{i,j}$ 来说,都没有 $y$ 优,所以最优决策一定不是小于 $y$ 的,那么一定有 $idx_{i,j-1}\le idx_{i,j}$ 证毕。 Loading @@ -97,13 +102,13 @@ for(int i=n;i>=1;i--) } ``` 注意:由于在计算 $f_{i,j}$ 的时候需要知道 $s_{i,j-1}$ 和 $s_{i+1,j}$ 的值,所以 $i$ 的循环逆序。 注意:由于在计算 $f_{i,j}$ 的时候需要知道 $idx_{i,j-1}$ 和 $idx_{i+1,j}$ 的值,所以 $i$ 的循环逆序。 ### 时间复杂度证明 计算 $f_{i,j}$ 时,我们要循环 $s_{i+1,j}-s_{i,j-1}$ 次,那么一共加起来会循环多少次呢? 计算 $f_{i,j}$ 时,我们要循环 $idx_{i+1,j}-idx_{i,j-1}$ 次,那么一共加起来会循环多少次呢? 因为 $\sum_{i=1}^{n-1}(idx_{i+1,i+1}-idx_{i,i})=idx{n,n}-idx{1,1}$ 很显然和 $n$ 同阶,那么它的 $n$ 倍就和 $n^2$ 同阶,时间复杂度是 $O(n^2)$。 因为 $\sum_{i=1}^{n-1}(idx_{i+1,i+1}-idx_{i,i})=idx_{n,n}-idx_{1,1}$ 很显然和 $n$ 同阶,那么它的 $n$ 倍就和 $n^2$ 同阶,时间复杂度是 $O(n^2)$。 ### 几道练习题 Loading