Sie sind auf Seite 1von 30

Complexité

Techniques de calcul
et de réduction
Unité : IN311

Lilian BUZER
version β année 2003-2004
Table des matières

! "" #
$ #
%& "" #
' "" " " "" " (
) " "" " (
*+ " (
%& ,
" "" " - " . " ,
/ . ,
# % "" " ,
( " 0
( "1 . . "& "" " 0
( " 2 "3 4 0
( * " " 0
( "" 5
(# ' " 2 "
, ' " "
, ' " "" "
, "
, " "3 "
, " 2 " " "&" #
0 #
0 #
0 . 6 (
7 " . " 8
% " 9 : . ; 8
< & " 9) = ; 8
< 5
" " 9 "" ; 5
" "9 - ";
) " 6 "
"
- . 9- ;
"" & 3 #
" 3 && #
$ " 2 " ""2 " (
%& "" " 2+ "9 > " ;
(
# "" " " ,
( ' " 9 " "" " "; ,

3 4
3" &
A Introduction au calcul de complexité

1- La notion de coût d'exécution

" 2+ ? " "/ "3 " " "


. " && " " " "
"? " " @3 3 + .
. " " " " "" " " " "" "
" . " " " " - "
" - "" 3 -
" 2" " " + " 22 "" "$ ". " + " +"
&& 3 " " "
"" 3 " ' - " 3
& 3 - " " " "
" " && ? & A & .
2 . 3 " " " " "" "3
" " "

$ 2+ 1$ " "

B " . " A "" " " " " "


" " & - " " " "" "
" " " ") " " " " "
A "" 3 . & ". . "" " " = . -
" 2 " > " " 2 & " C A "" "
" " " " " " "" "" " ". A "" "
" "" . "3 " " "

* "1

$ 2+ 1 "2 " 2D

E 2 " 2D " 3 " " "" " " "


" & @ ? " " " "2 " + " "
' 2 "@ && " " . "2 "" "3
F

* "1

2- La méthode d'évaluation

2.1- Exemple

$ " & " " " " " 2


"1
) 9 G<? ;
H
I<J5KL
& 9 I L M L NN;
&9<J KM ;
I<J KL
L
O

" " & 2 2


" " && "% " "? " && " " " "
"" 3 & " 2 " "
" " " "
" ' " + " + "

* . 1 " ". " ? . " && " "


@ " 3 . ". " " " " " " - .
"" 3

2.2- La méthode

% " "? " " 1

". 1

&9 ;
H
9 ;L
9 ;L
O

&9 ;
H
&9 ;
9;
"
9 ;L
O

* . 1 " &"

&9 ? ;
H
& 9 I L M L NN;
9 ;L
O

" " ' " " @ " "? "


3 . ". 3 & 9; " 2 1
&9 ? ;
H
& 9 I L M L NN;
9 ? ;L
O
" " 2 " " && " "? " " "1

3- Notation grand O et classe de complexité

3.1- Principe général

= " ". && ( 0 " "" "


" ". " ? . 3 A "
8
" = " "" "" && 5 "
" " ? "2 " " " "" "1

5 P5 P5 P5
5 P5 P5 ∞
5
(
P5 ∞ ∞
58 P " ∞ ∞
5 ∞ ∞ ∞

" . ". "


" "? " "2 " ". "
9& 3 "
1 P5; % " " "? ""
" & " ? / " 9∞). B . " "
". . "3 && " "" "" ?
" " " " C " + 2 9 ?
; "" " "3 " . " > "" 3 .
"/ " " ". " "
58 "? " 5 ". . ,8 ".
& ? && " % ? "
. " / 3 % ? ". " ?
-A " & @ "

3.2- Définition de la classe de complexité

%& 1 !
B & " ! 1 " " "1
* . 1 & " "& . & " ! .
&& ? & . 2 " " " 1
' " ? ""2 " " "" ""
" & " "" "
& " & . "3 &" 2 " 2 &

* . 1 " "
&& ? . & " " & "& .
! $ " && "" ". " &
. / . 3 &

* . 1 " ! "& " . "


" " " " && ? " " 2 " -
- " ? + " " " "2 "

3.3- Classes de complexité les plus usuelles

4- Manipulation des classes de complexité

4.1- Règles d'écriture

# 5
(

* . 1 " " .
4.2- Définition d'un ordre

" " & " && " "" " = " "
"" " " 5 " " " 1

4.3- Les classes polynomiales et logarithmiques

" "3 " 2 " "" " - 1 $


" " 2 1
5 5
5 5
5
5

) >. 1

" " @ " " C " & $


. ? @ "" -A . @ ""
$ " ? " && " 2 " - A "1
5#
" " "& " . " &
"2 " 1
5# #

5# 5# # # # # #

4.4- Intérêt pratique

= " " &1 # ( ,


' > ""

*" 1

# ( ,
5#

5#

5- D'autres estimations

" " 3 " "% +


"- . ? " ""2 3 " " "" " "
1 9 ; = " . " "
". " "" 9 /;
1 " " " " " "
9 " && . " " . " " " ;
" " 9 " && . " ; '
- " /

1 " 2 ""
&& " " " " / " "$
". "

* . 1 &" 2+ " "&


3 " 2+ 2+ " 3
" " " " " " " "
. . ". 2+ "

6- Exemples de calcul de complexité

6.1- Exercices : quelques fonctions standards

* . "&1
* . &1
* " " 1
) 1
< " 1
Q" "" "1
* 2 "R " " "1
* 2 "R " " "1

* . 1 " " " ? & & 32 "


&& " + " " " &
&" 3 " + "" " "

6.2- Les incontournables à connaître

* .
) ? ? -
<
Q" "" "

6.3- Recherche des premiers

= " " "? 4 " "$ " " ""


""2 "1

! " & "1


! "@ " && " "1
" > " "<% "
$ 2+ 1 . & " " 2 F
* "1" " & " +
" " "" / ""
" + " " ""

S " 1. & " ". @


" " "F
5T " "F
! " "0+ " &

6.4- Le calcul de l'épaisseur verticale maximale

" " "" 2 " /


" " " 2@ " " / "" .
- " " " "" " " "
" 3 2 " & $ " " " "
" "" / 9" &; " "3 9" "
3 ;? & "" "

" . ". "" " & " " "


- B & " " " 1
' % "9$ ?= ; ' & " 2 "3 2 ?
" " 2 & " .
" 3 " " " & & 2+ " "
" 2 " && "? " "- . " "" 1 " " " "
2 " " 2 & $ " & ? " " " . "
C " "" 2 " ? "" " +

1 2 "
I5
$ I 3
$ @I 3
= 9SJ@KU MI $J KU MI SJ@N KU ;
I 9 ?' % "9$J K?SJ@K?SJ@N K;

' 1 !9 V;
" .
I5
$ I 3
@I * % 9S? ?$J KU;
I 9 ?' % "9$J K?SJ@K?SJ@N K;

' 1 !9 ;

" . " +
I5
@I
$ I 3
< . 9SJ@KU M $J KU; "@NN
I 9 ?' % "9$J K?SJ@K?SJ@N K;

' 1 !9 ;

2 " .
' " 3 " " /
& . ? . " " "& & "" 2
" 2 & "? & &" & =
" 3 " "" $ 2" "" ? " "" "
"" 3 3 2" "" $ " && & ""
" + " "" " & " 2 " "
" " 1

) &3 ) & ) &3


& 6 . " " " W 2 &
"? " !9 ; " . " .
3 . &" " 2 "" " " " " &" &
" " . " 2" "" "

I @I
* +
I 9N@;X
YI * % 9S? ?$J KU;
6 I6 9 ?Y;
" 96 II Q<; @I L
" " 96 II * 6Z<; I L
" ' % "9$J K?SJYK?SJYN K;

' 1 !9 V ; R
6.5- Calcul de l'enveloppe convexe d'un ensemble de points

1 " " + "9 ";

" " " " " "" 3 " 2 "


$ " " 2 " 2 & "
" " "" 2 " 2" "" " "" " " " . "
" " 2 " 1

5 $" " " + "" " " " "


= " + "&
"& ?& " + " + "
" + "
< . " + " " " 2 ?

2 &2 "

1 " 2 " " " "


2+ " & " +

* . 1 " . " " " . "


" ""2 + " " && " && ? " " + "
3 .

1 ) . " $ . 2
" 2 "" 2 " 2 " +" & !?
. - " && "

' " 1 " " ""2 -


" 9. " " "; " 9 ) Y ;
" 2 ". . " "
" " 2 3 " ". & 4
" -

1 2 . 96 & D ;

$ " 1 " " / ? "3 ' "


& " " $ " & "
" " " " " " " " " " "
". ? "& "
& && ? " "
1 ' " " $ ? " " "> &
? ? 9" ; ) .
". .

7- Calculs de complexité avancés

7.1- Comparaison de classes

7.2- avec décimation

" "3 "" . & " 1


" "

' "

"2 " " 1

" " ?" " 2


5 5

' "

"2 " " 1

" "
5 5

" " . "


' "

5 5

' "

5 5 5

" " . "

7.3- Les erreurs à ne pas commettre

* . 1

" "& ""


1 && "
& " 3 " ? " " " " " "
&& ? " " 1

5 5

" " "& " '


" " ? 2 " "
"" " "& 2 . "/
2" . +" " &

* . 1

* " / & 9 ; & "? & . & ?


X? X? X0 " " " & ". 2 "
' " @" ? " " " + "? " &
"? " )/ " " ? "
+"2 . & " " 9; " + " ? "? .
+

7.4- Etude des doubles appels récursifs

" " . " 1

' "

$ " I0

0 0

0 5

= @ & "? " "" " " 2 " 3


" " "" "" 1

5 5

5 5

8- La complexité mémoire

8.1- Introduction

" " " + " " " "


" 3 . ""

* . 1 2 " && " " 2 &


"$ ?" " " 2 "? &
" " 2 " " "" " " "
" ' " Y " " 2+ " "
2 " && ? . ?
" !9 ; " "" !9 ;
8.2- Attaque de l'algorithme El-Gamal

" " " " " " . -


6 " "" " "& " "" " "" "
" " ". " && ? " " "
& " ? & . " " " "
- " "" " &&

1 "

" " " " "+ " &


3 " " " " " 1

0
# ( , 0
( 8
8 5
# 5 ,

" " " 2@ " " " &


" " " , 8 0

' 1

% "" ""2 " = " " " " " "


" 2 " " " " "' 1 !9 ;?
" !9 ; 9 " ; = " " " "
@". 3 ' 1 !9 ;? "!9 ;
0
$ " &" 0 2 "? " ? 50 = ?
"" "" " 5[8 5[ % " " "
"? " " " " " "

1
Q 1
1 2
1 1 ""
-
1 ""
1 "
% 1
Y

"" " ". "2 " +"3 " " & ". " "
" " + " Y" " &" " ""
"" ! " " " "
&& ? " + "3 " & ". " ? &
" . " " " +" &
"" " " 3 1 !9 ; ' - "
2" " && " "
= ? + . " "
" ? - " " 2" +
B

% " " " "? " " "" "3


' " " " "? + "
9 !9 ;; " " " . . 2
"" "" " \7 2-" "? 6
= "] = Y"

)" 1

$ " " C I8, " " 2 -" &


> " " "1
5
! ! !

"" && " "! ? " .


5
. " " "" "" " " " "
" " " 2 " ! = " " " "
" " % " "9 5 ;
" " ! 1

6 "! 1
< " ! 1
5
6 " 1
* " ! 1
' "1

' 1

' " 1

' . 2 " " "" $ "


8
&" ( 2 "? " " 1 ? 5
. ( ! ?0 5 . "2 "
$' " 888? & W" " " &" 02" "
& ". ? & / "
" " . " " "92 . " ; . 888
" . " &" 2"

S " 1 S " = Y".


" "" F $ " I 2? 2 2 2- " "9 " " "
; 2 2 " "9 " > "; " "1

6 "! 1
< " ! 1
5
6 " 1
* " ! 1
' "1

' 1
= " ". " -A 1 "" " 31
" ? "
" 2 = Y"" " " - +" " "
&& . ?" " "3 " " ? "
" " . " " 2 " 2 " "
" "
B Les techniques de réduction

" " . " " " ". ""


/ " "" . "1 " " "? "
. " " " . "' " "" " " "
" " "? " . ? " . " " . "" "
" " "3 " 3 " "
" " " " " " " "1 " ?
- .

1- Diviser pour régner (divide & conquer)

" " 2+ " && " " "1


% " 2+ " " 2+ "9 ;
*" . " " 2+ 9 . ;
' " " 3 "" " "" " 2+ "9 2 ;

% " & +2 " .


. " .+ . "&
#5555 " " / . && "
55555 "' . . 3 & . " " 2+
" " " "2 ""

1.1-

" " " ". . " " "


' " " "" " " "
. " . & " 9) = ; $ ?
" " " 2 "3 "9 ;? " ""
9 . ; " "" " ". 9 2 ;

) = 9 G<? ;
H
&9 II ; L X
X
I XL
) = 9<? ;L X
X .
) = 9:<J K? ;L X
X 2
G% I D J KL
Q " 9<? ?:<J K? ?%;L
* 9<?%? ;L X
X& " " 2
JK%L
O

