我在理解如何解决大O符号方程时遇到了问题,例如:
super.paintComponent(g);
// Clearing
((Graphics2D) g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
g.setColor(Swinger.TRANSPARENT);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
从这里采取:http://web.eecs.utk.edu/~booth/311-01/notes/bigOex.html
它说f(n) = 10n + 5 and g(n) = n
Show that f(n) is O(g(n))
我明白了:从k开始,f(n)的增长速度不会比g(n)乘以任意常数快。
我不能得到的是:
To show f(n) is O(g(n)) we must show constants c and k such that f(n) <= cg(n) for all n >=k
所以为了解决这些方程式,我可以始终选择c和k,只要它们符合这些要求?但是,如果我可以选择k,那么他们为什么要在该网站上计算k?
We are allowed to choose c and k to be integers we want as long as they
are positive. They can be as big as we want, but they can't be functions
of n.
答案 0 :(得分:1)
基本上,他们希望表明,超过给定的n值,c * g(n)总是> = f(n)。因此,如果将k设置为该值,则不等式成立。没有必要显示精确超出它所拥有的点(即给定一些任意c的k的最小有效值) - 它恰好在解决不等式时变得明显。
只要你能证明存在某些 c,k为哪个,你就可以说f(n)是O(g(n))。