差分思想

差分思想:通过关注数据之间的差异来简化问题的求解过程 例题:http://oj.oldmoon.cn/p/1013

方法一

枚举所有可能的杂物清除位置,依次计算答案(能够开垦的荒地块数),选一个最大值。

  • 需要枚举最多多少次?
  • 每次计算能够开垦的荒地块数,时间复杂度是多少?
  • 总时间复杂度是多少?

方法二

能不能更快呢?我们关注到在方法一中,每次计算能够开垦的荒地块数都需要从头开始计算,非常消耗时间。实际上,当我们在1000*1000的矩阵中清楚某处的杂物后,例如(100,100),只会影响它上下左右和自己最多五处的开垦结果。

所以我们可以先把原矩阵可以开垦的荒地数算出来,假设为x。每次清除完一个杂物后,我们依次判断上下左右和它自己,是否由原来的不能开垦变成了可以开垦,记新增的数量为delta,则清除完该杂物后的可开垦数量为x+delta。因为计算delta的过程非常快,所以极大的提升了时间。

这种对比数据间差异计算结果,而不是从头开始计算的方式,即用到了我们的差分思想。

前缀和数组是不是也用到了差分思想?

试一试

下面的样例数据中,最开始可开垦的荒地数量是多少?

.....
.#..#
.....

当清除(1,1)后,变成了下面的矩阵,此时可开垦的荒地数增加了多少?所以最终可开垦的荒地数为?

.....
....#
.....
上一章
第十二课-二维前缀和
下一章
递推