像f(n)=3n^2+2
这样的函数是O(n ^ 2),因为n ^ 2是函数中最大的指数。但是,函数1f(n)= n ^ 31 不 O(n^2)
,因为最大指数是3,而不是2。
所以为了在Big Omega或Big Theta上做出这样的猜测,我们应该在函数中寻找什么?我们可以做一些类似于我们上面的Big O表示法的事情吗?
例如,假设问题要求我们找到函数f(n)= 3n^2 +1
的Big Omega或Big Theta。是f(n)= O(n)
,Big Omega(n)
还是Big Theta(n)
?如果我要对这个函数是否为Big O(n)进行有根据的猜测,我会说不(因为该函数的最大指数是2,而不是1)。我会更正式地使用归纳来证明这一点。
那么,我们可以做一些类似于我们在第一个例子中使用Big O表示法所做的事情吗?我应该在函数中寻找什么来猜测Big Omega和Theta将是什么,并确定“有根据的猜测”是否正确?
答案 0 :(得分:1)
您的示例使用多项式,因此我将假设。
如果k大于或等于多项式的阶数,则多项式为O(n ^ k)。
如果k小于或等于多项式的阶数,则多项式为Omega(n ^ k)。
你的多项式是Theta(n ^ k),如果它是O(n ^ k)和Omega(n ^ k)。
答案 1 :(得分:0)
那么,我们可以做一些与Big O表示法类似的事情吗? 在第一个示例中?
如果您要查找的是多项式是Big Omega,Big O或Big Theta的东西,则可以使用多项式定理(Patrick87所说的差不多)。
基本上,多项式定理可以让您仅查看最高阶项,并将其用作Big O,Big Omega和Big Theta的所需界线。
我应该在函数中寻找什么以猜测Big Omega和 Theta将是,并确定“受过教育的猜测”是否正确?
理想情况下,您的函数将是多项式,因为这会使问题变得更加简单。但是,它也可以是对数函数或指数函数。
要确定“受过教育的猜测”是否正确,您必须首先了解您要寻找的运行时类型。问自己:我是否在寻找这种算法的最坏情况运行时间?还是我正在寻找该算法的最佳案例运行时间?还是我正在寻找算法的一般运行时间?
如果您正在查看算法的最坏情况运行时间,则可以使用多项式阶数定理(如果是多项式函数)或通过示例简单地证明Big Omega。但是,必须分析该算法才能证明Big O和Big Theta。
如果您正在寻找算法的最佳运行时间,则可以使用示例或通过多项式阶数定理(如果是多项式)证明BigO。但是,只有通过分析算法才能证明Big Omega和Big Theta。
基本上,您只能通过一个例子证明该算法的最佳运行时间和最坏运行时间的信息最少。
为证明算法的一般运行时间,必须确保给出的算法运行时间函数适用于所有输入-在这种情况下,仅举一个例子是不够的。当您没有所有输入的函数时,您必须分析算法以证明算法的所有输入中的三个(大O,大Omega,大Theta)中的任何一个。