1

我正在尝试解决一个关于比较两种算法在最坏情况下运行时间方面的问题,并找到一种算法比另一种算法运行时间更快的输入大小。

这两种算法是:
A 1 = 2n log 10 n
A 2 = 0.1n 2

基本上,我试图解决以下 n 的不等式:
2n log 10 n < 0.1n 2

谁能指出我正确的方向?
我设法达到:
log 10 n < 0.05n ==> n < 10 0.05n

但我不知道从这里该怎么做(或者我可能以错误的方式试图解决它)。

提前谢谢你的帮助!

4

2 回答 2

4

实际上,您正在尝试解决不平等问题

点 1 n 的平方小于 2 乘以 n 以 10 n 为底的对数

因为n 平方算法只会在很短的时间内变得更快,然后对于任何更大的 n 值,登录算法都会更快。

忽略 n <= 0 的情况,乘以 10,再除以 n 得到:

n 小于 20 以 10 为底的对数 n

然后除以 20 并以 10 为底对两边取幂:

10 到 n 超过 20 小于 n

使用数值求解器10 到 n 超过 20 减去 n在区间 [1, 40] 上找到 的零点,因为显然 40 是一个上限(因为10 到 40 超过 20 等于 10 的平方等于 10,040)。

例如,在 Matlab 中:

>> fzero(@(x) 10^(x/20)- x, 20)

ans =

   29.3531

因此,对于任何 n 到 29 的整数,n 平方算法都更快,对于 n > 29,登录算法获胜。

于 2013-08-06T01:05:50.597 回答
1

只需使用 sagemath 绘制函数的图像: plot(0.1 * n * n - 2 * n * log(n, 10), n, 0, 50)

于 2013-08-06T01:17:01.553 回答