我正在尝试解决一个问题,即根据最差情况运行时间比较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
但我不知道该怎么做(或者我可能试图解决它的错误方法)。
提前感谢您的帮助!
答案 0 :(得分:4)
实际上,你正在努力解决不平等问题
因为算法只会在很短的时间内变得更快,然后对于任何更大的n值,算法会更快。
忽略大小写<&lt; = 0,乘以10,然后除以n得到:
然后除以20并用10的基数对两边取幂:
使用数值求解器在区间[1,40]上找到的零,因为显然40是上限(因为)。
例如,在Matlab中:
>> fzero(@(x) 10^(x/20)- x, 20)
ans =
29.3531
因此对于任何n到29之前的整数,算法更快,而对于n> 29,算法获胜。
答案 1 :(得分:1)
只需使用sagemath绘制函数图像:plot(0.1 * n * n - 2 * n * log(n,10),n,0,50)