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

Binary search to upper bound for a real number function

本文关键字:函数 实数 搜索 二进制      更新时间:2023-10-16

给定一个整数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;
}

我的方法正确吗?如果是,我的代码中的错误是什么?如果没有,正确的方法是什么?

考虑如果hi - lo == 1会发生什么。在这种情况下,mid等于lo,所以lo = mid是一个无运算,你可能会陷入一个无限循环。