理想情况就是像图一一样每个区间没有重叠,适合用二分法。ST算法适合图二这样的的重叠区间,但是是基于二分法的,状态转化神似动态规划。
ST算法的主要核心是理解如何预处理和进行状态转换,预处理可以由图一没有重叠部分理解如何将要处理的数组和状态数组f[][]建立联系,主要是数组坐标运算和f[][]对应的表示含义。
理解图一表达方法后就可以来计算重叠部分,因为选择的区域会重叠,不一定是2的倍数,所以要求出最大的指数k,也可以理解成图一中需要进行k组比较,接着就是和类似动态规划,由图二的下面的图像可以得出状态转化:
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
参考思路是这篇博客:ST算法,里面有具体代码
这样看实际上对于有重叠部分的区间是不是还是化成理想状态下进行求解?懂了好像不太懂