= <9 ; "" "


. " 2 "" 3 " &" " 3
"" " ' " + " ". "
" & "2 " . - 1
' . @3 " ? "" ".
" 1 " " "
2+

1.2-

" " " " .


2+ && ? . 3 "" " " / " "
+ "" "2 " "" : . % & ? " " "
- " " +" &&
' & "? " """ " ?. " " 2 " "
"? ". " & " ". " " "= - " "
" " & "? " " & " " " 2
' ? " " " " " " &
# " ' + "
" " " " "" " " " "
& $ ?. " " 2
" "1

) = 9 G<? ;
H
? "? XX 2 " & "9 " " ";
&9 MI ; L
I) 9<? ? ?";L XX% 9N"I ;
= 9<? ? ?"? ;L
<J N KI L
) = 9<? ;L XX' .
) = 9:<JYN K?";
O

' &" " . " / + 2" "


2 "& 2 " 2" - " 3 &
. & " . 3 " ""

' " $ "


9. " . ;? / " " '
"3 +2 S Y= ' " - +"
&& && ? && . . " "" "9 & " ;? "
- " 2 " " " " " "

1) >. S Y= ". . " "

1.3- La paire de points la plus proche (closest pair)

" " " " 2+ "". = " "


" " " " " 2 " " " " "$ ?
" " " ^& . . 1
I L
=I 5 L
& 9 I 5 L M L NN;
& 9 @I N L @M L @NN;
I %
&9 M ;
H I L =I % LO

