什么是订单符号f(n)= O(g(n))?

时间:2010-04-09 16:57:05

标签: algorithm time-complexity

问题1:在什么情况下O(f(n)) = O(k f(n))是最合适的时间复杂度分析形式?

问题2:根据O符号的数学定义,如何显示O(f(n)) = O(k f(n)),表示正常数k

对于第一个问题,我认为这是时间复杂性的平均情况和最坏情况形式。我对吗?还有什么我应该写的呢?

对于第二个问题,我认为我们需要以数学方式定义函数。答案是这样的,因为乘以常数只是对应于k定义中任意常数O的值的重新调整?

2 个答案:

答案 0 :(得分:3)

  

我的观点:对于我认为的第一个   是平均情况和最坏情况的形式   时间复杂度。我对吗?什么   我还写那个吗?

没有!大O符号与平均情况或最坏情况无关。它只是关于函数增长的顺序 - 特别是函数相对于另一函数的增长速度。函数f在平均情况下可以是O(n),在最坏的情况下可以是O(n^2) - 这只是意味着函数的行为会根据其输入而有所不同,因此必须考虑这两种情况分开。

关于问题2,从问题的措辞中我很明显,你需要从Big O的数学定义开始。为了完整起见,它是:

  

形式定义:f(n)= O(g(n))   意味着有正常数c   和k,使得0≤f(n)≤cg(n)   所有n≥k。 c和k的值必须   固定的功能f和必须   不依赖于。

(来源http://www.itl.nist.gov/div897/sqg/dads/HTML/bigOnotation.html

因此,您需要使用此定义并编写显示f(n) = O(k(n))的数学证明。首先在上面的定义中用O(g(n))替换O(k*f(n));其余的应该很容易。

答案 1 :(得分:2)

问题1有点模糊,但你对问题2的回答肯定是缺乏的。问题是“根据O符号的数学定义”。这意味着您的教师希望您使用数学定义:

  

f(x)= O(g(x))当且仅当限制[x - > a +] | f(x)/ g(x)| <无限,对某些人而言

他希望你插入g(x)= k f(x)并证明不等式成立。

你发布的一般论点可能会让你获得部分功劳,但这是推理而不是数学,问题是要求数学。