我们可以标记顶部曲线 y=t(x) 和底部曲线 y=b(x)。标记最接近的函数 x_b=c(x_t)。我们知道最近函数是弱单调非递减的,因为两条最短路径永远不会相互交叉。
如果您知道距离函数 d(x_t,x_b) 对于每个固定的 x_t 只有一个局部最小值(如果曲线“足够平滑”就会发生这种情况),那么您可以通过“走”曲线来节省时间:
- start with x_t=0, x_b=0
- while x_t <= x_max
-- find the closest x_b by local search
(increment x_b while the distance is decreasing)
-- add {x_t, x_b} to the result set
-- increment x_t
如果您希望 x_b 足够平滑,但您不能假设并且想要一个准确的结果,
沿两个方向走曲线。在结果一致的地方,它们是正确的。在他们不同意的地方,在两个结果(最左边和最右边的局部最大值)之间运行一个完整的搜索。以这样的顺序(二进制除法)对“模糊块”进行采样,以允许由于单调性而进行最多的修剪。
作为中间立场:
沿两个方向走曲线。如果结果不一致,请在两者中选择。如果您可以保证每个固定 x_t 最多有两个局部最大值,则这会产生最佳解决方案。仍然存在一些未找到最佳解决方案的病理情况,并且包含一个局部最小值,该局部最小值两侧是其他两个比这个更差的局部最小值。我敢说,很难找到解决方案远非最优的情况(假设平滑 y=b(x))。