Performance 当f(n)=n^.1和g(n)=log(n)^10时,f(n)=&x3A9;(g) ??
有人告诉我“任何指数都胜过任何对数” 但是当指数介于0和1之间时,对数的执行时间不是增长得更快吗?根据这个逻辑,它应该是f=O(g)Performance 当f(n)=n^.1和g(n)=log(n)^10时,f(n)=&x3A9;(g) ??,performance,math,big-o,execution-time,Performance,Math,Big O,Execution Time,有人告诉我“任何指数都胜过任何对数” 但是当指数介于0和1之间时,对数的执行时间不是增长得更快吗?根据这个逻辑,它应该是f=O(g) 我很难选择是遵循我的直觉还是别人告诉我的,但别人告诉我的可能并不完全准确。让我们在这里试试数学。一个重要的事实是对数函数是单调递增的,这意味着如果 对数f(x)≤ 对数g(x) 然后 f(x)≤ g(x) 现在,让我们看看这是怎么回事。我们有两个函数,x0.1和log10x。如果我们拿走他们的日志,我们会得到 对数(x0.1)=0.1对数x 及 对数(log10
我很难选择是遵循我的直觉还是别人告诉我的,但别人告诉我的可能并不完全准确。让我们在这里试试数学。一个重要的事实是对数函数是单调递增的,这意味着如果 对数f(x)≤ 对数g(x) 然后 f(x)≤ g(x) 现在,让我们看看这是怎么回事。我们有两个函数,x0.1和log10x。如果我们拿走他们的日志,我们会得到 对数(x0.1)=0.1对数x 及 对数(log10 x)=10对数x 由于logx的增长速度比logx慢得多,我们可以直观地看到函数x0.1最终将超过log10x 现在,让我们将其正式化。我们想找到x的一些值,这样 x0.1>log10 x 让我们假设这些是以10为底的对数,只是为了简化数学。如果我们假设某个k的x=10k,我们就得到了 (10k)0.1≥ log10 10k 100.1 k>log10 10k 100.1K>k 现在,取k=100。现在我们有了 100.1*100>100 1010>100 这显然是正确的。因为两个函数都是单调递增的,这意味着对于x≥ 10100,这是真的 x0.1>log10 x 这意味着x0.1=O(log10 k)不是真的
希望这有帮助 渐近分析真正关注的是长期关系(当n假设较大值时,函数的值如何比较)?它还忽略了常数,这就是为什么有时会看到奇怪的情况,如f(x)=10000000*x=O(x^2)
对于较大的
n
,f(n)>g(n)
,这才是真正重要的 使用极限规则验证n^0.1=big omega(log^10(n))
的另一种方法
限制规则是:
极限为n->无穷大f(n)/g(g)
如果极限为正无穷大,f(n)!=O(g(n))&g(n)=O(f(n))或f(n)=大ω(g(n))
如果极限为0,f(n)=O(g(n))&g(n)!=O(f(n))
如果极限为正实数,则f(n)=O(g(n))&g(n)=O(f(n))或f(n)=大θ(g(n))
对于此问题:
设f(n)=O(n^0.1),设g(n)=log^10(n)
这给了我们一个极限:
限制为n->无穷大(n^0.1)/(对数^10(n))
使用L'Hospital关于限制的10次规则,我们得到:
限制为n->无穷大((0.1)^10*ln^10(b)*n^0.1)/(10!),其中b是日志的基础
因为n项只在分子中,所以极限接近无穷大
按限制规则
日志^10(n)=O(n^0.1)&n^0.1!=O(对数^10(n)或n^0.1=大Ω(对数^10(n))
“指数”的意思是当n在指数中时。这不是你在这里看到的。不过,这是一个有趣的问题,如果OP使用了0.1^n.:)+1来获得非常清晰的回答。在这些情况下,n=10^k
替换通常会有所帮助。OP还可以考虑取<<代码> f>代码>和<代码> g < /代码>的索引;将e^n
与n^100
进行比较也会使分析更容易。