我试图通过一本书来理解Big-O符号,并且它通过使用函数来覆盖Big-O,尽管我有点困惑。书中说O(g(n))其中g(n)是f(n)的上界。所以我理解这意味着g(n)给出了较大n值时f(n)的最大增长率。 p>
并且存在n_0,其中cg(n)的增长率(其中c是某些常数)和f(n)具有相同的增长率。 p>
但令我感到困惑的是这些关于在数学函数中找到Big O的例子。
这本书说找到f(n)= n ^ 4 + 100n ^ 2 + 50的上界 然后他们说n ^ 4 + 100n ^ 2 + 50< = 2n ^ 4(不确定为什么2n ^ 4) 然后他们一些人如何找到n_0 = 11和c = 2,我明白为什么大O是O(n ^ 4)但我只是对其余的感到困惑。
这是令人沮丧的,因为我不明白,但我觉得这是一个我必须理解的重要话题。
如果有人好奇的话,那本书是Narasimha Karumanchi的数据结构和算法轻松
不确定此帖子是属于此处还是属于数学板。
答案 0 :(得分:8)
首先,让我们松散地说明f
中O(g(n))
的定义(注意:O(g(n))
是一组函数,所以要挑剔,我们说f
位于O(...)
,而f(n)
位于O(...)
)。
如果函数f(n)在 O(g(n))中是,则c·g(n)是上限 f(n),对于某些常数c ,使得f(n)总是≤c·g(n), 足够大n (即某些常数n0的n≥n0)。
因此,为了表明f(n)
在O(g(n))
中,我们需要找到一组满足
f(n) < c · g(n), for all n ≥ n0, (+)
但此设置并非唯一。即,找到常数(c,n0)使得(+)成立的问题是退化。实际上,如果存在任何这样的常数对,则将存在无限量的不同的这样的对。
f ∈ O(n^4)
现在,让我们继续看看让你困惑的例子
找到函数的上渐近界限
f(n) = n^4 + 100n^2 + 50 (*)
一种直截了当的方法是用高阶项表达(*)
中的低阶项,特别是w.r.t.边界(... < ...
)。
因此,我们看到是否可以在n
上找到下限,以便以下成立
100n^2 + 50 ≤ n^4, for all n ≥ ???, (i)
我们可以通过求解方程
轻松找到(i)中的等式m = n^2, m > 0
m^2 - 100m - 50 = 0
(m - 50)^2 - 50^2 - 50 = 0
(m - 50)^2 = 2550
m = 50 ± sqrt(2550) = { m > 0, single root } ≈ 100.5
=> n ≈ { n > 0 } ≈ 10.025
因此,(i)
适用于n ≳ 10.025
,我们宁愿在n
上以整齐的整数值显示此约束,因此四舍五入到11
:< / p>
100n^2 + 50 ≤ n^4, for all n ≥ 11, (ii)
从(ii)
来看,显然存在以下内容
f(n) = n^4 + 100n^2 + 50 ≤ n^4 + n^4 = 2 · n^4, for all n ≥ 11, (iii)
此关系与(+)
,c = 2
和n0 = 11
完全相同g(n) = n^4
,因此我们展示了f ∈ O(n^4)
。但请注意,常量c
和n0
的选择是便利之一,这不是唯一的。由于我们已经证明(+)
适用于常量(c,n0
),我们可以证明它适用于无数种不同的常量选择(例如,它自然适用于{{1 }和c=10
,...等等。)