Complexité Techniques de calcul et de réduction Unité : IN311 version β Lilian BUZER année 2003-2004 Table des matières ! "" $ %& ' "" " # # # ( ( ( , , , , 0 0 0 0 5 "" " "" " ) " "" " *+ " %& " "" " " . " / . # % "" " ( " ( "1 . . "& "" " ( " 2 "3 4 ( * " " ( "" (# ' " 2 , ' " " , ' " "" " , " , " "3 " , " 2 " " "&" 0 0 0 . 6 7 " . " % " 9 : . ; < & " 9) = ; < " " 9 "" ; " "9 "; ) " 6 " " . 9; "" & 3 " 3 && $ " 2 " ""2 " %& "" " 2+ "9 > " # ( ' "" " " " 9 " " # # # ( 8 8 8 5 5 # # ( ; "" " "; 1 3" & 3 4 ( , , A Introduction au calcul de complexité 1- La notion de coût d'exécution " 2+ ? . " && " "? " . " " " " . " " " "" 3 " 2" " " + " 22 && 3 " "" 3 " & 3 " " && ? & 2 . " " " $ 2+ 1$ B " " " " " A "" " 2 " " " " "" . * " & ") "/ " " @3 " "" " " "3 " " 3 " " " + "" " " " . " " - "" "$ ". " ' " + " " - " " " A 3 " +" " 3 " & . " " " "" "3 " . " A "" " " " " " "" " " " " " " " " " 3 . & ". . "" " " = . > " " 2 & " C A "" " " " " " "" "" " ". A "" " "3 " " " "1 $ 2+ ' " " E " 2 F * 1 "2 2 " & "@ && " 2D @ 2D ? " " " 3 " " " "" " "2 " " . " + "2 " " "" "1 2- La méthode d'évaluation 2.1- Exemple $ " "1 & " " " " " 2 " " "3 ) 9 G<? ; H I<J5KL & 9 I L M L NN; &9<J KM ; I<J KL L O " " & " " && "% " "? "" 3 & " " " ' " + " " * @ " . 1 3 "" " . 3 ". " ". " 2 " && " " 2 " " " 2 " " " + " " " ? " . " " && " - " " . 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 = " " ". ". " " " && " ? ? = "2 " "" " " " "" " 0 "" 3 "" " && 5 P5 P5 5 P5 P5 ∞ P5 ∞ ∞ P " ∞ ∞ ∞ ∞ ∞ 58 5 " 9& " "? " "2 " 1 P5; % " " "? "" ? / " 9∞). B . ". . "3 && " "" " " C " + 2 9 "" " "3 " . " > "" 3 "/ " " ". " " "? " ". . ,8 ". 5 && " % ? / 3 % ? ". " & @ " " & " " ; 58 & ? . " -A . 3 ". " 8 " "1 P5 ( " A 5 5 " ( . " ". " " " "" ? ? . " 3.2- Définition de la classe de complexité %& B & 1 ! " ! 1 " " "1 " ? * && ? . 1 & & " . ' " " & " & & . "& . 2 " ? "3 . 1 " " && ? . ! $ " && / . 3 &" & ""2 2 " " " & "" ". " " " " ! . " "" " "" 2 & 1 "" " * . * " . 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 " 2 "" " - 1 $ 1 5 5 5 ) " 5 5 5 >. 1 " " @ " . ? $ " " 5# "2 " " C @ "" ? " && "& " " " -A " & . 2 . " $ @ "" " - A "1 & 1 5# # 5# 5# # # # # # 4.4- Intérêt pratique ' = > " " # &1 ( , "" *" 1 # ( , 5# 5# 5- D'autres estimations "- " . ? 1 ". " 3 " ""2 9 " "" 3 " ; = 9 " /; " . " "" "% + " " " " 1 9 " && . " " " 9 " && . " " " " " " " " " " ; ; ' / 1 " 2 && " ". " . " " "" " " / " "$ " * . 1 &" " 3 " . . 2+ " 2+ 2+ " ". " " 2+ " " " "& " " 3 " 6- Exemples de calcul de complexité 6.1- Exercices : quelques fonctions standards * * * ) < Q" * * . . " " "&1 &1 1 1 " 1 "" "1 2 "R " " 2 "R " " * . 1 " && " + " &" 3 " "1 "1 " " + "" " ? & & 32 " " & " " 6.2- Les incontournables à connaître * ) ? < Q" . ? "" " 6.3- Recherche des premiers = ""2 "1 ! ! " " "? 4 " "@ " && " " "$ " & "1 "1 " "" " > " "<% " $ 2+ 1 . * "1" " " S " & " " " & " + 1. & " " 5T " ! " 2 " + "" / " " F "" "" " ". @ "F "F "0+ " & 6.4- Le calcul de l'épaisseur verticale maximale " " "" " " " 2 " / "" " " " " 3 3 "" ;? & " 2 " 2@ " " / "" " "" " & $ " 9" &; " "3 / . " " " " 9" " " # " . ". "" B & " ' % "9$ ?= ; ' & " " 2 " 3 " " " " 2 " && "? " "2 " " 2 & C " "" 2 " ? 1 2 " & 1 !9 V; " 2 "3 & & " " + & . " $ " "" " 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 " 1 ? 2 . 2+ " " " . " " " " " . 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 & 6 " 3 " " . " " / & . ? . " " "& & "" 2 2 & "? & &" & = 3 " "" $ 2" "" ? " "" " "" 3 3 2" "" $ " && & "" + " "" " & " 2 " " " 1 ) "? " 3 ) . !9 ; " . . &" " 2 & " " " W " "" " " " " . " 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 ) &3 2 & . &" " & 6.5- Calcul de l'enveloppe convexe d'un ensemble de points 1 " " " " " " " " "" 2 " 2 $ " " " + "9 "; " "" 2 " 2" "" " 1 " " " "" 5 $" " " + "" " " = " + "& "& ?& " " + " < . " + " " " 2 ? " 3 " 2 2 " " " " & " . " + " + " 1 2 &2 1 2+ * " " " & . 1 " " ""2 . " + 3 1 ) " . ' 9. " " "" " " " " . " && ? " " + " " $ " 2 " && " ""2 "; . " +" 2 !? & " - " " 2 2 3 " " 9 " ) Y ; ". . " " ". & 4 1 & 2 " " " && " . 2 " 1 " " . " & 2 " + " $ " 1 " " " " ". && 2 " . " / ? " " " $ " ? ? 96 & D " "& " " ; "3 ' & " " " " " " " " 1 ' ? ". " " ; 9" ? $ ? " " "> ) . & . 7- Calculs de complexité avancés 7.1- Comparaison de classes 7.2- avec décimation " "3 "" . " & " ' " "2 " " 1 5 " 5 " ?" " 5 ' " "2 " " 5 5 " 5 " " . 5 " " 1 2 " 1 ' " 5 5 5 5 5 ' " 5 5 " " 5 . 5 " 7.3- Les erreurs à ne pas commettre * . 1 " 1 & && ? "& "" && " " 3 " " 1 " 5 ? " " " " " 5 " " " "& ? " "" 2" * " . * X? X? X0 ' " @" ? " . "& 2 . +" " " ' 2 "/ " " & 1 " / " " & " " " " + 9 ; & "? & & ". "? " . 2 & & " ? "? " +"2 . )/ " & " " 9; " " " ? + ? "? " . + 7.4- Etude des doubles appels récursifs " " . " 1 ' " $ " I0 0 0 0 5 = @ & "? " " 5 " "" "" "" " " 2 " 3 1 5 5 5 8- La complexité mémoire 8.1- Introduction " " " + " " 3 * . 1 2 "$ " " 2 " && ?" " " 2 " " " " ' " " !9 ; " "" . && ? " "" " 2 "? "" " Y 2 " " & & " !9 " ; " " 2+ . ? " " " 8.2- Attaque de l'algorithme El-Gamal " 6 " & " " " " " "" " " ? - " ". " 1 " " . "& " "" && ? " & . " " " "" " && "" " " " " " " " " " " " 3 "+ " " " " " & 1 0 # 8 " " " ( # 5 2@ " " " ' ( , 0 5 8 , " " 8 0 , " & 1 % "" ""2 " = " " 2 " " " !9 ; 9 " ; = @". 3 ' $ " &" 0 2 "? " "" "" " 5[8 "? " " " " " " " " " "' " " 1 !9 ;? 0 ? 50 = " " " 1 !9 ;? " " "!9 ; ? 5[ % " " " " 1 Q 1 1 1 1 "" " 1 - % Y "" " " = " "" 1 " ". " " "2 " +"3 " " & + " Y" " &" " "" ! " " + "3 " & " . " " " " 3 1 !9 ; ' && ? "" 2" 1 2 && ? ? + - " . " ". " " "" " " " ". " ? & +" & " " " " " 2" + B % " " ' 9 " " " " " !9 ;; "? " " "" = "] = " " C I8, " " " " . " " " 2 " ! " ! 1 " " "! " & "1 5 "! " ! ? " "" = . "" " " " 5 " " " " " ; "9 5 " % " 1 " ! 1 5 " 1 " ! "1 ' 1 1 ' " 1 ' . &" ( 2 "? " " 888? ". " " . " . " &" & S " " 2 " " " 1 S "" "" 1 . ( ! ?0 5 & W" " " ? & / " " "92 . " ; . 2" . &" $ " 8 ? 5 "2 " 02" " " 888 " = F $ ; ' " . . 2 \7 2-" "? 6 2 -" ! "" && 6 < 6 * ' + " ! $' "3 1 $ > 6 < 6 * ' "? " "" "" Y" )" " " 2 2 "! 1 " ! 1 " 5 1 " ! "1 1 1 " I 2? " "9 " > 2 "; 2 2- " "9 " " "1 Y". " " = " ". " " && " " . " -A 2 . ?" " " " 1 "3 "" ? " +" " " " = Y"" " " " " " 2 " 2 " " 31 ? " " B Les techniques de réduction " . " " " ". "" / " "" . "1 " " "? . " " " . "' " "" " " " "? " . ? " . " " . "" " " " "3 " 3 " " " " " " " " " "1 " ? . " " " " 1- Diviser pour régner (divide & conquer) " " % *" ' " % " 2+ . " " 2+ " 3 " . " " "' " " #5555 55555 2+ " " 2+ "9 9 . ; "" " "" " & " " && " " "1 ; 2+ "9 2 ; +2 " / . . " . .+ . . 3 & . "2 "" "& && " " " 2+ 1.1" " " ' . " 9 . ; ) H " " " " "" " " = 9 G<? . 2 "3 "" ". . " " " " = ; $ "" & " 9) "9 ;? " ". 9 2 ; " " " ? ; &9 II ; L I XL ) = 9<? ;L ) = 9:<J K? ;L G% I D J KL Q " 9<? ?:<J K? ?%;L * 9<?%? ;L JK%L X X X X X X . 2 X X& " " 2 O = <9 ; . " "" " "" " 2 " ' & "2 "" 3 " " + " . &" " " - 1 3 ". " ' " . @3 " " 1 ? " "" ". " 2+ 1.2" " " 3 "" " . % & ? " 2+ + "" && ? . "2 " "" : " " +" && ' & "? " """ " ?. " " 2 "? ". " & " ". " " "= " " & "? " " & " " ' ? " " " " " # " ' " " " " "" " & $ ?. " " 2 " "1 ) H = 9 G<? " . " / " " " " " " " " " 2 " & + " " " " ; ? "? &9 MI ; L I) 9<? ? ?";L = 9<? ? ?"? ;L <J N KI L ) = 9<? ;L ) = 9:<JYN K?"; XX 2 " & XX% XX' 9N"I "9 " " "; ; . O ' 2 &" . " 2 " " $ . ;? & ' 9. " "3 && ? && - . "& +2 . . " 2 " && " 1) >. " 2" . 3 / + 2" " 3 & " "" " " S "" " S " - Y= / Y= ' "9 & " " ". . " " " " " " - ' ;? +" " " " 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" "" " " " & " "" " & " "1 " ( & " ? "" " " " " A && " " )( & . " " ) " ( " )( " " "1 " " + " '$9 ' & ; H "9 M ; " 9 II ; I XL &( $ & ' &) $ & ' " ( I '$9 ' 5 ' ' " ) I'$9 ' " "( ") & ' ( $ & ' ) $ " " )( ( ) " " " O " "&" $ " 3 " " "( ") " " . " ""& ? +" : ? " " 2" "" " "" " " " " 2 " 2+ " ") " 3 "" " " & " & 5? & XX !9 ; * * &( ; &) XX . XX 2 ; * " ' * * ' * " " " " " " &( 3 ' " " " " . " && " 2 ? " "" " . ""2 "? " " " " . " " " 2 "" ( ) && ? " " " " 2 ?. . " " " ? " & " " ". " " / " "" 2 "1 ( ) " " )( & "" " " " . & " & " " ? " $ ". ? " " "" " " ' . ? "" 2 "2 "" 3 &) & " " " " " && & " ( "( ") " " ' " " 3 " "" " 1 " " )( H @I5 ( 2 "1 " )( $ ) & ( " " " " " " && "2 "" " && "" ) "? " ) "" " " + " + & " " 5 3 . 9 ) % + I@ + . ) ( + " ; @NNL ( ( + " ) ( NNL O "" 3 " " " ( " . " " " ) . && " " "" " "" " " 3 " $ " " " % " " "" "? " " "" & 3 ' 2 . " @". 3 " + " . " " " + && ? " " " ) " "" " " ? % " +" & " $ 2" ? " " "? & ) " " & 3 " . ". ? + 2 2. "2 ( ( & " $ . 3 " " & "" " ( " ( ) % " ) " " ? + " ? " " " 2 " ( " " " " " "1 " ? " ". ( " ') " / " 2- Approches gloutonnes (greedy methods) " & ". + +" && " " " " 3 ". " "" " " " " &"" " / " " " "3 2.1- Monsieur Grenouille est amoureux 2+ 1 ) " 6 " "" "" > "" " & @". 3 3) " 6 " $ " " ". @ " " "> 2 . " . " ") " ? " @ "" 6 % = " @ " / " 2 "2 ' " " . "" " " " "" " " "" . " " "" " " " ? % " " % " ) = 2 " 6 " "> " " . . . ") " " " 1 9G; 6 " " " . " = 1 " ?" ". " && 3 ) " 6 " 3 . &" " " @ " " " " " % " " " = / @ "" ' \ 1 "" " &. " " " " "] "& " " " " 2 " "" " "" " 2" " 3 " "" - > " " ". = " " " "? . " " ' " $ . . "& " " ". " " " & +", ' 9G; & . ) , " $, . 2 " 2 " 6 1 2 2 Z" . 1 " " """ " . ? "" " "3 " " " ) " 6 ' & " & 2 " 9) " : 9" & "& + "? " "? 2 ;? " "" " " "3 % / & - + - ; " C " / " @ " "" " ". " " " && & " " - " "3 2.2- Le sélecteur d'activité E " " 2 "? " " " " " " "" " "? . / && " ' " "> ". 9 " " " " "" && = @I $ && " "? " " "" " J 1 J. 2 " "; "_ "E 2 . " " " .3 " " " _ " / "" " "" " " & 1 H O I 3 " " % $ $ #H O @I "" " W +" & % " + _ _ " & "" " " " + _ "A 1 " && . + _ "_ " " " " " " & "" "A "3 9 " " " $ 2" ? " " ". " $./ % 0 "" "' " " _ ? ". " 2 _ "$ _ ? " 2 " " _ ' 3 " " = " " "" ; "_ "@?Y? " - " "? _ + _ + _ $ "" ? _ & "? " "2 ? - " 2 +" 3- La programmation dynamique (dynamic programming) ) " 2 2+ & 3& " " " & 1 " " " " "1 4 " " 4 " "2 " + ". " " " " " " " " "- 2 " " " 2 " 3 "3 % " % " && & 2 = " ? & 1 ) 1 1 "1 )" . "1 1 6 ` 1 1 1 1 + ? " "1 - &2 . & "? " ""2 " " . . " "" " " " "" " " ( " "" ? " " " 2 " " ""2 " $ 2" 2+ 2 " "1 & 3 " 3 && " 2 " ""2 " "" " 2+ "9 >. " " " 9 " $ %& # ( ' " "" " " ; "" " "; 3.1- Expression de la fonction à évaluer = #2 2 " " " " " 2 "# 1 ` 1 $ # 23 1 23 1 $ $ "3 " " " 1 ` $ 1 ` $ 4 ` 4 4 $ $ , 1 " #2 2 " " #2 2 1 1 " " ` 4 " " " #2 2 " * * ? " * + " * ` 3.2- Ecriture de l'optimisation à effectuer " ? " 2 " "" " # 9 ; 9 ; " #2 2 " # #2 "1 2 3.3- Partitionnement de l'ensemble des possibles " . & 2 2+ " " " " " "& "" "& "" "& "" 2+ "" " 2+ " " "1 * * ` * * ` 1 1 1 " * * " 2 " 2 " 2 "" "" "" "2 " U ` # ` * # " 2 2 2" 2" & ` * 1 * * ? U ` % & ? * * % ` * U ` % & 3.4- Définition des sous-problèmes (prouvez la préservation de l'optimum) " # #2 2 #2 2 #2 * * 2 # " #2 2 * * #2 2 U ` # # 2 # #2 #2 " #2 2 * * " #2 2 * * 2 * * 2 * * # # #2 2 #2 2 + " " " <J ?@K1 ) " % + " 9G; #2 2 " ` * # #2 # " # " 2 #2 2 #2 2 #2 2 " " #2 2 #2 2 ' " " "" " # #2 2 "" " "" ` * #2 2 ! #2 2 "# "# 2 + " & " 2 #2 U ` " " # " # " " + " " " " 2+ "1 " " " # " " . " " " "" " 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 " " ? " && ?5 "51 " & 9 & 9 + + 2 2 2" $ " & & " 5? % "51 % + 3 " " " " C / " 5 L 5 L L L " NN ; <J ?5KI "51 NN ; <J5?@KI "51 * . 1$ . " " "? 2 " " * " 2 "" * & " " 3 " + " " " "# & > " 3 " " " "# ? % "5 "5 % 3 " & / + = " ". " & "" "<J ?@K % ? . " L 2 3 + 1 " " " " "" 3 " 3 . " 1= " " F* "1 ". "; " " 1 1 4 1 ` 4 / ' 7 " 1 ` 7? 1 " 4 4 % " " * . 1 S " " " && " & " < @ " +"9G; " 4 " " " & % " "& . " " 2" "? " " " . . " Y "<J ?@K . + " 4 1 &9 L L NN; &9 % L % L @ NN ; H &9 # II % ; " " # ?% " <J KJ@KI O * " " " ? "1 " " "" % " " ' "F ?" 3 / 9 - 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 `7 ' ` 7 `' 7 '` `7 ` ' 2" " 2 ` ' `7 '` ` 7 '`` `7 '` a & ". "1 9 1 ""2 ( " ( "1 9 ""2 ``7 '` ` `7 `'` " " 7` ' `7 `'` `` 7 '`` ?. " # ` " 7 `` ` 7 '` ` * 7 ` 7 `' " 2 #2 " " 2 #2 3 7 ' 7 ' 2 #2 2 #2 2 7` ` ' `7 ` ' "1 `` 7 '`` " ` 7 '` 7` `' `7` `' 7` ``' ``7 ` '` ` 7` ``' `7` ` `' 1 7 ' " ""2 2 "; 1 ` 7 `' `` ' 7` `' `7 '` 7` ` ' 7` `' 2 "; 1 ` `7 `'` ``7 ` '` ` 7` ``' `7` ` `' 7`` `` ' 7`` ` ' 7`` `` ' % 1 7 & & 1 & 14 & " ` * 5 & & 7 `` ` ` & 1 1 1 ` 14 1 7` `` 7 ` ( ' ` 7 ` ` ` ` ' ` & 1 ' 7 ` 7 ' 1 1 " * ` 7` `' 14 1 5 " * + 5 `` 7 `` 7` ` ' `7 '` 7 ' ( " ' ? / " " 2 $ " & . +"9G; " "9 " . ". & ' . . " 2 . 14 1 " 1 ? " 1 1 3 "" " " " " "" 3 @ " @" & && ? " ; " " " "" " " "? " "" " " " " & " " " " " & 7 ` " " &" / & 7 " " " . " 4 @ " " . " "" +"? +" " & F* " " 7b `U 7 ` 6 " ' b U " 7b `U " " " & . " 7 ` 7` `` " ` 7 ` " " "? " 2 ? . . " " ""2 " 2" ? " " " " 2 " "" ' 4 " " " < "" 1 ' 6' ' 5 ( 0 # 6 5 ' ( a " " " " ? " && ' ` 6' E "3 " " && ' `6' 2 ". "- " " 9 "1 " E "+ . " " > & 6' $ " ""2 " $ " 1 2" " + " Y " ' " ? E "+ . . " " . ". " ? " >;