请帮助我理解图中提到的符号?,我试着理解“Bachmann-Landau符号系列”中的“Big O符号” 表中有“Formal Definition”列,其中有很多用等式表示的符号,我之前没有遇到过这些符号。谁能熟悉这个? https://en.wikipedia.org/wiki/Big_O_notation#Family_of_Bachmann–Landau_notations
答案 0 :(得分:1)
这些定义背后的逻辑实际上非常简单,它基本上说无论结果乘以哪些常数,从n
足够大的某个点开始,函数之一将开始变大/更小,它仍然是这样。
为了看到真正的差异,我将解释small-o
(它表示某些函数的复杂性比其他函数小),它表示对于大于零的所有k
,您可以找到{n
的某些值。 {1}}调用了n_0
,其n
大于n_0
的格式遵循此模式:f(n) <= k*g(n)
。
所以你有两个函数,你把n
作为参数。然后,不管你放置k
的是什么,你总能找到n
的{{1}}的值,并且所有大于你找到的值的值也会适合这个等式。 / p>
考虑例如:
f(n) <= k*g(n)
因此,如果您尝试将f(n) = n * 100
g(n) = n^2
置于其中,则不会说明复杂程度更高,因为n=5
和5*100=500
。如果您将数字设置得足够大,即5^2=25
,那么n=100
和f(n)=100*100=10000
。所以我们得到了相同的价值。如果你试图放大于那个,那么g(n)就会变得越来越大。
它还必须遵循等式g(n)=100^2=100*100=10000
。例如,如果我放了f(n) <= k*g(n)
那么
k=0.1
因此,使用这些函数,您可以看到100*n <= 0.1*n^2 *10
1000n <= n^2 /n
1000 < n
k=0.1
有n_0 = 1000
来完成方程,但这已经足够了。所有n > 1000
都会更大,函数g(n)
将会更大,因此它具有更高的复杂性。 (好吧,真正的证据并不那么容易,但你可以看到模式)。关键是,无论k
是什么,即使它相等k=0.000000001
,总是有n_0
的断点,从那时起,所有g(n)
都将是大于f(n)
我们还可以尝试一些负方程来查看O(n)
和O(n^2)
之间的差异。
让我们:
f(n) = n
g(n) = 10*n
所以在标准代数中g(n) > f(n)
,对吗?但是在复杂性理论中,我们需要知道它是否会变得更大,如果是这样,它是否会变得更大而不仅仅是将它与常数相乘。
因此,如果我们考虑k=0.01
,那么您可以看到,无论n
有多大,您都找不到符合n_0
的{{1}},所以f(n) <= k*g(n)
就复杂性理论而言,您可以将符号视为更小/更大,所以
f(n) != o(g(n))