Exponentials:小哦[重复]

问题描述 投票:2回答:3

这个问题在这里已有答案:

nb = o(an)(o是小哦)是什么意思,直觉?我刚开始自学自我算法,每次看到这些表达式时,我都很难解释这些表达式。在这里,我理解的方式是,对于函数nb,增长率是a。但无论是对还是错,这对我都没有意义。

algorithm big-o little-o
3个回答
1
投票

f(n)=o(g(n))意味着当f(n)/g(n)->0n->infinite

对于你的问题,它应该持有a>1(n^b)/(a^n)->0当n->无限时,自(n^b)/(sqrt(a)^n*sqrt(a)^n))=((n^b)/sqrt(a)^n) * (1/sqrt(a)^n)。让f(n)=((n^b)/sqrt(a)^n)先是函数增加然后减少,所以你可以得到max(f(n))=M的最大值,然后(n^b)/(a^n) < M/(sqrt(a)^n),自a>1, sqrt(a)>1,所以(sqrt(a)^n)->infiniten->infinite。当M/(sqrt(a)^n)->0时,这就是n->infinite。最后,当n->无限时,我们得到(n^b)/(a^n)->0。根据定义,这就是n^b=o(a^n)


1
投票

(为简单起见,我假设所有函数总是返回正值。例如,对于测量算法运行时的函数就是这种情况,因为没有算法在“负”时间内运行。)


首先,回顾一下大O符号,以澄清一个常见的误解:

要说fO(g)意味着f渐渐渐渐渐渐增长,与g一样快。更正式地说,将fg作为变量n的函数处理,说f(n)O(g(n))意味着有一个恒定的K,所以最终,f(n) < K * g(n)。这里的“最终”这个词意味着有一些固定值N(这是Kfg的函数),所以如果n > N然后f(n) < K * g(n)

例如,函数f(n) = n + 2O(n^2)。要了解原因,请让K = 1。然后,如果n > 10,我们有n + 2 < n^2,所以我们的条件是满意的。有几点需要注意:

  • 对于n = 1,我们有f(n) = 3g(n) = 1,所以f(n) < K * g(n)实际上失败了。没关系!请记住,不平等只需要最终保持,并且不平等是否因为一些小的n有限列表而失败并不重要。
  • 我们使用K = 1,但我们不需要。例如,K = 2也会奏效。重要的是,K有一些价值,它给了我们最终想要的不平等。
  • 我们看到n + 2O(n^2)。这可能看起来令人困惑,你可能会说,“等等,不是n + 2实际上O(n)?”答案是肯定的。 n + 2O(n)O(n^2)O(n^3)O(n/3)等。

Little-o符号略有不同。直觉上,大O符号说,如果fO(g),那么f渐渐渐渐渐渐增长,与g一样快。 Little-o表示如果fo(g),那么f渐渐渐渐地比g慢得多。

形式上,fo(g),如果对K的任何(让我们说是积极的)选择,最终不平等f(n) < K * o(g)持有。所以,例如:

  • 函数f(n) = n不是o(n)。这是因为,对于K = 1,没有n的值,所以f(n) < K * g(n)。直觉上,fg以相同的速率逐渐增长,因此f的生长速度并不比g慢。
  • 函数f(n) = no(n^2)。为什么是这样?选择你最喜欢的K积极价值。 (要查看实际点,请尝试使K较小,例如0.001。)想象一下,绘制函数f(n)K * g(n)。一个是通过正斜率原点的直线,另一个是通过原点的凹入抛物线。最终抛物线将高于线,并将保持这种方式。 (如果你还记得你的预计算/微积分...)

现在我们来看看你的实际问题:让f(n) = n^bg(n) = a^n。你问为什么fo(g)

据推测,原始声明的作者将ab视为常数,正实数,而且a > 1(如果a <= 1则声明为假)。

该声明用英文表示:

对于任何正实数b和任何实数a > 1,函数n^b渐渐地比a^n渐进地渐渐变慢。

如果您打算处理算法复杂性,这是一件很重要的事情。更简单,可以说“多项式比指数函数生长得慢得多”。这是不正确的,这是真的,并且写得太多,所以这里有一个参考:

https://math.stackexchange.com/questions/55468/how-to-prove-that-exponential-grows-faster-than-polynomial

也许你必须对数学有一些安慰才能阅读这个事实的任何证据。

祝好运!


1
投票

语句nb的超高级含义是o(a)只是指数函数比像多项式函数(如nb)快得多。

在查看大O和小符号时要理解的重要一点是它们都是上限。我猜这就是为什么你感到困惑。 nb是o(a)因为a的增长率要大得多。你可能会在nb上找到一个更紧密的小上界(一个边界和函数之间的间隙较小),但是仍然有效。它也可能值得看看Big O和小o之间的区别。

请记住,函数f是函数g的大O,如果对于某个常数k> 0,最终可以找到n的最小值,使得f(n)≤k* g(n)。

函数f是函数g的小o如果对于任何常数k> 0,你最终可以找到n的最小值,使得f(n)≤k* g(n)。

注意,很少需要满足要求,这意味着如果函数f是函数g的小o,它也是g的大O,这意味着函数g的增长速度比它只是g的大O更快。 。

在你的例子中,如果b是3且a是2并且我们将k设置为1,我们可以计算n的最小值,使得nb≤k* an。在这种情况下,它介于9和10之间,因为9³ = 7291 * 2⁹ = 512,这意味着在9和a不大于nb但是10³ = 10001 * 2¹⁰ = 1024,这意味着n现在大于nb。对于n> 10的任何值,你可以看到n这些函数的n大于nb。此时我们只显示nb是n的大O,因为Big O只要求某个k> 0的值(我们选择了1)≥nb的某些最小n(在这种情况下,它在9到10之间)

为了证明nb是a的小数,我们必须证明,对于任何大于0的k,你仍然可以找到n的最小值,使得a> nb。例如,如果你选择k = .5,我们之前找到的最小值10不起作用,因为10³ = 1000.5 * 2¹⁰ = 512。但是我们可以继续向n进一步滑动n的最小值,越小,k越大,n将b的最小值。说nb是一个小手段,无论你做多少k我们总能找到一个足够大的n值,这样nb≤k* an

© www.soinside.com 2019 - 2024. All rights reserved.