指数:小哦

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

  • Big-O和Little-O Notation 3答案之间的区别

  • n->infinite时, f(n)=o(g(n))意味着f(n)/g(n)->0

    对于你的问题,它应该保持a>1(n^b)/(a^n)->0 (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 。 当n->infinite ,即M/(sqrt(a)^n)->0 。最后,当n->infinite ,得到(n^b)/(a^n)->0 。 根据定义,这是n^b=o(a^n)


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


    首先,回顾一下大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)等。

  • 小O符号略有不同。 大O符号直观地表示,如果fO(g) ,那么f渐进地增长至多g 。 小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

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

    祝你好运!


    声明nb的超级高层含义是o(an)就是像指数函数那样的增长速度比多项式函数(如nb)快得多。

    当看到大O和小O表示法时,要理解的重要一点是它们都是上限。 我猜这就是为什么你感到困惑。 n是o(an),因为an的增长率要大得多。 你可能会在nb上找到一个更小的o上界(其中界限和函数之间的间隔更小),但仍然有效。 这也可能值得看看大O和小O之间的区别。

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

    函数f是函数g的一个小数,如果对于任何常数k> 0,您最终可以找到n的最小值,这样f(n)≤k* g(n)。

    请注意,小o的要求很难实现,这意味着如果函数f只是函数g的一小部分,它也是g的大O,并且这意味着函数g的增长速度比它仅仅是g的大O 。

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

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

    链接地址: http://www.djcxy.com/p/39879.html

    上一篇: Exponentials: Little Oh

    下一篇: How to create dynamic tree data structure in Java