' " " = " ? +"


" . " ? 2" " :
. " ? " "
" " "
"" " " + " & 2" "" " "" " "
" '+ ! " 2" "" " " 2 "
" " " & " "" 2+ "
" & " "1 " ( ") " 3
& " ? "" " " ""
A && " " )( & . " " " " " & "
" " "1 " ) " ( " )(

'$9 ' & ;


H
"9 M ;
" 9 II ; & 5? &
I XL XX !9 ;
&( $ & ' *
&) $ & ' *
" ( I '$9 ' 5 ' &( ; XX .
" ) I'$9 ' ' &) ;
" "( ") XX 2
( $ & ' * " ' *
) $ & ' * ' * "
" " )( ( ) "
" "
O

"" 3 " " " " " " " &(


" &
&) " 3 ' " " && " "
& " . " && "
"&" $ 2 ? " "" " . ""2 "? "
" " . " " " 2 "" " " ( " )
&& ? " " " " 2 ?. . "
" " " ? " & "
3 "( ") " ". " " / " "" 2 "1 ( ) "
" " & " )( "" " " " . & "
. & " " ? "
" $ ". ? " " "" " "
""& ' . ? ""
2 "2
" (

"(
")

"
"

' " )
"? "

" 3 2 & " )( " " " " "" " "
" "" "1 ( ) $ " " && " +
" "" "2 "" " && + &
" 1

" )( ( ) "
H
@I5
"
5 3 (
. 9 ) % + ( + " ; @NNL
I@
. ) + ( + "
) (
NNL
O

"" 3 " " " ( $ . ? "


" . " " " ) . 3 "
&& " " "" " "" " " &
" 3 " $ "" " ( + " ?
" " " % " ( ) " "
" "" "? " " "" ) % " " "
& 3 ' " " 2 "
2 . " @". 3 " + " .
" " " + && ? ( "
" " " ) " "" " " "1 " ? "
% " +" & " ? " ". ( "
) $ 2" ? " " "? - & " ')
" " & 3 " . " / "
". ? + 2 2. "2 ( "
& " (
2- Approches gloutonnes (greedy methods)

" & ". " 3 " " &"" "


+ " ". " / " "3
+" && " " " " "" " "

2.1- Monsieur Grenouille est amoureux

2+ 1
) " 6 " " " = 2
"" "" > @ " ) " 6
"" " & ". / "
" @". 3 " 2 ' " "> .
3) " 6 @ "2 " "

