]> AND Private Git Repository - cours-mesi.git/blob - complexite.tex
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
j
[cours-mesi.git] / complexite.tex
1
2
3 \section{Quelques définitions}
4
5 Soit $\mathcal{F}$ l'ensemble des fonctions de
6 $\N$ dans $\R^*_+$. 
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
10 $$
11 \mathcal{O}(f) = 
12 \large\{ g \in \mathcal{F} \textrm{ t. q. }
13 \exists n_0 \in \N, 
14 \exists c \in \R_+,
15 \forall n \geq n_0,
16 g(n) \leq c f(n)
17 \large\}.
18 $$
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{}.
21 \end{Def}
22
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:
27 \begin{itemize}
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 
32 $c = 10$; alors
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}{2} \leq c$ ce qui est impossible. 
40 \end{itemize}
41
42
43
44
45 \begin{Prop}
46 Soit $f$ et $g$ deux fonctions de $\mathcal{F}$. Si 
47 $\lim_{n \rightarrow + \infty} \frac{f(n)}{g(n)} = l $
48 alors on a 
49 $\mathcal{O}(f) =  
50 \mathcal{O}(g)$
51 \end{Prop}
52
53
54 On confond dans ce qui suit la fonction $n \mapsto f(n)$ avec $f(n)$.
55
56 \begin{Exo}
57 Que dire de:
58 \begin{enumerate}
59 \item  $2^{n+1}$  et $\mathcal{O}(2^{n})$?
60 \item  $({n+1})!$  et $\mathcal{O}(n!)$?
61 \end{enumerate}
62 \end{Exo}
63
64 \begin{Prop}
65 Soit deux réels $\epsilon$ et $c$ vérifiant $0 < \epsilon <  1 < c$. Alors on a 
66
67 $
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 
75 \mathcal{O}(n!)
76 $
77 \end{Prop}
78
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
82 $$
83 \Omega(f) = 
84 \large\{ g \in \mathcal{F} \textrm{ t. q. }
85 \exists n_0 \in \N, 
86 \exists c \in \R_+,
87 \forall n \geq n_0,
88 g(n) \geq c f(n)
89 \large\}.
90 $$
91 Ainsi, à partir d'un rang $n_0$, $g(n)$ majore $c f(n)$.
92 \end{Def}
93
94
95 \begin{Prop}
96 Soit $f$ et $g$ deux fonctions de $\mathcal{F}$. Si 
97 $\lim_{n \rightarrow + \infty} \frac{f(n)}{g(n)} = l $
98 alors on a 
99 $\Omega(f) =  
100 \Omega(g)$
101 \end{Prop}
102
103 \begin{Prop}
104 Soit deux réels $\epsilon$ et $c$ vérifiant $0 < \epsilon <  1 < c$. Alors on a 
105
106 $
107 \Omega(1) \supset 
108 \Omega(\ln(n)) \supset 
109 \Omega(n^{\epsilon}) \supset 
110 \Omega(n) \supset 
111 \Omega(n \ln(n)) \supset 
112 \Omega(n^c) \supset 
113 \Omega(c^n) \supset 
114 \Omega(n!)
115 $
116 \end{Prop}
117
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
121 $$
122 \Theta(f) = 
123 \large\{ g \in \mathcal{F} \textrm{ t. q. }
124 \exists n_0 \in \N, 
125 \exists c, c' \in \R_+,
126 \forall n \geq n_0,
127 c f(n) \leq g(n) \leq c' f(n)
128 \large\}.
129 $$
130 \end{Def}
131
132
133 \begin{Prop}
134 Soit $f$ et $g$ deux fonctions de $\mathcal{F}$. Si 
135 $\lim_{n \rightarrow + \infty} \frac{f(n)}{g(n)} = l $
136 alors on a 
137 $f \in \Theta(g)$ et   
138 $g \in \Theta(f)$.
139 \end{Prop}
140
141 \begin{Prop}
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 $
144 alors on a 
145 $f  + f_1 \in \Theta(g)$.
146 \end{Prop}
147
148
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. 
153
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))$.
158 \end{Def}
159
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 
162 à un seuil $n_0$. 
163  
164
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))$.
169 \end{Def}
170
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))$.
175 \end{Def}
176
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))$.
179 Lorsque 
180 $T(n) \in \Theta(n)$, on dit que l'algorithme est \emph{linéaire en $n$} 
181 et lorsque 
182 $T(n) \in \Theta(n^2)$, on dit que l'algorithme est \emph{quadratique en $n$}.
183
184 \section{Exemples d'étude de complexité}
185
186 \subsection{Un premier algo}
187 Soit $p$ une fonction polynôme de degré $n$ définie par 
188 $
189 p(x) = \sum_{i=0}^n a_i x^i
190 $.
191 On considère tout d'abord l'algorithme suivant: 
192
193
194
195
196
197 \begin{algorithm}[H]
198  \LinesNumbered 
199  \SetAlgoLined
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_n$ \; \nllabel{laff1} 
204  \For{$i=n-1$ \KwTo $0$}{\nllabel{laford} 
205     $a' = a_i + t \times a'$ \; \nllabel{lafori}
206  \nllabel{laforf}}
207 $\textit{val} = a'$ \; \nllabel{laff2}
208  \caption{Évaluation du polynôme $p$ en $t$}
209 \end{algorithm}
210
211 On calcule les coûts d'exécution des lignes de l'algorithme comme suit:
212 \begin{itemize} 
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$.
221 \end{itemize}
222
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$.
225
226
227 \subsection{Un second algo}
228
229 On considère l'algorithme suivant:
230
231 \begin{algorithm}[H]
232   \LinesNumbered 
233   \SetAlgoLined
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$ \; 
239    }\nllabel{laforf2}
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})$ \;
243      \nllabel{laforf2b}}
244     }\nllabel{lafori2b}
245  \caption{Polynôme  d'approximation d'une fonction}
246 \end{algorithm}
247
248
249 On calcule les coûts d'exécution des lignes de l'algo comme suit:
250 \begin{itemize} 
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})
254   nécessite un temps
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}$
257 \end{itemize}
258 Ainsi $T(n) = (n+1)A + B\frac{n.(n+1)}{2}$ et donc l'algorithme proposé est 
259 quadratique en $n$.
260
261
262 \begin{Exo}
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 
268 $\Theta(n^2)$.
269 \begin{enumerate}
270 \item Lors d'une évaluation pratique des deux méthodes, on a 
271   obtenu les mesures suivantes 
272 $$\begin{array}{|l|l|l|}
273 \hline
274 n & T_1(n) & T_2(n) \\
275 \hline
276 200 & 10400 & 6800 \\
277 \hline
278 \end{array}.$$
279
280 \begin{enumerate}
281 \item En déduire quel sera le temps nécessaire au traitement de données 
282   de taille $n'=10^4$.
283 \item Même question avec $n'=200\lambda$ où $\lambda$ réel de $[0, +\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$.
286 \end{enumerate}
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$.
289 \begin{enumerate}
290 \item Quel est à priori l'algorithme le plus performant au vu de 
291   l'étude effectuée ?
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?
296 \end{enumerate}
297 \end{enumerate}
298 \end{Exo}
299
300 \section{Quelques classes de complexité de problèmes}
301
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$.
309
310
311
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}$.
319
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.
325
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.