无法解决算法简介问题1-1

问题描述 投票:0回答:1

我正在尝试自学CS,所以我找到了这本关于算法的书,即著名的CLRS。然而,我似乎无法得到问题1-1的正确答案。文字是这样的:对于下表中的每个函数 f(n) 和时间 t,确定在时间 t 内可以解决的问题的最大尺寸 n,假设解决该问题的算法采用 f(n)微秒。

问题是,当我尝试找到 n log n of 10^6 的解时,我得到的答案与其他答案不同,我得到 87847.9,而我在其他地方看到的答案是 6.24×10^4。 为了尝试找到解决方案,我用 C++ 实现了一个脚本:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    const double miliseconds = pow(10, 6);
    double high = pow(10, 6) * 10; // Increase the upper limit
    double low {};
    double mid {};
    double n {};

    while (low < high)
    {
        mid = (low + high) / 2;
        if (mid * log(mid) < miliseconds)
        {
            low = mid + 1;
        }
        else
        {
            high = mid;
        }
    }
    n = high;
    cout << n << endl;
    return 0;
}

输出应该是 6.24×10^4 但我仍然得到 87847.9 我的问题是我该如何解决这个问题?为什么我的方法不正确?

我不明白如何配置我的代码以获得正确的答案,应该是 6.24×10^4,但我仍然得到 87847.9。

c++ algorithm binary-search
1个回答
0
投票

而不是这个:

if (mid * log(mid) < miliseconds)

这个:

if ((mid * log(mid))/log(2) < miliseconds)
© www.soinside.com 2019 - 2024. All rights reserved.