Die Aussage ist immer wahr, aber es kann ein bisschen irreführend sein. Das liegt daran, dass die große O-Notation nicht darauf anspricht, wie eng die obere Grenze ist, die sie beschreibt. Sie können dumme Sachen wie für f(n) = 1
, f(n) = O(n^2)
sagen, wenn Sie wollen. Es ist nicht sehr hilfreich, das zu tun, da eine konstante Funktion nicht quadratisch wächst, aber bei einer großen O-Notation ist es immer noch wahr, da eine Polynomfunktion tatsächlich eine obere Grenze für eine konstante Funktion liefert. Die genauen oberen Grenzen von f(n) * g(n)
sind O(f(n)) * O(g(n))
. Wenn Sie h(n)
Pick gleich zu dem am schnellsten wachsenden von O(f(n))
, O(g(n))
und O(f(n)) * O(g(n))
, dass die Aussagen f(n) = O(h(n))
, g(n) = O(h(n))
und f(n) * g(n) = O(h(n))
alle wahr sein werden, so ziemlich per Definition. Aber Sie werden oft sehen, dass es kleinere Funktionen als h
gibt, die auch eine oder mehrere der Funktionen begrenzen.
Wenn Sie die lockeren Grenzen, die die Groß-O-Notation erlaubt, vermeiden möchten, sollten Sie stattdessen big-Theta (Θ) verwenden. Wenn f(n) = Θ(h(n))
, dann für einige c1
und c2
, c1 * h(n) <= f(n) <= c2 * h(n)
für alle ausreichend große Werte von n
. Das heißt, h(n)
ist sowohl eine obere als auch eine untere asymptotische Grenze für f(n)
. Die Aussage in der Frage gilt nicht für Big-Theta-Grenzen (obwohl sie für einige triviale Fälle funktioniert, wie f
und g
sind konstante Funktionen).
@DavidBrossard so weit ich weiß, sind große O-Fragen perfekt zum Thema für SO, und in der Tat wäre für das aktuelle Ruderhaus von Programmierern off-topic ...? – sclv