# Comparaison asymptotique

En mathématiques, plus précisément en analyse, la comparaison asymptotique est une méthode consistant à étudier la vitesse de croissance d'une fonction.
Par exemple, la fonction exponentielle croit plus vite qu'une fonction linéaire.
La comparaison asymptotique permet aussi d'étudier la vitesse d'une fonction quelconque par rapport à une fonction considérée comme plus « simple ». Celle-ci est souvent choisie sur une échelle de référence, contenant en général au moins certaines fonctions dites élémentaires, en particulier les sommes et produits de polynômes, d'exponentielles et de logarithmes. La comparaison s'effectue en l'infini ou alors au voisinage d'un point.
Le concept de comparaison asymptotique est utilisé en physique. Il l'est aussi en informatique, par exemple pour décrire la complexité de certains algorithmes. En effet, la comparaison asymptotique est intéressante en l'infini, car on s'intéresse au comportement d'un algorithme sur des données arbitrairement grandes. Cette méthode de comparaison est également employée en théorie analytique des nombres pour évaluer finement l'erreur commise en remplaçant une fonction irrégulière, comme celle comptant les nombres premiers, par une fonction de l'échelle choisie.
La méthode a été introduite par les travaux de Paul du Bois-Reymond à partir de 1872 ; pour faciliter les calculs et la présentation des résultats, diverses notations ont été développées, en particulier par Bachmann (1894), Landau (1909), Hardy (1910), Hardy et Littlewood (1914 et 1916), et Vinogradov (c. 1930).

## Exemples de comparaison
### La relation de prépondérance
#### Exemple

Soit f et g les fonctions réelles définies par les formules$f(x)=\cos(x)+2{\text{ et }}g(x)=x.$
Par une étude des deux fonctions, on sait que g prend des valeurs aussi grandes que l'on veut au voisinage de l'infini, tandis que f ne peut prendre des valeurs qu'entre 1 et 3. Le quotient g divisé par f au voisinage de l'infini ne cesse d'augmenter et n'est pas borné. Dans ce contexte, on peut dire que f est négligeable devant g, ou que g est prépondérante devant f, au voisinage de l'infini, on écrit (notation de Landau) :
$f(x)=o(g(x))\ (x\rightarrow \infty )$
ou (notation de Hardy$^,$, désuète)
$f(x)\prec g(x)\ (x\rightarrow \infty ).$
La notation de Hardy permet d'enchaîner les relations de prépondérance, par exemple :
$\cos(x)\prec \ln(x)\prec x\prec x^{2}\prec \exp(x)\prec x^{x}\ (x\rightarrow \infty ).$

#### Définition formelle lorsque la fonction g ne s'annule pas

Pour définir formellement cette propriété on considère le comportement du quotient ${\frac {f}{g}}$.
Soit $a\in \mathbb {R} \cup \left\{+\infty ;-\infty \right\}.$
Soient f et g deux fonctions de la variable réelle x. On suppose que g ne s'annule pas sur un voisinage de a. On dit que f est négligeable devant g, ou que g est prépondérante devant f en a, et on note $f(x)={\underset {\overset {x\rightarrow a}}{o}}(g(x))$, lorsque
${\frac {f(x)}{g(x)}}{\underset {\overset {x\rightarrow a}}{\longrightarrow }}0.$
Si le contexte est clair, on ne précise pas le domaine d'étude et on note : $f(x)=o(g(x))$, voire $f=o(g)$. Cependant, la notation est toujours associée à un lieu a et au voisinage de ce lieu : être négligeable est un concept local.
Dans cette notation de Landau $f(x)=o(g(x))$ (parfois aussi $f(x)\in o(g(x))$), le symbole $o$ se lit petit o. La notation équivalente de Hardy est $f(x)\prec g(x)$. On utilise aujourd'hui exclusivement la notation de Landau.

#### Propriétés

