算法分析:选择最佳算法

时间:2013-08-06 00:51:23

标签: algorithm time inequality

我正在尝试解决一个问题,即根据最差情况运行时间比较2个算法,并找出一个算法比另一个算法运行时间更快的输入大小。

这两种算法是:
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

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

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

实际上,你正在努力解决不平等问题

point 1 n squared less than 2 times n log base 10 n

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

忽略大小写<&lt; = 0,乘以10,然后除以n得到:

n less than 20 log base 10 n

然后除以20并用10的基数对两边取幂:

10 to the n over 20 less than n

使用数值求解器在区间[1,40]上找到10 to the n over 20 minus n的零,因为显然40是上限(因为10 to the 40 over 20 equals 10 squared equals 10,040)。

例如,在Matlab中:

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

ans =

   29.3531

因此对于任何n到29之前的整数,n squared算法更快,而对于n> 29,n log n算法获胜。

答案 1 :(得分:1)

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