Performance 当f(n)=n^.1和g(n)=log(n)^10时,f(n)=&x3A9;(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

有人告诉我“任何指数都胜过任何对数”

但是当指数介于0和1之间时,对数的执行时间不是增长得更快吗?根据这个逻辑,它应该是f=O(g)


我很难选择是遵循我的直觉还是别人告诉我的,但别人告诉我的可能并不完全准确。

让我们在这里试试数学。一个重要的事实是对数函数是单调递增的,这意味着如果

对数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
进行比较也会使分析更容易。