3 \section{Quelques définitions}
5 Soit $\mathcal{F}$ l'ensemble des fonctions de
7 \begin{Def}[fonctions asymptotiquement dominées]
8 Soit $f \in \mathcal{F}$. L'ensemble $\mathcal{O}(f)$
9 des fonctions \emph{asymptotiquement dominées par} $f$ est défini par
12 \large\{ g \in \mathcal{F} \textrm{ t. q. }
19 Ainsi, à partir d'un rang $n_0$, $g(n)$ est majorée par $c f(n)$.
23 Soit $f$ et $g$ deux fonctions de $\mathcal{F}$. Si
24 $\lim_{n \rightarrow + \infty} \frac{f(n)}{g(n)} = l $
31 On confond dans ce qui suit la fonction $n \mapsto f(n)$ avec $f(n)$.
36 \item $2^{n+1}$ et $\mathcal{O}(2^{n})$?
37 \item $({n+1})!$ et $\mathcal{O}(n!)$?
42 Soit deux réels $\epsilon$ et $c$ vérifiant $0 < \epsilon < 1 < c$. Alors on a
45 \mathcal{O}(1) \subset
46 \mathcal{O}(\ln(n)) \subset
47 \mathcal{O}(n^{\epsilon}) \subset
48 \mathcal{O}(n) \subset
49 \mathcal{O}(n \ln(n)) \subset
50 \mathcal{O}(n^c) \subset
51 \mathcal{O}(c^n) \subset
56 \begin{Def}[fonctions dominant asymptotiquement]
57 Soit $f \in \mathcal{F}$. L'ensemble $\Omega(f)$
58 des fonctions \emph{dominant asymptotiquement} $f$ est défini par
61 \large\{ g \in \mathcal{F} \textrm{ t. q. }
68 Ainsi, à partir d'un rang $n_0$, $g(n)$ majore $c f(n)$.
73 Soit $f$ et $g$ deux fonctions de $\mathcal{F}$. Si
74 $\lim_{n \rightarrow + \infty} \frac{f(n)}{g(n)} = l $
81 Soit deux réels $\epsilon$ et $c$ vérifiant $0 < \epsilon < 1 < c$. Alors on a
85 \Omega(\ln(n)) \supset
86 \Omega(n^{\epsilon}) \supset
88 \Omega(n \ln(n)) \supset
95 \begin{Def}[fonctions asymptotiquement équivalentes]
96 Soit $f \in \mathcal{F}$. L'ensemble $\Theta(f)$
97 des fonctions \emph{asymptotiquement équivalentes} à $f$ est défini par
100 \large\{ g \in \mathcal{F} \textrm{ t. q. }
102 \exists c, c' \in \R_+,
104 c f(n) \leq g(n) \leq c' f(n)
111 Soit $f$ et $g$ deux fonctions de $\mathcal{F}$. Si
112 $\lim_{n \rightarrow + \infty} \frac{f(n)}{g(n)} = l $
119 Soit $f$, $f_1$, et $g$ des fonctions de $\mathcal{F}$. Si
120 $f \in \Theta(g)$ et si $\lim_{n \rightarrow + \infty} \frac{f_1(n)}{g(n)} = 0 $
122 $f + f_1 \in \Theta(g)$.
126 \section{Mesurer la complexité}
127 Soit $\mathcal{A}(n)$ un algorithme résolvant un problème sur des données
128 de taille $n$, $n \in \N$. On suppose que l'exécution de $\mathcal{A}$
129 coûte $T(n)$ étapes informatiques élémentaires ou unités de temps.
131 \begin{Def}[Pire des cas]
132 L'algorithme $\mathcal{A}(n)$ a une \emph{complexité du pire des cas}
133 dans $\mathcal{O}(f(n))$ si $T(n) \in \mathcal{O}(f(n))$.
134 On dit que $\mathcal{A}$ est en $\mathcal{O}(f(n))$.
137 Attention, la majoration proposée doit être la plus fine possible.
138 De plus, celle-ci doit être valide au delà d'une valeur $n$ supérieure
142 \begin{Def}[Meilleur des cas]
143 L'algorithme $\mathcal{A}(n)$ a une \emph{complexité du meilleur des cas}
144 dans $\Omega(f(n))$ si $T(n) \in \Omega(f(n))$.
145 On dit que $\mathcal{A}$ est en $\Omega(f(n))$.
148 \begin{Def}[ordre de grandeur d'un temps d'exécution]
149 L'algorithme $\mathcal{A}(n)$ a une \emph{complexité} en
150 $\Theta(f(n))$ si $T(n) \in \Theta(f(n))$.
151 On dit que $\mathcal{A}$ est en $\Theta(f(n))$.
154 On note que si $T(n) \in \Theta(f(n))$, alors
155 $T(n) \in \mathcal{O}(f(n))$ et $T(n) \in \Omega(f(n))$.
157 $T(n) \in \Theta(n)$, on dit que l'algorithme est \emph{linéaire en $n$}
159 $T(n) \in \Theta(n^2)$, on dit que l'algorithme est \emph{quadratique en $n$}.
161 \section{Exemples d'étude de complexité}
163 \subsection{Un premier algo}
164 Soit $p$ une fonction polynôme de degré $n$ définie par
166 p(x) = \sum_{i=0}^n a_i x^i
168 On considère tout d'abord l'algorithme suivant:
177 \KwData{$n$: degré, $(a_i)_{0 \le i \le n}$: coefficients, $t$:
178 réel en lequel on évalue}
179 \KwResult{$\textit{val}$: réel tel que $\textit{val}= p(t)$}
180 \nllabel{laff1} $a' = a$ \;
181 \For{$i=n-1$ \KwTo $0$}{\nllabel{laford}
182 \nllabel{lafori} $a' = a_i + t \times a'$ \;
184 \nllabel{laff2} $\textit{val} = a'$ \;
185 \caption{Évaluation du polynôme $p$ en $t$}
188 On calcule les coûts d'exécution des lignes de l'algorithme comme suit:
190 % \item $\alpha$ désigne le temps d'accès mémoire en lecture écriture;
191 % \item $\beta$ désigne le temps d'exécution d'une opération arithmétique ($+$,$-$,$\times$, $/$);
192 % \item $\gamma$ désigne le temps d'exécution d'un test.
193 \item les lignes \ref{laff1} et \ref{laff2} cumulées coûtent une constante
194 de temps $A$ indépendante de $n$;
195 \item la ligne \ref{lafori} nécessite un temps d'exécution
196 $B$ indépendant de $n$;
197 \item la boucle for (ligne \ref{laford}) nécessite donc un temps $nB$.
200 Donc $T(n)= A + nB$ et donc $\lim_{n \rightarrow + \infty} \frac{T(n)}{n} = B$.
201 Ainsi cet algorithme a une complexité linéaire en $n$.
204 \subsection{Un second algo}
206 On considère l'algorithme suivant:
211 \KwData{$n$: entier naturel, $(x_i)_{0 \le i \le n}$: abscisses réelles,
212 $(y_i)_{0 \le i \le n}$: ordonnées réelles.}
213 \KwResult{$d$: vecteur de $n+1$ réels}
214 \nllabel{laford2}\For{$i=0$ \KwTo $n$}{
215 \nllabel{lafori2} $d_i' = y_i$ \;
217 \nllabel{laford2b}\For{$i=1$ \KwTo $n$}{
218 \nllabel{laford2bb}\For{$j=n$ \KwTo $i$}{
219 \nllabel{lafori2bb} $d_j = (d_j - d_{j-1})/(x_j - x_{j-1})$ \;
222 \caption{Polynôme d'approximation d'une fonction}
226 On calcule les coûts d'exécution des lignes de l'algo comme suit:
228 \item la boucle for (lignes \ref{laford2}-\ref{laforf2})
229 nécessite un temps $(n+1)A$.
230 \item la seconde boucle for (lignes \ref{laford2b}-\ref{lafori2b})
232 $\sum_{i=1}^n B(n-i+1)$ soit encore
233 $B\sum_{i=1}^n (n-i+1)=B\sum_{i=1}^n i= B\frac{n.(n+1)}{2}$
235 Ainsi $T(n) = (n+1)A + B\frac{n.(n+1)}{2}$ et donc l'algorithme proposé est
240 Dans un cadre industriel, on est amené à effectuer un contrôle $(P)$ sur
241 les données. La durée de cette phase est limitée.
242 Il existe deux méthodes $A_1(n)$ et $A_2(n)$ de traitement de $(P)$.
243 On a établi que le temps d'exécution $T_1(n)$ de $A_1(n)$ est en
244 $\Theta(n^3)$ et que le temps d'exécution $T_2(n)$ de $A_2(n)$ est en
247 \item Lors d'une évaluation pratique des deux méthodes, on a
248 obtenu les mesures suivantes
249 $$\begin{array}{|l|l|l|}
251 n & T_1(n) & T_2(n) \\
253 200 & 10400 & 6800 \\
258 \item En déduire quel sera le temps nécessaire au traitement de données
260 \item Même question avec $n'=200\lambda$ où $\lambda$ réel de $[1, +\infty[$.
261 \item Déterminer la taille maximale des données que peuvent traiter
262 $A_1$ et $A_2$ si le temps disponible est $t=10^5$.
264 \item En fait, une étude statistique approfondie des deux algorithmes a permis
265 d'établir que pour $n$ grand, on obtient: $T_1(n) \approx 0,001n^3$ et $T_2(n) \approx 0,19n^2$.
267 \item Quel est à priori l'algorithme le plus performant au vu de
269 \item Montrer qu'il existe un seuil $n_0$ en dessous duquel l'algorithme réputé
270 le meilleur est en fait le moins performant. Déterminer cette valeur.
271 \item Pourquoi un algorithme performant sur des données de grandes tailles
272 peut-il être lent pour des données de petite taille?
277 \section{Classes de complexité de problèmes}
279 \subsection{La classe \emph{P}}
280 Les problèmes de cette classe sont ceux qui admettent une solution
281 algorithmique \emph{déterministe} et en temps \emph{polynomial}:
282 lorsque la taille du problème est $n$, le
283 nombre d'étapes de l'algorithme qui le résout reste plus petit
284 qu'une certaine puissance de $n$ et ne contient pas d'indéterminisme.
285 La complexité de l'algorithme est alors en $\Theta(n^k)$ pour un certain $k$.
289 \subsection{La classe \emph{NP}}
290 Les problèmes de cette classe sont ceux qui admettent
291 une solution algorithmique \emph{non déterministe} en temps \emph{polynomial}.
292 De façon équivalente, c'est la classe des problèmes pour lesquels
293 si une solution est proposée, on peut vérifier sa validité à l'aide d'un
294 un algorithme en temps polynomial.
295 On a $\emph{P} \subset \emph{NP}$.
297 \subsection{La classe \emph{NP-complet}}
298 Les problèmes de cette classe sont ceux de la classe $\emph{NP}$
299 tels que tous les problèmes de la classe NP peuvent se réduire à celui-ci.
300 Cela signifie que le problème est au moins aussi difficile
301 que tous les autres problèmes de la classe NP.
303 Le problème du voyageur de commerce (qui consiste à
304 trouver le chemin le plus court reliant une série de villes),
305 le problème du sac à dos (étant donné un sous-ensemble $S$
306 de l’ensemble des entiers naturels et $m$
307 un nombre positif, peut-on trouver
308 une partie $A$ de $S$
309 telle que la somme de ses éléments soit égale à l’entier $m$)
310 sont des exemples de problèmes NP-complets.