Algorithm 指数:小哦

Algorithm 指数:小哦,algorithm,big-o,little-o,Algorithm,Big O,Little O,直觉上,nb=o(an)(o是小oh)是什么意思?我刚刚开始自学我自己的算法,每次看到这样的表达式,我都很难解释。这里,我的理解是,对于函数nb,增长率是一个常数。但是,无论是对是错,这对我来说都没有意义。语句nb的超高级含义是o(an),就是像a这样的指数函数比像nb这样的多项式函数增长得快得多 在研究大O和小O符号时,需要了解的重要一点是,它们都是上界。我猜这就是你困惑的原因。nb是o(an),因为an的生长速率要大得多。您可能会在nb上找到一个更紧的小o上界(在这个上界和函数之间的间隙更小

直觉上,nb=o(an)(o是小oh)是什么意思?我刚刚开始自学我自己的算法,每次看到这样的表达式,我都很难解释。这里,我的理解是,对于函数nb,增长率是一个常数。但是,无论是对是错,这对我来说都没有意义。

语句nb的超高级含义是o(an),就是像a这样的指数函数比像nb这样的多项式函数增长得快得多

在研究大O和小O符号时,需要了解的重要一点是,它们都是上界。我猜这就是你困惑的原因。nb是o(an),因为an的生长速率要大得多。您可能会在nb上找到一个更紧的小o上界(在这个上界和函数之间的间隙更小),但an仍然有效。也许还值得一看大O和小O之间的区别

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

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

请注意,小o要求更难实现,这意味着如果函数f是函数g的小o,那么它也是g的大o,这意味着函数g的增长速度要比函数g的大o快

在你的例子中,如果b是3,a是2,我们把k设为1,我们可以算出n的最小值,这样nb≤ 克安。在这种情况下,它的9和10之间,因为
9³=729
1*2⁹ = 512
,这意味着在9安时还不大于nb 但是
10³=1000
1*2⁰ = 1024,这意味着n现在大于nb。
您可以看到这些函数的图形显示,对于n>10的任何值,n都将大于nb。在这一点上,我们只展示了nb是n的大O,因为大O只需要k>0的某个值(我们选择1)an≥ nb表示一些最小n(在这种情况下,它介于9和10之间)

为了证明nb是an的小o,我们必须证明,对于任何大于0的k,仍然可以找到最小值n,因此an>nb。例如,如果您选择k=.5,那么我们之前发现的最小值10不起作用,因为
10³=1000
,并且
0.5*2ª¥⁰ = 512
。但是我们可以继续把n的最小值滑得越来越远,k越小,n的最小值就越大。说nb是小o的意思是,无论你把k弄得多么小,我们总是能够找到一个足够大的n值,所以nb≤ k*an
f(n)=o(g(n))
表示
f(n)/g(n)->0
n>无限时

对于您的问题,它应该保持
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)
,因为
a>1,sqrt(a)>1
,所以
(sqrt(a)^n)->无限
。当
n->infinite
时,即
M/(sqrt(a)^n)->0
,最后,当n->infinite时,我们得到
(n^b)/(a^n)->0
。根据定义,这就是
n^b=o(a^n)

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


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

f
O(g)
意味着
f
的渐近增长速度最多与
g
一样快。更正式地说,将
f
g
视为变量
n
的函数,也就是说
f(n)
O(g(n))
意味着存在一个常数
K
,因此最终,
f(n)
。这里的“最终”一词意味着存在一些固定值
N
(这是
K
f
g
)的函数),因此如果
N>N
,那么
f(N)

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

  • 对于
    n=1
    ,我们有
    f(n)=3
    g(n)=1
    ,因此
    f(n)
    实际上失败了。没关系!记住,不等式最终只需要成立,如果不等式对于
    n
    的小有限列表失败,这并不重要
  • 我们使用了
    K=1
    ,但不需要这样做。例如,
    K=2
    也可以工作。重要的是,
    K
    的某些值最终给出了我们想要的不等式
  • 我们看到
    n+2
    O(n^2)
    。这可能会让人困惑,你可能会说,“等等,
    n+2
    实际上不是
    O(n)
    ?”答案是肯定的<代码>n+2是
    O(n)
    O(n^2)
    O(n^3)
    O(n/3)
    ,等等

Little-o表示法略有不同。Big-O表示法直观地表示,如果
f
O(g)
,那么
f
的渐进增长速度最多与
g
一样快。Little-o表示法表示,如果
f
o(g)
,那么
f
的增长速度将渐近严格慢于
g

形式上,
f
o(g)
如果对于
K
的任何(让我们说是肯定的)选择,最终不等式
f(