我有一个返回double的函数。下面的代码列表是我用于测试的示例,但实际功能将从数据集的分析中提取。
public double f(double x)
{
return (100000 - x) / 15000;
}
可以假设x的较高值总是返回较低的值,因此当x接近0时,返回的值可能会增加,但它可能总是保持为0.
x的值始终为正。
当提供给定的最小值和最大值时,我希望能够找到f(x)的最低值>> = 7(精度仅为0.001)。在上面的示例中,我使用100000作为最大值,使用1作为最小值。
这是一个很好的二元搜索候选者还是有更好的选择?
答案 0 :(得分:2)
是和否。
如果单调函数没有收敛到有限值 - 比是,你可以使用二进制搜索,如下所示:
i <- 1
while (f(i) > target):
i <- i*2
binary search for target in the range `[2^(i-1),2^i]` for best candidate.
上述复杂性为O(log(i))
- 其中i
是最接近元素的索引。
但请注意,如果函数收敛到某个常数值,则所有投注都会关闭。
例如,它不会帮助您找到函数-1
的最接近f(i) = 1/i
的值。在这种情况下,thew算法将处于无限循环中。