Quelle est la différence entre Θ(n) et O(n)?
Parfois je vois Θ(n) avec l'étrange Θ symbole avec quelque chose dans le milieu d'elle, et parfois seulement O(n). C'est juste de la paresse de taper parce que personne ne sait comment ce type de symbole, ou signifie-t-il quelque chose de différent?
- Il n'est pas évident, mais cette question est un doublon de celui-ci stackoverflow.com/questions/464078/... depuis hier.
- Double Possible de la Différence entre la limite inférieure et serré lié?
Vous devez vous connecter pour publier un commentaire.
Courte explication:
Normalement, même quand les gens parlent de O(g(n)) qu'ils veulent réellement dire Θ(g(n)), mais, techniquement, il y a une différence.
Plus techniquement:
O(n) représente la limite supérieure. Θ(n) signifie serré lié.
Ω(n) représente la limite inférieure.
Fondamentalement, lorsque nous disons qu'un algorithme est de O(n), c'est aussi O(n2), O(n1000000), O(2n), ... mais Θ(n) de l'algorithme est pas Θ(n2).
En fait, puisque f(n) = Θ(g(n)) des moyens pour suffisamment grandes valeurs de n, f(n) peut être liée à l'intérieur de c1g(n) et c2g(n) pour certaines valeurs de c1 et c2, c'est à dire le taux de croissance de f est asymptotiquement égal à g: g peut être une limite inférieure et et une limite supérieure de f. Ceci implique directement f peut être une limite inférieure et une limite supérieure de g ainsi. Par conséquent,
De même, pour montrer f(n) = Θ(g(n)), il suffit de montrer g est une borne supérieure de f (i.e. f(n) = O(g(n))) et f est une limite inférieure de g (c'est à dire f(n) = Ω(g(n)) qui est exactement la même chose que g(n) = O(f(n))). De manière concise,
Il y a aussi un peu-oh et petit-omega (
ω
) notations représentant lâche supérieure et lâche les limites inférieures d'une fonction.Pour résumer:
Pour une discussion plus détaillée, vous pouvez lire la définition sur Wikipédia ou de consulter un classique des manuels comme Introduction aux Algorithmes par Cormen et coll.
>= \Omega(...)
veux dire? Je comprends, si nous disons que c'est un membre de\Omega(...)
, mais si il est plus grand que cela? Quel sens faut-il faire?Il existe un moyen simple (un truc, je suppose) pour se souvenir de qui la notation signifie que ce qui.
Tous les Big-O notations peuvent être considérés comme ayant un bar.
Lorsque l'on regarde un Ω, la barre est en bas, donc c'est un (asymptotique) de la limite inférieure.
Lorsque l'on regarde un Θ, le bar est à l'évidence dans le milieu. C'est donc un (asymptotique) serré lié.
Lors de l'écriture manuscrite O, habituellement, vous pouvez finir à la première place, et dessiner un cercle. Donc O(n) est la limite supérieure de la fonction. Pour être juste, celui-ci ne fonctionne pas avec la plupart des polices de caractères, mais c'est la justification initiale des noms.
c'est le Grand "O"
c'est le Grand Thêta
http://en.wikipedia.org/wiki/Big_O_notation
Big O signifie que votre algorithme s'exécute dans pas plus d'étapes que dans l'expression donnée(n^2)
Gros Omega signifie que votre algorithme s'exécute dans pas moins d'étapes que dans l'expression donnée(n^2)
Lorsque les deux conditions sont vraies pour la même expression, vous pouvez utiliser le grand thêta notation....
Plutôt que de proposer une définition théorique, qui sont magnifiquement résumée ici déjà, je vais donner un exemple simple:
Assumer, le temps d'exécution de
f(i)
estO(1)
. Ci-dessous est un fragment de code dont asymptotique d'exécution estΘ(n)
. Il toujours appelle la fonctionf(...)
n
fois. À la fois inférieure et la limite supérieure est n.Le deuxième fragment de code ci-dessous a l'asymptotique d'exécution de
O(n)
. Il appelle la fonctionf(...)
au plusn
fois. La limite supérieure est n, mais la limite inférieure peut êtreΩ(1)
ouΩ(log(n))
, selon ce qui se passe à l'intérieur def2(i)
.Θ(n)
va croître linéairement à mesure que n augmente, par exemple runtime T peut être exprimé comme T(n) = a*n+b. Pour de petites valeurs de n (par exemple n=1 ou 2) cela peut ne pas être la meilleure façon de décrire le comportement peut-être vous avez quelques code d'initialisation qui prend beaucoup plus de temps que f(i).Theta est un raccourci façon de se référer à une situtation où
le big O et l'Oméga sont les mêmes.
Ainsi, si l'une des revendications
The Theta is expression q
, alors ils sont aussi, nécessairement, affirmant queBig O is expression q
etOmega is expression q
.Grossière analogie:
Si:
Theta revendications", Que l'animal a 5 pattes."
il s'ensuit que:
Big O est vrai ("cet animal est inférieure ou égale à 5 pattes.")
et
Omega est vrai("cet animal est supérieur ou égal à 5 pattes.")
C'est seulement une rude analogie, parce que les expressions ne sont pas nécessairement des numéros spécifiques, mais plutôt des fonctions de divers ordres de grandeur telle que log(n), n, n^2, (etc.).
Un graphique pourrait apporter les réponses précédentes plus facile à comprendre:
Θ-Notation - Même commande | O-Notation - limite Supérieure
En Anglais,
Sur la gauche, notez qu'il existe une limite supérieure et une limite inférieure qui sont du même ordre de grandeur (c'est à dire g(n) ). Ignorer les constantes, et si la limite supérieure et la limite inférieure ont le même ordre de grandeur, on peut valablement dire f(n) = Θ(g(n)) ou f(n) est en grande thêta de g(n).
En commençant par la droite, le plus simple exemple, c'est à dire que la limite supérieure g(n) est tout simplement l'ordre de grandeur et ignore la constante c (tout comme l'ensemble de big O notation n').
f(n)
appartient àO(n)
si il existe positifk
commef(n)<=k*n
f(n)
appartient àΘ(n)
si il existe positifk1
,k2
commek1*n<=f(n)<=k2*n
Article de wikipédia sur la Notation Grand O
T(n)= n^2 + n, nous pouvons dire que T(n)=O(n^2), T(n)=O(n^3), T(n)=O(n^4). Mais pour les petits o, T(n)=o(n^2) ne répondent pas à la définition de petit joint. Donc, juste T(n)=o(n^3), T(n)=o(n^4) sont corrects pour les petits. La redondant T(n)=O(n^2) c'est quoi? Il est grand θ!
À l'aide de limites
Considérons
f(n) > 0
etg(n) > 0
pour tousn
. C'est ok pour prendre ceci en considération, parce que la manière la plus rapide réelle de l'algorithme a au moins une opération et termine son exécution après le départ. Ceci permettra de simplifier le calcul, parce que nous pouvons utiliser la valeur (f(n)
) au lieu de la valeur absolue (|f(n)|
).f(n) = O(g(n))
Général:
Pour
g(n) = n
:Exemples:
Contre-exemples:
f(n) = Θ(g(n))
Général:
Pour
g(n) = n
:Exemples:
Contre-exemples: