巴赫曼 - 兰道符号系列

时间:2018-05-23 10:56:49

标签: algorithm math computer-science

请帮助我理解图中提到的符号?,我试着理解“Bachmann-Landau符号系列”中的“Big O符号” 表中有“Formal Definition”列,其中有很多用等式表示的符号,我之前没有遇到过这些符号。谁能熟悉这个? https://en.wikipedia.org/wiki/Big_O_notation#Family_of_Bachmann–Landau_notations

1 个答案:

答案 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=55*100=500。如果您将数字设置得足够大,即5^2=25,那么n=100f(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.1n_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))