有一个8*8的棋盘,沿着格子的边进行分割,每分割一块拿走,将剩下的矩形棋盘继续分割。n-1次分割后,可以得到n块矩形棋盘。假设原棋盘每一格都有一个分值,则分割后的每一块都有一个总分,总分即为所有格子分值之和。设分割的每一块棋盘总分为xi。如何分割可以让各矩形棋盘总分的均方差最小?
先对均方差公式作一些简化。通过上面公式可以看出,其实就是要求分割后的n个矩形棋盘,分值平方的总和最小。当你遇到一些没有头绪的问题的时候,先不要想太多,别上来整什么高大上的思想,咱们就从最简单的场景开始分析。
缩小问题规模假设棋盘规模不是8*8,而是2*2。缩小问题规模是一种很有用的方法,因为问题的本质并没有发生变化,只是数据更小,就更有利于我们分析问题的本质。
每次分割有2种决策,要么水平切,要么垂直切。针对一种决策,又有很多种具体的不同的切法。例如一个4*4的棋盘,先垂直切,就可以从3个不同的位置切。如果给棋盘加一个坐标,每一种切法就可以用一个线段来具体表示,比如用这条切线的两个端点坐标。
分割之后,就变成了2个更小的棋盘,而这2个棋盘也可以用矩形的坐标表示,此时就把原问题变成了子问题,原问题的最优解也就是所有子问题中选一个最优的。
动态规划最重要的就是找出阶段、状态和决策,有时可以先用递归的方式建模,然后加记忆化优化,最后再转为递推。