Par ce qui peut sembler un abus de langage, on effectue des opérations sur les « petits o ». En effet, on peut écrire :
* $o(f)+o(f)=o(f)$ ;
* $o(f)-o(f)=o(f)$.
Dans les côtés gauche de chaque formule les deux symboles $o(f)$ représentent des fonctions a priori différentes. La première formule se lit : "la somme de deux fonctions qui sont toutes deux des petits $o(f)$ est une fonction qui est également un $o(f)$".

#### Exemples

* $x^{2}+10000={\underset {\overset {x\rightarrow \infty }}{o}}(x^{3})$
* $x^{n}={\underset {\overset {x\rightarrow +\infty }}{o}}(e^{x})$
* Pour toute fonction $\varepsilon$, telle que $\varepsilon (x){\underset {\overset {x\rightarrow a}}{\longrightarrow }}0$, on a : $\varepsilon (x)={\underset {\overset {x\rightarrow a}}{o}}(1)$

### Équivalence
#### Définition formelle

Soit $a\in \mathbb {R} \cup \left\{+\infty ;-\infty \right\}$.
Soient f et g deux fonctions de la variable réelle x. On suppose que g ne s'annule pas sur un voisinage de a. On dit que f est équivalente à g en a, ou que g équivaut à f en a, et on note
    $f(x){\underset {\overset {x\rightarrow a}}{\sim }}g(x)$, lorsque $f(x)-g(x)={\underset {\overset {x\rightarrow a}}{o}}(g(x))$.

#### Exemple

$\cos x+x^{20}+\exp(x){\underset {\overset {x\rightarrow \infty }}{\sim }}\exp(x)$

### Domination

La notation grand O de Landau dénote le caractère dominé d'une fonction par rapport à une autre. Généralement, comme Paul Bachmann qui a introduit ce symbole en 1894, on utilise la lettre O majuscule (de l'allemand Ordnung, « ordre »). C'est beaucoup plus tard (1976), par analogie avec le symbole oméga majuscule Ω (voir plus bas), que Donald Knuth a discrètement suggéré de rebaptiser le symbole O du nom de la lettre omicron majuscule (qui n'apparaît que dans le titre de son article), celle-ci étant rarement dessinée de manière clairement différente du O. Dans les deux cas, le symbole utilisé est distinct du symbole 0 (zéro).

#### Définition formelle

Soient f et g deux fonctions de la variable réelle x. On dit que f est dominée par g en +∞, ou que g domine f en +∞, et on note (notation de Bachmann, 1894, ou de Landau, 1909)
    $f(x)=O(g(x))\ (x\rightarrow \infty ),$
ou (notation de Hardy, 1910, désuète)
    $\ f\preccurlyeq g,$
ou encore (notation de Vinogradov, années 1930)
    $f(x)\ll g(x)\ (x\rightarrow \infty ),$
lorsqu'il existe des constantes N et C telles que
    $\forall x>N\qquad \left|f(x)\right|\leq C\left|g(x)\right|.$
Intuitivement, cela signifie que f ne croît pas plus vite que g.
De même, si a est un nombre réel, nous écrivons
    $f(x)={\underset {x\to a}{O}}(g(x))$
s’il existe des constantes d > 0 et C telles que
    $\forall x\qquad \left|x-a\right|<d\Rightarrow \left|f(x)\right|\leq C\left|g(x)\right|.$
Ceci est équivalent, lorsque g ne s'annule pas, à $\limsup _{x\to a}\left|{\frac {f(x)}{g(x)}}\right|<\infty .$

#### Exemples

* $4x^{3}+10000x^{2}={\underset {x\to \infty }{O}}(x^{3}).$
* $x^{3}={\underset {x\to \infty }{O}}(4x^{3}+10000x^{2}).$
* En un point a, si f est négligeable devant g ou équivalente à g, alors elle est dominée par g.
* Une fonction f est bornée sur un voisinage de a si et seulement si $f(x)={\underset {x\to a}{O}}(1)$.

## Absence de prépondérance et oscillations
### Notation Ω de Hardy et Littlewood (théorie des nombres)

En 1914, Hardy et Littlewood ont introduit le nouveau symbole Ω défini ainsi :
    $f(x)=\Omega (g(x))\ (x\rightarrow \infty )\;\Leftrightarrow \;\limsup _{x\to \infty }\left|{\frac {f(x)}{g(x)}}\right|>0$.
