首先让我解释一下我试图解决的问题。我正在将我的代码与第三方库集成,后者执行非常复杂的财务预测。出于这个问题的目的,让我们说我有一个黑盒子,当我传入x时返回y。 现在,我需要做的是找到给定输出(y)的输入(x)。由于我知道最低和最高可能的输入值,我编写了以下算法:
这个算法做得很好,我没有看到任何问题。但是,有没有更快的方法来解决这个问题?
答案 0 :(得分:1)
听起来像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)