这听起来像x
并且y
是高度相关的(即随着x
增加,所以也会增加y
),否则您的分而治之算法将无法工作。
假设是这种情况,并且您可以计算出一个相关因子,那么您可以将中点乘以相关因子,以更快地磨练预期值。
请注意,我根本没有测试过这个想法,但这是值得考虑的事情。可能的改进是将correlationFactor 设为移动平均线,或者根据例如xLow 和xHigh 之间的十分位数预先计算它。
此外,这假设呼叫f(x)
相对便宜。如果它很昂贵,那么增加的调用次数f(x)
将使任何节省都相形见绌。事实上 - 我开始认为这是一个愚蠢的想法......
希望下面的伪代码能说明我的意思:
DivideAndConquer(xLow, xHigh, correlationFactor, expectedValue)
xMid = (xHigh - xLow) * correlationFactor
// Add some range checks to make sure that xMid is within xLow and xHigh!!
y = f(xMid)
if (y == expectedValue)
return expectedValue
elseif (y < expectedValue)
correlationFactor = (xMid - xLow) / (f(xMid) - f(xLow))
return DivideAndConquer(xLow, xMid, correlationFactor, expectedValue)
else
correlationFactor = (xHigh - xMid) / (f(xHigh) - f(xMid))
return DivideAndConquer(xMid, xHigh, correlationFactor, expectedValue)