$ " " "> 2 " . .


" . "" " " . ") " 6 "
" . @ " "" " " "
? " "" " " "" . " " "
" ") " 6 "" " " " ? 1
% % " " % " 9G;
= .

"

= 1 " && 3 ) " 6 " 3 . &" "


" " " " " 1
?" " " ' " " "& @ " 3 2
". \ " "] " "

% " 1 " " " " " "" " "


" "" &. 2 " "" 2" "" - > 2
" "
= " ". " " $ " ". " , "
= " "? . . " & " $,. 2
/ . " "& " +",
' " 2
" ' 9G; & . ) " 6
@ "" "
Z" . 1 " " """ " - + " &
. ? "" " "3 " - " / " ". "
" " ) " 6 ' & " " "
" & 2 " 9) " : ; @ - "
9" & "& + "? " "? " " " && "3
2 ;? " "" " " "3 % C ""
/ &

2.2- Le sélecteur d'activité

E
" " 2 && " "E " " /
&& "? " " " " "? " 2 .3 " "-
" " "" " "? " "" " . "
. / && 1 J- J " " "
" ' " "> ". . 2 " _ " "
9 " " " " " "; "_ "" " &
""

= 1
@I
$ H O
I 3
" % - "
$ $ #H O
@I

"" " + _ " " " " + _


