我正在尝试自学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。
而不是这个:
if (mid * log(mid) < miliseconds)
这个:
if ((mid * log(mid))/log(2) < miliseconds)