Les fonctions f et g sont supposées définies, et g positive, dans un voisinage de l'infini. Ainsi $f(x)=\Omega (g(x))$ est la négation de $f(x)=o(g(x))$.
En 1916, les mêmes auteurs introduisent les deux nouveaux symboles Ω$_R$ et Ω$_L$, définis de la façon suivante :
    $f(x)=\Omega _{R}(g(x))\ (x\rightarrow \infty )\;\Leftrightarrow \;\limsup _{x\to \infty }{\frac {f(x)}{g(x)}}>0$;
    $f(x)=\Omega _{L}(g(x))\ (x\rightarrow \infty )\;\Leftrightarrow \;\liminf _{x\to \infty }{\frac {f(x)}{g(x)}}<0$.
Comme avant, les fonctions f et g sont supposées définies, et g positive, dans un voisinage de l'infini. Ainsi, $f(x)=\Omega _{R}(g(x))$ est la négation de $f(x)<o(g(x))$, et $f(x)=\Omega _{L}(g(x))$ la négation de $f(x)>o(g(x))$.
Contrairement à ce qu'affirmera plus tard D.E. Knuth, Edmund Landau a également utilisé ces trois symboles en 1924.
Ces notations de Hardy et Littlewood sont des prototypes, qui après Landau semblent n'avoir jamais été utilisés tels quels : Ω$_R$ est devenu Ω+, et Ω$_L$ est devenu Ω$_–$.
Ces trois symboles, à savoir $\Omega$, $\Omega _{+}$ et $\Omega _{-}$, sont maintenant couramment utilisés en théorie analytique des nombres, de même que $f(x)=\Omega _{\pm }(g(x))$ pour signifier que les conditions $f(x)=\Omega _{+}(g(x))$ et $f(x)=\Omega _{-}(g(x))$ sont toutes deux satisfaites.
Il est clair que dans chacune de ces définitions on peut remplacer ∞ par –∞ ou par un nombre réel.

### Exemples

On a
    $\sin x=\Omega (1)\ (x\rightarrow \infty )$
et plus précisément,
    $\sin x=\Omega _{\pm }(1)\ (x\rightarrow \infty ).$
On a
    $\sin x+1=\Omega (1)\ (x\rightarrow \infty )$
et plus précisément,
    $\sin x+1=\Omega _{+}(1)\ (x\rightarrow \infty )~;$
cependant,
    $\sin x+1\not =\Omega _{-}(1)\ (x\rightarrow \infty ).$

### Deux définitions incompatibles

Il est important de souligner le fait que l'écriture
    $f(x)=\Omega (g(x))\ (x\rightarrow \infty )$
possède en mathématiques deux définitions incompatibles, toutes les deux très répandues, l'une en théorie analytique des nombres, qu'on vient de présenter, l'autre en théorie de la complexité des algorithmes. Lorsque ces deux disciplines se rencontrent, cette situation est susceptible de créer une grande confusion.

### La définition de Knuth

