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)$.
20 On dit que \og $g$ est dans grand $\mathcal{O}$ de $f$ \fg{}.
23 On considère par exemple
24 $f: n \mapsto \dfrac{n^3}{2}$,
25 $g_1: n \mapsto n^2 + 17n + 15$ et
26 $g_2: n \mapsto 5n^3$. On a:
28 \item $g_1 \in \mathcal{O}(f)$: en effet, on prend $n_0 =1$ et
29 $c = 2(1+17+15)$; alors
30 $n^2+17n+15 \leq c.\dfrac{n^3}{2}$ si $n \geq 1$.
31 \item $g_2 \in \mathcal{O}(f)$: en effet, on prend $n_0 =1$ et
33 $5n^3\leq 10.\dfrac{n^3}{2}$.
34 \item $f \in \mathcal{O}(g_2)$: immédiat.
35 \item $f \not \in \mathcal{O}(g_1)$: sinon on serait capable de trouver une
36 constante $c$ telle que
37 $\dfrac{n^3}{2} \leq c.(n^2 +17n + 5)$ soit encore
38 $\dfrac{n^3}{2(n^2 +17n + 5)} \leq c$ et donc
39 $\dfrac{n^3}{2} \leq c$ ce qui est impossible.
46 Soit $f$ et $g$ deux fonctions de $\mathcal{F}$. Si
47 $\lim_{n \rightarrow + \infty} \frac{f(n)}{g(n)} = l $
54 On confond dans ce qui suit la fonction $n \mapsto f(n)$ avec $f(n)$.
59 \item $2^{n+1}$ et $\mathcal{O}(2^{n})$?
60 \item $({n+1})!$ et $\mathcal{O}(n!)$?
65 Soit deux réels $\epsilon$ et $c$ vérifiant $0 < \epsilon < 1 < c$. Alors on a
68 \mathcal{O}(1) \subset
69 \mathcal{O}(\ln(n)) \subset
70 \mathcal{O}(n^{\epsilon}) \subset
71 \mathcal{O}(n) \subset
72 \mathcal{O}(n \ln(n)) \subset
73 \mathcal{O}(n^c) \subset
74 \mathcal{O}(c^n) \subset
79 \begin{Def}[fonctions dominant asymptotiquement]
80 Soit $f \in \mathcal{F}$. L'ensemble $\Omega(f)$
81 des fonctions \emph{dominant asymptotiquement} $f$ est défini par
84 \large\{ g \in \mathcal{F} \textrm{ t. q. }
91 Ainsi, à partir d'un rang $n_0$, $g(n)$ majore $c f(n)$.
96 Soit $f$ et $g$ deux fonctions de $\mathcal{F}$. Si
97 $\lim_{n \rightarrow + \infty} \frac{f(n)}{g(n)} = l $
104 Soit deux réels $\epsilon$ et $c$ vérifiant $0 < \epsilon < 1 < c$. Alors on a
108 \Omega(\ln(n)) \supset
109 \Omega(n^{\epsilon}) \supset
111 \Omega(n \ln(n)) \supset
118 \begin{Def}[fonctions asymptotiquement équivalentes]
119 Soit $f \in \mathcal{F}$. L'ensemble $\Theta(f)$
120 des fonctions \emph{asymptotiquement équivalentes} à $f$ est défini par
123 \large\{ g \in \mathcal{F} \textrm{ t. q. }
125 \exists c, c' \in \R_+,
127 c f(n) \leq g(n) \leq c' f(n)
134 Soit $f$ et $g$ deux fonctions de $\mathcal{F}$. Si
135 $\lim_{n \rightarrow + \infty} \frac{f(n)}{g(n)} = l $
142 Soit $f$, $f_1$, et $g$ des fonctions de $\mathcal{F}$. Si
143 $f \in \Theta(g)$ et si $\lim_{n \rightarrow + \infty} \frac{f_1(n)}{g(n)} = 0 $
145 $f + f_1 \in \Theta(g)$.
149 \section{Mesurer la complexité}
150 Soit $\mathcal{A}(n)$ un algorithme résolvant un problème sur des données
151 de taille $n$, $n \in \N$. On suppose que l'exécution de $\mathcal{A}$
152 coûte $T(n)$ étapes informatiques élémentaires ou unités de temps.
154 \begin{Def}[Pire des cas]
155 L'algorithme $\mathcal{A}(n)$ a une \emph{complexité du pire des cas}
156 dans $\mathcal{O}(f(n))$ si $T(n) \in \mathcal{O}(f(n))$.
157 On dit que $\mathcal{A}$ est en $\mathcal{O}(f(n))$.
160 Attention, la majoration proposée doit être la plus fine possible.
161 De plus, celle-ci doit être valide au delà d'une valeur $n$ supérieure
165 \begin{Def}[Meilleur des cas]
166 L'algorithme $\mathcal{A}(n)$ a une \emph{complexité du meilleur des cas}
167 dans $\Omega(f(n))$ si $T(n) \in \Omega(f(n))$.
168 On dit que $\mathcal{A}$ est en $\Omega(f(n))$.
171 \begin{Def}[ordre de grandeur d'un temps d'exécution]
172 L'algorithme $\mathcal{A}(n)$ a une \emph{complexité} en
173 $\Theta(f(n))$ si $T(n) \in \Theta(f(n))$.
174 On dit que $\mathcal{A}$ est en $\Theta(f(n))$.
177 On note que si $T(n) \in \Theta(f(n))$, alors
178 $T(n) \in \mathcal{O}(f(n))$ et $T(n) \in \Omega(f(n))$.
180 $T(n) \in \Theta(n)$, on dit que l'algorithme est \emph{linéaire en $n$}
182 $T(n) \in \Theta(n^2)$, on dit que l'algorithme est \emph{quadratique en $n$}.
184 \section{Exemples d'étude de complexité}
186 \subsection{Un premier algo}
187 Soit $p$ une fonction polynôme de degré $n$ définie par
189 p(x) = \sum_{i=0}^n a_i x^i
191 On considère tout d'abord l'algorithme suivant:
200 \KwData{$n$: degré, $(a_i)_{0 \le i \le n}$: coefficients, $t$:
201 réel en lequel on évalue}
202 \KwResult{$\textit{val}$: réel tel que $\textit{val}= p(t)$}
203 $a' = a$ \; \nllabel{laff1}
204 \For{$i=n-1$ \KwTo $0$}{\nllabel{laford}
205 $a' = a_i + t \times a'$ \; \nllabel{lafori}
207 $\textit{val} = a'$ \; \nllabel{laff2}
208 \caption{Évaluation du polynôme $p$ en $t$}
211 On calcule les coûts d'exécution des lignes de l'algorithme comme suit:
213 % \item $\alpha$ désigne le temps d'accès mémoire en lecture écriture;
214 % \item $\beta$ désigne le temps d'exécution d'une opération arithmétique ($+$,$-$,$\times$, $/$);
215 % \item $\gamma$ désigne le temps d'exécution d'un test.
216 \item les lignes \ref{laff1} et \ref{laff2} cumulées coûtent une constante
217 de temps $A$ indépendante de $n$;
218 \item la ligne \ref{lafori} nécessite un temps d'exécution
219 $B$ indépendant de $n$;
220 \item la boucle for (ligne \ref{laford}) nécessite donc un temps $nB$.
223 Donc $T(n)= A + nB$ et donc $\lim_{n \rightarrow + \infty} \frac{T(n)}{n} = B$.
224 Ainsi cet algorithme a une complexité linéaire en $n$.
227 \subsection{Un second algo}
229 On considère l'algorithme suivant:
234 \KwData{$n$: entier naturel, $(x_i)_{0 \le i \le n}$: abscisses réelles,
235 $(y_i)_{0 \le i \le n}$: ordonnées réelles.}
236 \KwResult{$d$: vecteur de $n+1$ réels}
237 \For{$i=0$ \KwTo $n$} { \nllabel{laford2}
238 \nllabel{lafori2} $d_i' = y_i$ \;
240 \For{$i=1$ \KwTo $n$}{\nllabel{laford2b}
241 \nllabel{laford2bb}\For{$j=n$ \KwTo $i$}{
242 \nllabel{lafori2bb} $d_j = (d_j - d_{j-1})/(x_j - x_{j-1})$ \;
245 \caption{Polynôme d'approximation d'une fonction}
249 On calcule les coûts d'exécution des lignes de l'algo comme suit:
251 \item la boucle for (lignes \ref{laford2}-\ref{laforf2})
252 nécessite un temps $(n+1)A$.
253 \item la seconde boucle for (lignes \ref{laford2b}-\ref{lafori2b})
255 $\sum_{i=1}^n B(n-i+1)$ soit encore
256 $B\sum_{i=1}^n (n-i+1)=B\sum_{i=1}^n i= B\frac{n.(n+1)}{2}$
258 Ainsi $T(n) = (n+1)A + B\frac{n.(n+1)}{2}$ et donc l'algorithme proposé est
263 Dans un cadre industriel, on est amené à effectuer un contrôle $(P)$ sur
264 les données. La durée de cette phase est limitée.
265 Il existe deux méthodes $A_1(n)$ et $A_2(n)$ de traitement de $(P)$.
266 On a établi que le temps d'exécution $T_1(n)$ de $A_1(n)$ est en
267 $\Theta(n^3)$ et que le temps d'exécution $T_2(n)$ de $A_2(n)$ est en
270 \item Lors d'une évaluation pratique des deux méthodes, on a
271 obtenu les mesures suivantes
272 $$\begin{array}{|l|l|l|}
274 n & T_1(n) & T_2(n) \\
276 200 & 10400 & 6800 \\
281 \item En déduire quel sera le temps nécessaire au traitement de données
283 \item Même question avec $n'=200\lambda$ où $\lambda$ réel de $[1, +\infty[$.
284 \item Déterminer la taille maximale des données que peuvent traiter
285 $A_1$ et $A_2$ si le temps disponible est $t=10^5$.
287 \item En fait, une étude statistique approfondie des deux algorithmes a permis
288 d'établir que pour $n$ grand, on obtient: $T_1(n) \approx 0,001n^3$ et $T_2(n) \approx 0,19n^2$.
290 \item Quel est à priori l'algorithme le plus performant au vu de
292 \item Montrer qu'il existe un seuil $n_0$ en dessous duquel l'algorithme réputé
293 le meilleur est en fait le moins performant. Déterminer cette valeur.
294 \item Pourquoi un algorithme performant sur des données de grandes tailles
295 peut-il être lent pour des données de petite taille?
300 \section{Quelques classes de complexité de problèmes}
302 \subsection{La classe \emph{P}}
303 Les problèmes de cette classe sont ceux qui admettent une solution
304 algorithmique \emph{déterministe} et en temps \emph{polynomial}:
305 lorsque la taille du problème est $n$, le
306 nombre d'étapes de l'algorithme qui le résout reste plus petit
307 qu'une certaine puissance de $n$ et ne contient pas d'indéterminisme.
308 La complexité de l'algorithme est alors en $\Theta(n^k)$ pour un certain $k$.
312 \subsection{La classe \emph{NP}}
313 Les problèmes de cette classe sont ceux qui admettent
314 une solution algorithmique \emph{non déterministe} en temps \emph{polynomial}.
315 De façon équivalente, c'est la classe des problèmes pour lesquels
316 si une solution est proposée, on peut vérifier sa validité à l'aide d'un
317 un algorithme en temps polynomial.
318 On a $\emph{P} \subseteq \emph{NP}$.
320 \subsection{La classe \emph{NP-complet}}
321 Les problèmes de cette classe sont ceux de la classe $\emph{NP}$
322 tels que tous les problèmes de la classe NP peuvent se réduire à celui-ci.
323 Cela signifie que le problème est au moins aussi difficile
324 que tous les autres problèmes de la classe NP.
326 Le problème du voyageur de commerce (qui consiste à
327 trouver le chemin le plus court reliant une série de villes),
328 le problème du sac à dos (étant donné un sous-ensemble $S$
329 de l’ensemble des entiers naturels et $m$
330 un nombre positif, peut-on trouver
331 une partie $A$ de $S$
332 telle que la somme de ses éléments soit égale à l’entier $m$)
333 sont des exemples de problèmes NP-complets.