W +" & _ & "" "A

% " 1

" && . + _ 3 " = " "?


"_ " " " " " " " " " _
& "" "A "3 9 " " "" ; + _
"
$ 2" ? " " ". " + _ $ "
$./ % 0 "" "' " " "" ? _ &
_ ? ". " 2 "_ "@?Y? "? "
_ "$ _ ? " 2 " " "2 ? - 2
" _ ' - +"

3- La programmation dynamique (dynamic programming)

) " 2 4 "

2+ 1 " " 4 " + ". " " "


& 3& " "2 " " 2 " "3
" " & " " " " " " "- 2 " " 3
" " "1
1
% " . "1 ) 1
1
1
% " && "1 )" 1
1
& 2 1 6 1
`

= " &+ ? " "" " " ""2 " $


? " "? " - " ? - 2"
& "1 ""2 " " " " " " 2+
- - . . " 2 2 "
&2 . " "" "

" " ( "1

"" & 3
" 3 &&
$ " 2 " ""2 "
%& "" " 2+ "9 >. " " ;
# "" " "
( ' " 9 " "" " ";

3.1- Expression de la fonction à évaluer

#2
= " " "# "
2
" " " 2 1

# 23 1 ` 1 1 4 `
23 1 1 ` ` 4 4
$ $ $ $ $ $ $
"3 ,
" " 1

#2 1 `
" " " "
2 1 4

"

#2 #2
" "
2 2

* * *
" " ? " "
* + `

3.2- Ecriture de l'optimisation à effectuer

" ? " 2 " "" " # 9 ;


9 ; " "1

#2
# "
#2 2 2

3.3- Partitionnement de l'ensemble des possibles

" . & 2
2+ " " 2+ "" " 2+ "
" "1
*
* 1 " 2 "" " "& "" "
`
* 1 " 2 "" " "& "" 2 2"
*
` 1 " 2 "" " "& "" 2 2"

" "2 " 1


* U ` * U * ` ` U
* # ` # * ? * % ` & ? * % * & * % ` &

