二进制搜索到实数函数的上限

时间:2014-11-02 13:17:38

标签: c++ binary-search

给定一个整数X,我需要找到最大整数N,使得N * log(N)<= X。

我正在使用二分搜索来计算答案,但我认为在某些情况下循环无限运行。

这是我的二元搜索功能:

int f(int X)
{
    int lo=1, hi=time;
    while(lo < hi)
    {
        int mid = lo + hi;
        mid/=2;
        if(mid*log2((double)mid) == X)
        {
            return mid;
        }
        if(mid*log2((double)mid) <= X)
        {
            hi = mid;
        }
        else lo=mid;
    }
    return lo;
}

我的方法是否正确?如果是,我的代码中的错误是什么?如果不是,那么正确的做法是什么?

1 个答案:

答案 0 :(得分:1)

考虑hi - lo == 1会发生什么。在这种情况下,mid等于lo,因此lo = mid是无操作,您可以最终进入无限循环。