我需要帮助理解Big-O问题。我已经得到了这个概念并且已经做了一些练习问题,但这个让我感到难过。
使用大O的定义,表明f(n)=anlogn+bn
是O(nlogn). (a, b > 0)
我不知道如何找到C或N,因为如果常数A或B改变,那么C和N也必须改变?或者我是以错误的方式看待这个?
我有一个测试,我想事先了解这一点。
谢谢!
答案 0 :(得分:3)
当你收到像这样的声明时:
证明log n + bn = O(n log n)
您可以将其视为以下内容:
对于a和b的任何选择,证明log n + bn = O(n log n)
反过来意味着
对于a和b的任何选择,可以选择c和n 0 ,这样对于任何n≥n 0
换句话说,你首先选择a和b,然后显示log n + bn = O(n log n)。你不是试图证明有一个固定的c和n 0 在big-O符号的定义中起作用而不管a和b,但是应该表明无论有人如何选择a和b,你总能找到ac和n 0 - 这可能取决于a和b - 这样使用c的那些选项的log n + bn = O(n log n)和n 0 。
为了看看你在这个例子中是怎么做的,一个可能有用的观察是(假设我们的日志是基数为2),1≤logn只要n≥2。因此,只要我们限制如果n≥2,我们就得到了
log n +bn≤logn + bn log n =(a + b)n log n
鉴于此,你看到你如何选择c和n 0 ?我们限制n使得n≥2,所以选择n 0 = 2是有意义的。同样,因为我们刚刚证明了log n +bn≤(a + b)n log n,我们可以选择c = a + b。
您可以将此论点视为两个人之间的对话:
请注意,对话框从另一方选择a和b开始。这样,您可以定制您选择的c和n 0 以确保声明成立。如果你先尝试选择c和n 0 ,他们总能找到一个会破坏它的a和b。
希望这有帮助!
答案 1 :(得分:1)
由于A
和B
是常量,因此可以用C
和N
来表达A
和B
。例如,您可能会证明C=A+B
和N > 2A
足以证明f(n) = O(n lg n)
。
答案 2 :(得分:0)
也许我错过了一些东西,但这似乎不是Big-O的典型用法。您的函数是一个简单的数学函数,而不是算法。如果:
f(n)=anlog(n)+bn
然后复杂度是(anlog(n))和(bn)的复杂度,假设plus运算具有可忽略的复杂性。由于b是常数,(bn)是O(n),同样a是常数,(anlog(n))是O(nlog(n))。