我被告知"任何指数都胜过任何对数"。
但是当指数在0到1之间时,对数的执行时间不是增长得快得多吗?所以按照这个逻辑,f = O(g)
我很难选择是跟随我的直觉还是听从我被告知的,但是我被告知的可能并不完全准确。
让我们来做一些数学运算。一个重要的事实是对数函数是单调递增的,这意味着如果
然后log f(x)≤log g(x)
f(x)≤g(x)
现在,让我们看看它在这里做了什么。我们有两个函数,x0.1和log10 x,如果取它们的对数,我们得到
log (x0.1) = 0.1 log x
和
log (log10 x) = 10 log log x
由于logx的增长速度比logx慢得多,我们可以直观地看到函数x0.1最终将超过log10 x。
现在,让我们形式化它。我们想找到x的某个值使得
0.1x <一口>一口>比;日志<一口> 10 x 一口>
共舞,
让我们假设这些是以10为底的对数,只是为了使数学更简单。如果我们假设x = 10k对于某个k,我们得到
(10 <一口> k> 0.1 一口>≥日志<一口> 10> k 一口>
100.1 k>日志<一口> 10> k 一口>
100.1 k>k
现在,取k = 100。现在我们有了
100.1 * 100>100
10 <一口> 10> /blockquote>
显然是正确的。由于两个函数都是单调递增的,这意味着当x≥10100时,
0.1x <一口>一口>比;日志<一口> 10 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) = big (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) = big (g(n))
这个问题:
让f (n) = O (n ^ 0.1),让日志^ g (n) = 10 (n)
我们得到了极限:
极限为n->∞(n^0.1)/(log^10(n))
对极限使用L'Hospital's
规则10次,得到:
极限为n->∞((0.1)^10 * ln^10(b) * n^0.1)/(10!)其中b是log
的底数
由于n项只在分子上,极限趋于无穷。
根据极限规则
log^10(n) = O(n^0.1) &0.1 n ^ ! = O (log ^ 10 (n)或n ^ 0.1 =ω(log (n) 10 ^)。