Avec la référence de cette réponse , qu'est-ce que Theta (lien étroit)?
Omega est la limite inférieure, bien comprise, le temps minimum qu'un algorithme peut prendre. Et nous savons que Big-O est pour la borne supérieure, signifie le temps maximum qu'un algorithme peut prendre. Mais je n'ai aucune idée en ce qui concerne la Theta.
Big O est la limite supérieure, tandis que Omega est la limite inférieure. Theta requiert à la fois Big O et Omega, c'est pourquoi il est appelé borné (il doit s'agir à la fois des limites supérieure et inférieure).
Par exemple, un algorithme prenant Omega(n log n)
prend au moins n log n
temps, mais n'a pas de limite supérieure. Un algorithme prenant Theta(n log n)
est de loin préférable car il prend au moins n log n
(Omega n log n) et pas plus que n log n
(Big O n log n).
_ {Notation} _ (notation thêta) est appelé lien étroit car il est plus précis que notation O et notation Ω (notation oméga).
Si j'étais paresseux, je pourrais dire que la recherche binaire sur un tableau trié est O (n2), Sur3) et O (2n), et je serais techniquement correct dans tous les cas. En effet, la notation O spécifie uniquement un limite supérieure, et la recherche binaire est limitée du côté supérieur par toutes ces fonctions, mais pas très étroitement. Ces estimations paresseuses seraient inutiles.
La notation résout ce problème en combinant-notation O et notation Ω. Si je dis que la recherche binaire est (log n), cela vous donne des informations plus précises. Il vous indique que l'algorithme est lié aux les deux par la fonction donnée, de sorte qu'il ne sera jamais significativement plus rapide ou plus lent que celui indiqué.
Si vous avez quelque chose qui est O (f (n)) , cela signifie qu'il y a k , g (n) tel que f (n) ≤ kg (n) .
Si vous avez quelque chose qui est Ω (f (n)) , cela signifie qu'il y a k , g (n) tel que f (n) ≥ kg (n) .
Et si vous avez quelque chose avec O (f (n)) et Ω (f ( n)) , alors c'est Θ (f (n) .
Le article Wikipedia est décent, bien qu'un peu dense.
Limite supérieure asymptotique signifie qu'un algorithme donné s'exécute pendant le temps maximal imparti, en fonction du nombre d'entrées.
Prenons l'exemple d'un algorithme de tri. Si tous les éléments d'un tableau sont dans l'ordre décroissant, leur tri nécessite un temps d'exécution de O(n)
, indiquant la complexité de la limite supérieure. Si le tableau est déjà trié, la valeur sera O(1)
.
Généralement, O-notation
est utilisé pour la complexité de la limite supérieure.
Asymptotiquement lié (c1g (n) ≤ f(n) ≤ c2g (n)) indique la complexité liée moyenne pour une fonction, avec une valeur comprise entre les limites liées (limite supérieure et inférieure), où c1 et C2 sont des constantes.
Les phrases temps minimum et temps maximum sont un peu trompeuses ici. Lorsque nous parlons de grandes notations O, ce n’est pas le temps qui nous intéresse, c’est comment le temps augmente lorsque la taille de notre entrée augmente. Et c’est généralement le temps moyen ou le pire des cas dont nous parlons, et non pas le meilleur des cas, qui n’a généralement pas de sens pour résoudre nos problèmes.
En utilisant le tableau, recherchez la réponse acceptée à l'autre question à titre d'exemple. Le temps qu’il faut pour trouver un nombre particulier dans une liste de taille n est de n/2 * en moyenne. Si vous la traitez comme une fonction f(n) = n/2*some_constant
, elle n'augmente pas plus vite que g(n) = n
, au sens donné par Charlie. En outre, il n’augmente pas plus lentement que g(n)
non plus. Par conséquent, g(n)
est en fait à la fois une limite supérieure et une limite inférieure de f(n)
en notation Big-O. La complexité de la recherche linéaire est donc la complexité exactement n , ce qui signifie qu'il s'agit de Theta (n).
À cet égard, l’explication donnée dans la réponse acceptée à l’autre question n’est pas tout à fait correcte, selon laquelle O(n) est la limite supérieure, car l’algorithme peut être exécuté en temps constant pour certaines entrées (il s'agit du Dans le meilleur des cas, j’ai mentionné ci-dessus, ce qui n’est pas vraiment ce que nous voulons savoir sur la durée).
Si j'étais paresseux, je pourrais dire que la recherche binaire sur un tableau trié est O (n2), O (n3) et O (2n), et je serais techniquement correct dans chaque Cas.
Nous pouvons utiliser la notation o ("little-oh") pour désigner une borne supérieure qui n'est pas serrée asymptotiquement. Big-oh et little-oh sont similaires. Mais, big-oh est probablement utilisé pour définir une limite supérieure serrée de manière asymptotique.
Précisément la limite inférieure ou $\omega $ bfon f(n) désigne l'ensemble des fonctions asymptotiquement inférieures ou égales à f(n) ie U g (n) ≤ cf (n) $\pour tout $ `un≥ n 'Pour certains c, n' $\in $ $\Bbb {N} $
Et la borne supérieure ou $\mathit {O} $ sur f(n) désigne l'ensemble des fonctions asymptotiquement supérieures ou égales à f(n) qui indique mathématiquement,
$ g (n)\ge cf (n)\pour tout n\ge n '$, pour certains c, n' $\in $ $\Bbb {N} $.
Maintenant, le $\Theta $ est l’intersection de l’écrit plus haut deux
$\theta $
Comme si un algorithme ressemblait à "exactement $\Omega\left (f (n)\right $)", il est préférable de dire que c'est $\Theta\left (f (n)\right) $.
Ou, nous pouvons aussi dire que cela nous donne la vitesse réelle où $ \omega $
nous donne la limite la plus basse.