En 1976, Knuth publie un article dont le but principal est de justifier son utilisation du même symbole Ω pour décrire une autre propriété que celle décrite par Hardy et Littlewood. Il tente de convaincre le lecteur que la définition de Hardy et Littlewood n'est quasiment jamais utilisée (ce qui, même en 1976, est faux depuis en tout cas 25 ans). Il va jusqu'à prétendre que Landau ne l'a jamais utilisée (ce qui est également faux). Il ressent impérativement le besoin d'une autre notion (« For all the applications I have seen so far in computer science, a stronger requirement […] is much more appropriate »), et a décidé que l'utilisation du symbole Ω doit être réservé pour la décrire. Il est fortement contrarié par l'ancienne définition (« Unfortunately, Hardy and Littlewood didn't define Ω(f(n)) as I wanted to »).
Il prend donc le risque de créer la confusion, et définit
    $f(x)=\Omega (g(x))\Leftrightarrow g(x)=O(f(x))$.

## Utilisation des comparaisons
### Développements limités

En mathématiques, il est souvent important de garder un œil sur le terme d'erreur d'une approximation. Cette notation est particulièrement utilisée dès que l'on a affaire à des développements limités et à des calculs d'équivalents. Par exemple, le développement de la fonction exponentielle à l'ordre 2 peut aussi s'écrire :
    $e^{x}=1+x+{\frac {1}{2}}x^{2}+o(x^{2})\ {\rm {quand}}\ x\rightarrow 0$
pour exprimer le fait que l'erreur, la différence $e^{x}-\left(1+x+{\frac {x^{2}}{2}}\right)$, est négligeable devant $x^{2}$ quand $x$ tend vers 0.
Il faut préciser que le nombre d'opérandes dans ce genre d'écriture doit être borné par une constante qui ne dépend pas de la variable : par exemple l'assertion $o(x)+o(x)+\dots +o(x)=o(x)$ est évidemment fausse si les points de suspension cachent un nombre de termes qui n'est pas borné lorsque x varie.

### Échelle de comparaison

Voici une liste de catégories de fonctions couramment utilisées en analyse. La variable (notée ici n) tend vers +∞ et c est une constante réelle arbitraire. Lorsque c est une constante supérieure à 1, les fonctions apparaissent dans cette liste par ordre croissant de grandeur.
| notation | grandeur au plus |
| O(1) | module majoré par une constante |
| O(log(n)) | logarithmique |
| O((log(n))$^c$) | (polylogarithmique si c est entier positif) |
| O(n) | linéaire |
| O(n log(n)) | parfois appelée « linéarithmique » |
| O(n log$^c$(n)) | parfois appelé « quasi linéaire » |
| O(n$^2$) | quadratique |
| O(n$^c$) | (polynomiale si c est entier positif) |
| O(c$^n$) | (exponentielle si c est positif, parfois « géométrique ») |
| O(n!) | factorielle |
O(n$^c$) et O(c$^n$) sont très différents. Le dernier autorise une croissance bien plus rapide, et ce pour n'importe quelle constante c > 1. Une fonction qui croît plus rapidement que n'importe quel polynôme est dite superpolynomiale. Une fonction qui croît plus lentement que toute exponentielle est dite sous-exponentielle. Il existe des fonctions à la fois superpolynomiales et sous-exponentielles, comme la fonction n$^{log(n)}$.
Remarquons aussi que O(log n) est exactement identique à O(log(n$^c$)), puisque ces deux logarithmes sont multiples l'un de l'autre par un facteur constant et que la notation grand O « ignore » les constantes multiplicatives. De manière analogue, les logarithmes dans des bases constantes différentes sont équivalents.
La liste précédente est utile à cause de la propriété suivante : si une fonction f est une somme de fonctions, et si une des fonctions de la somme croît plus vite que les autres, alors elle détermine l'ordre de croissance de f(n).
Exemple :
       si f(n) = 10 log(n) + 5 (log(n))$^3$ + 7 n + 3 n$^2$ + 6 n$^3$, alors f(n) = O(n$^3$).

### Fonction à plusieurs variables

Cette notation peut aussi être utilisée avec des fonctions de plusieurs variables :
| L'écriture : | $f(n,m)=n^{2}+m^{3}+O(n+m)\;$ quand $m,n\to +\infty$ |
| correspond à la proposition : | $\exists C\quad \exists N\quad \forall n,m>N\qquad |f(n,m)-n^{2}-m^{3}|\leq C(n+m)$ |
Pour certains, cette notation abuse du symbole d'égalité, puisqu'elle semble violer l'axiome d'égalité : « des choses égales à la même chose sont égales entre elles » (autrement dit, avec cette notation, l'égalité n'est plus une relation d'équivalence). Mais on peut également considérer que dans l'écriture
$f(n,m)-n^{2}-m^{3}=O(n+m),$
la notation "=O" désigne un seul opérateur, dans l'écriture duquel le signe "=" n'a pas d'existence propre indépendante (et en particulier ne désigne pas une relation d'équivalence). Il n'y a dans ce cas plus d'abus de notation, mais évidemment toujours un risque de confusion. Il est également possible de définir O(g(x)) comme un ensemble de fonctions, dont les éléments sont toutes les fonctions qui ne grandissent pas plus vite que g, et d'utiliser les notations ensemblistes pour indiquer si une fonction donnée est un élément de l'ensemble ainsi défini. Par exemple :
$f(n,m)-n^{2}-m^{3}\in O(n+m),$
Les deux conventions sont couramment utilisées mais la première (et plus ancienne) est jusqu'au début du XXIe siècle la plus souvent rencontrée. Pour éviter ce problème on utilise (tout aussi couramment) la notation de Vinogradov (voir ci-dessous).
$f(n,m)-n^{2}-m^{3}\ll n+m,$
Un autre problème est qu'il faut clairement indiquer la variable par rapport à laquelle le comportement asymptotique est examiné. Une affirmation telle que $f(n,m)=O(m^{n})\;$ n'a pas le même sens selon qu'elle est suivie de « quand $m,n\to +\infty$ » ou, par exemple, de « (pour tout $m$ fixé) quand $n\to +\infty$ ».

## La famille de notations de Landau O, o, Ω, ω, Θ, ~

| Notation | Nom | Description informelle | Lorsque $n\to \infty$, à partir d'un certain rang... | Définition rigoureuse |
| $f(n)=O(g(n))$ ou $f(n)\in O(g(n))$ | Grand O (Grand Omicron) | La fonction |f | est bornée par la fonction |g| asymptotiquement, à un facteur près | $|f(n)|\leq |g(n)|\cdot k$ pour un k > 0 | $\exists k>0,\exists n_{0}\;\forall n>n_{0}\;|f(n)|\leq |g(n)|\cdot k$ |
| $f(n)=\Omega (g(n))$ ou $f(n)\in \Omega (g(n))$ | Grand Omega | Deux définitions : En théorie des nombres : f n'est pas négligeable devant g | En théorie des nombres : $|f(n_{i})|\geq |g(n_{i})|\cdot k$ pour un k > 0 et pour une suite de nombres $n_{i}\rightarrow \infty$ | En théorie des nombres : $\exists k>0,\forall n_{0}\;\exists n>n_{0}\;|g(n)|\cdot k\leq |f(n)|$ |
| $f(n)=\Omega (g(n))$ ou $f(n)\in \Omega (g(n))$ | Grand Omega | En théorie des algorithmes : f est minorée par g (à un facteur près) (ou f domine g) | En théorie des algorithmes : $|f(n)|\geq |g(n)|\cdot k$ pour un k > 0 | En théorie des algorithmes : $\exists k>0,\exists n_{0}\;\forall n>n_{0}\;|g(n)|\cdot k\leq |f(n)|$ |
| $f(n)\asymp g(n)$ ou $f(n)\in \Theta (g(n))$ | de l'ordre de ; Grand Theta | Les fonctions f et g sont du même ordre de grandeur asymptotiquement | $|g(n)|\cdot k_{1}\leq |f(n)|\leq |g(n)|\cdot k_{2}$ pour un k$_1$ > 0, et un k$_2$ > 0 | $\exists k_{1},k_{2}>0,\exists n_{0}\;\forall n>n_{0}$ $|g(n)|\cdot k_{1}<|f(n)|<|g(n)|\cdot k_{2}$ |
| $f(n)=o(g(n))$ ou $f(n)\in o(g(n))$ | Petit o | f est négligeable devant g asymptotiquement | $|f(n)|\leq |g(n)|\cdot \varepsilon$, quel que soit $\varepsilon$ > 0 (fixé). | $\forall \varepsilon >0\;\exists n_{0}\;\forall n>n_{0}\;|f(n)|\leq |g(n)|\cdot \varepsilon$ |
| $f(n)\in \omega (g(n))$ | Petit Omega | f domine g asymptotiquement | $|f(n)|\geq |g(n)|\cdot k$ pour tout k > 0 | $\forall k>0\;\exists n_{0}\;\forall n>n_{0}\;|g(n)|\cdot k\leq |f(n)|$ |
| $f(n)\sim g(n)\!$ | équivalent à | f est approximativement égale à g asymptotiquement | $|f(n)-g(n)|<\varepsilon |g(n)|$, quel que soit $\varepsilon$ > 0 (fixé). | $\forall \varepsilon >0\;\exists n_{0}\;\forall n>n_{0}\;|f(n)-g(n)|<\varepsilon |g(n)|$ |
Après grand-O, les notations Θ et Ω sont les plus utilisées en informatique ; le petit-o est courant en mathématiques mais plus rare en informatique. Le ω est peu usité.
Une autre notation parfois utilisée en informatique est Õ (soft-O en anglais) qui signifie grand-o à un facteur poly-logarithmique près. Autrement dit, f(n) = Õ(g(n)) signifie qu'il existe un entier k tel que f(n) = O(g(n) log$^k$ g(n)).
La notation f(x)$\asymp$g(x), introduite par Hardy en 1910, est couramment utilisée en théorie des nombres$^,$. Elle a la même signification que f(x) = Θ(g(x)), proposée par Knuth en 1976.

## Systèmes de notations
### Notations de Landau

Les notations de Landau portent le nom du mathématicien allemand spécialisé en théorie des nombres Edmund Landau qui utilisa le symbole O, introduit primitivement par Paul Bachmann, et s'en inspira pour inventer le symbole o. Il n'utilisa le symbole Ω que dans un seul article en 1924, pour signifier ≠ o ; cette notation avait été introduite (avec la même signification) en 1914 par G. H. Hardy et J. E. Littlewood ; depuis, Ω est couramment utilisé en théorie des nombres, mais exclusivement dans ce même sens, et jamais dans le premier sens indiqué dans le tableau ci-dessus. Dans le même article Landau utilise les symboles Ω$_R$ et Ω$_L$, également dus à Hardy et Littlewood, (et depuis notés Ω+ et Ω$_–$) pour signifier $\not <o$, respectivement $\not >o$. Il utilise bien sûr également la notation ∼, mais jamais ω ou Θ.

### Des notations de Hardy

Les notations de Hardy $\preccurlyeq$ et $\prec$, introduites par G. H. Hardy dans son tract de 1910 Orders of Infinity (parmi d'autres notations), jouent le même rôle que celles de Landau pour la comparaison asymptotique des fonctions.
En notation de Landau, on peut les définir comme suit :
    $f\preccurlyeq g\iff f=O(g)$
et
    $f\prec g\iff f=o(g).$
Ces notations de Hardy sont désuètes et Hardy lui-même les a rapidement abandonnées ; il utilise les notations de Landau dans tous ses articles (soit près de 400 !) et dans ses livres sauf dans son tract de 1910 et dans 3 articles (1910-1913). On peut noter que si Hardy a introduit dans son tract de 1910 quelques autres symboles pour la comparaison asymptotique des fonctions, il n'a par contre jamais défini ou utilisé la notation $\ll$ (ou $\prec \!\!\prec$), qu'on doit à Vinogradov.

### Notation de Vinogradov

Le théoricien des nombres russe Ivan Matveyevich Vinogradov introduisit dans les années 1930 la notation qui porte son nom,
    $f\ll g\iff f=O(g)$.
La notation ≪ de Vinogradov est couramment utilisée en théorie des nombres à la place de O ; parfois même les deux notations sont utilisées indifféremment dans le même article.

### Notation L

En 1982, Carl Pomerance a introduit une nouvelle notation pour abréger les fonctions complexes intervenant dans l'étude asymptotique de la complexité des algorithmes. Ainsi, par exemple, une fonction f appartient à la classe $L_{n}[\alpha ,c]$ si on a $f=\exp \left((c+o(1))\log(n)^{\alpha }(\log \log n)^{1-\alpha }\right)$ ; l'exponentielle « écarte » suffisamment les fonctions pour qu'il ne soit pas possible de ramener cette notation à la forme $f=O(g)$ par exemple.