二进制搜索以查找高于给定值的最小值

时间:2014-05-13 19:29:01

标签: algorithm search binary-search

我有一个返回double的函数。下面的代码列表是我用于测试的示例,但实际功能将从数据集的分析中提取。

public double f(double x)
{
    return (100000 - x) / 15000;
}

可以假设x的较高值总是返回较低的值,因此当x接近0时,返回的值可能会增加,但它可能总是保持为0.

x的值始终为正。

当提供给定的最小值和最大值时,我希望能够找到f(x)的最低值>> = 7(精度仅为0.001)。在上面的示例中,我使用100000作为最大值,使用1作为最小值。

这是一个很好的二元搜索候选者还是有更好的选择?

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算法将处于无限循环中。