3.4- Définition des sous-problèmes (prouvez la préservation de


l'optimum)

#2 #2
# " # "
#2 2 2 #2 2 *
* #
U
` # `
*
2

#2 #2 #2
# # " # " # " !
#2 2 *
*
2 #2 2 U
`
2 #2 2 `
*
2

#2 #2 #2 #2
# " # " "
#2 2 *
*
2 #2 2 *
*
2 2 2

#2
#
2
*
*
"
#2
2
#2
2 ' "#
"#

#2 #2
# " " " 2 " " "
#2 2 *
*
2 2
+ " " # " + " "

" " " & "" " 2+ "1


<J ?@K1 ) " 2 "" "" " " " + " " #
" % + " "

9G; " . " " " "" " 2+ "" " &&" " 2
" 2+

3.5- Expression des dépendances

" "" 1

'
?% "# %
% # ?% "51
% "51

3.6- Construction de l'algorithme (initialisation et remplissage


des données)

! + + 2 2 " "
2 " " 3 2" $ " & +
? " && " " C & " 4 "
?5 "51 " " / + 5? % "51 %

" " 1

& 9 5 L L NN ; <J ?5KI "51


& 9 5 L L NN ; <J5?@KI "51

&9 L L NN;
&9 % L % L @NN ;
H
&9 # II % ; " " # " " "# -
<J KJ@KI ?% " ? % "5 % "5 L
O

* . 1$ . 3" & 2 3 % "


" " "? 2 " " / + = " + 1
*
* " 2 "" " ". "
& " " 3 " " & "" "<J ?@K " " " %
+ " " " "# % ? . " "" 3 " 3 . "
& > " 3 "

* . 1 S " " " && " & " "" " "F
< @ " +"9G; " 4 " "
" & % " - "& . " " ' ?"
2" "? " " " . . 3
" Y "<J ?@K

* . 1= " " / ? " /


" " F* "1 ' " 9 -
" ". "; " 7 7? " "1

1 1 4 1 1 4
" "
1 ` 4 ` 4
1 ) I 7 $I '

* U `
% +" * # ` # * 1

2 2 2 "
#2 #2 #2 "
* *
2" 2"

2 2 2 " 2 2 2 " `
#2 #2 #2 " # #2 #2 #2 " #

2 2 2 " *
#2 #2 #2 " ` 2"

"2 "2 3 " " 2

7 7 `
' ` '

7 7 `7 7 7 `7 7` 7` ``
' `' ' '` `` '` ' `' '

` 7 `7 ` 7 ` 7 `7 `7 ``7 7` 7` `7` 7``


7`
`' ` ' '` '`` '` `'` '` ` ' `' `' ` '
``'

`` 7 ` `7 ``7 ` 7` `7` 7``


'`` `'` ` '` ``' ` `' `` '

a & ". " 2 1

7
?. " "1 " ""2 '
9 2 "; 1
` 7 `7 ` 7 `7 7` 7`
1 ( ""2 "1 `' ` ' '` '` ` ' `'
" 9 " 2 "; 1
`` 7 ` `7 ``7 ` 7` `7` 7``
( ""2 "1 '`` `'` ` '` ``' ` `' `` '
% 1

& 1 14
& & & "
`
5 *
& 7
& ` ``

& ` 1 7 7` 14
1 ` 1 ` `` 1
(
"
' ` ` 7
7
*
` `
` `

& ` ` 1 7 7` 14
' ' 1 ' `' 1
1
5
"
5 *
`` `` ` `7 7
7 7` ' '` '
+
(

" " & " "" " " "


' ? & . " & " " "" 3 @ " &" / " " "?
/ " +"9G; " . @" & && ? " & " 2
" 2 " "9 2 ;

14 7 7 7`
$ " " 1 1 ? " " ` " ` " `` '
7
. ". " " `" " ? . .
& "" " . " 4 @ " " "
' " "? " "" . " "" +"? +" " ""2 "
. " " & F* " " 2" ? " " "
7b b
. " " 1 `U 6 " U
" " 2
7 7b
" " 1 ` " `U " " " " " "
7
" " 3 ' & . ` "" 4 "
"
< "" 1 ' 6'

'

5 ( 0

6 5

' (

a " " " ' 6' $ "


" " ? " && " && " " ""2 " $ 1
' '
2"
` 6' `6'

E "3 " + " " ? ?


2 " E "+ . "
Y E "+ . " - . "
" ". "- 9 "1 " " > & " . ". " >;

Das könnte Ihnen auch gefallen