complexité des algorithmes - algorithmique 1 - 2019-2020algorithmique 1 programme: i...

48
Complexité des algorithmes Algorithmique 1 - 2019-2020 Stéphane Grandcolas Aix-Marseille Université Contact : [email protected]

Upload: others

Post on 16-Jun-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Complexité des algorithmesAlgorithmique 1 - 2019-2020

Stéphane Grandcolas

Aix-Marseille Université

Contact : [email protected]

Page 2: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Algorithmique 1

Objectifs :

I introduire les structures de données et les techniques deconception de base de l’algorithmique,

I étudier les outils d’analyse et de preuve de correction desalgorithmes.

Modalités de contrôle :session 1 : NF = 0, 8× ET + 0, 2× CC

session 2 : NF = ET

Contrôle continu : quatre TP évalués.

Page 3: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Algorithmique 1

Programme :

I algorithmes : complexité, tris,I structures de données : arbres, tas, dictionnaires,I méthodes : backtracking, programmation dynamique,I graphes : plus courts chemins, arbres couvrants.

Livre de référence : Introduction à l’algorithmique, Thomas H. Cormen, Charles E.

Leiserson, Ronald L. Rivest, Clifford Stein.

Page 4: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Algorithmes et structures de données

P : un problème

M : une méthode pour résoudre le problème P

Algorithme : description de la méthode M dans unlangage algorithmique

du nom du mathématicien perse Al Khuwarizmi (780 - 850)

Structure de données : manière d’organiser et de stockerles données (supposée rendre efficace certaines opérations)

Page 5: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Algorithmes et structures de données

P : un problème

M : une méthode pour résoudre le problème P

Algorithme : description de la méthode M dans unlangage algorithmique

du nom du mathématicien perse Al Khuwarizmi (780 - 850)

Structure de données : manière d’organiser et de stockerles données (supposée rendre efficace certaines opérations)

Page 6: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Structures algorithmiques

Structures de contrôleI séquenceI embranchement (ou sélection)I boucle (ou itération)

Structures de données : supportsI constantes, variablesI tableauxI structures récursives (listes, arbres, graphes)

Page 7: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Complexité des algorithmes

On veut

I Evaluer l’efficacité de la méthodeMI ComparerM avec une autre méthodeM′

indépendamment de l’environnement (machine, système,compilateur, . . . )

Page 8: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Complexité des algorithmes

Evaluation du nombre d’opérations élémentaires en fonctionI de la taille des données (par ex. le nombre d’éléments à trier)

I de la nature des données (provoquant par ex. la sortie d’uneboucle)

Notations :I n : taille des données,I T (n) : nombre d’opérations élémentaires

Configurations caractéristiques :I meilleur cas,I pire des cas,I cas moyen.

Page 9: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Evaluation de T (n) (séquence)

Somme des coûts.

Traitement1 T1(n)

Traitement2 T2(n)

T (n) = T1(n) + T2(n)

Page 10: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Evaluation de T (n) (embranchement)

Max des coûts.

si < condition > alors Tc(n)Traitement1 T1(n)

sinonTraitement2 T2(n)

Tc(n) + max(T1(n),T2(n))

Page 11: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Evaluation de T (n) (boucle)

Somme des coûts des passages successifs

tant que < condition > faire Ci (n)Traitement Ti (n)

fin faire

k∑

i=1

(Ci (n) + Ti (n)) + Ck+1(n)

Ti(n) : coût de la i „eme itération

souvent défini par une équation récursive

Page 12: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Evaluation de T (n) (fonctions récursives : exemple)

fonction FUNCTIONRECURSIVE (n)

1 si (n > 1) alors2 FUNCTIONRECURSIVE(n/2), coût T (n/2)3 Traitement(n), coût C (n)4 FUNCTIONRECURSIVE(n/2), coût T (n/2)

Equation récursive

T (n) = 1 + 2× T (n/2) + C (n)

si C (n) = 1 alors T (n) = K × nsi C (n) = n alors T (n) = K × n × log n. . .

Page 13: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Notation de Landau O(f (n))

nn0

c × f (n)

T (n) = O(f (n))

Caractérise le comportement asymptotique (i.e. qd n→∞).

T (n) = O(f (n)) si ∃c ∃n0 tels que ∀n > n0, T (n) ≤ c × f (n)

Page 14: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Notation Θ(f (n))

n0

T (n)

c1 × f (n)

c2 × f (n)

n

T (n) = Θ(f (n)) si ∃c1, c2, n0 tels que

∀n > n0, c1 × f (n) ≤ T (n) ≤ c2 × f (n)

Page 15: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Exemples

T (n) = n3 + 2 n2 + 4 n + 2 = O(n3)

(si n ≥ 1 alors T (n) ≤ 9× n3)

T (n) = n log n + 12 n + 2 = O(n log n)

T (n) = 2 n10 + n7 + 12 n4 +2n

100= O(2n)

Page 16: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Exemples

T (n) = n3 + 2 n2 + 4 n + 2 = O(n3)

(si n ≥ 1 alors T (n) ≤ 9× n3)

T (n) = n log n + 12 n + 2 = O(n log n)

T (n) = 2 n10 + n7 + 12 n4 +2n

100= O(2n)

Page 17: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Exemples

T (n) = n3 + 2 n2 + 4 n + 2 = O(n3)

(si n ≥ 1 alors T (n) ≤ 9× n3)

T (n) = n log n + 12 n + 2 = O(n log n)

T (n) = 2 n10 + n7 + 12 n4 +2n

100= O(2n)

Page 18: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Les principales classes de complexité

O(1) temps constant

O(log n) logarithmique

O(n) linéaire

O(n × log n) tris par comparaisons optimaux

O(n2) quadratique, polynomial

O(n3) cubique, polynomial

O(2n) exponentiel (problèmes très difficiles)

Page 19: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Exemple : permutation dans un tableau

fonction PERMUTATION (S , i , j)

1 tmp := S [i ], coût c12 S [i ] := S [j ], coût c23 S [j ] := tmp, coût c34 renvoyer S coût c4

Coût total

T (n) = c1 + c2 + c3 + c4 = O(1)

Page 20: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Exemple : recherche séquentielle

fonction RECHERCHE_SEQUENTIELLE(x , S [1, . . . , n])

1 i := 1, (c1)2 tant que ((i < n) et (S [i ] 6= x)) faire (c2)3 i := i + 1, (c3)4 renvoyer (S [i ] = x) (c4)

Pire des cas : n fois la boucle

T (n) = c1 + c2 +∑n

i=1(c3 + c2) + c4 = O(n)

Page 21: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Exemple : tri à bulle

fonction TRI_A_BULLES (S [1, . . . , n])

1 pour i := n à 2 faire2 pour j := 1 à i − 1 faire3 si (S [j ] > S [j + 1]) alors i − 1 fois4 PERMUTER(S , j , j + 1), Cperm

T (n) = (1 + Cperm)×n−1∑i=1

i = (1 + Cperm)× n × (n − 1)

2= O(n2)

Page 22: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Equations récursives

Boucles itératives, fonctions récursives, approches de typediviser pour régner

Cas général

T (n) = a × T (n/b) + f (n)

I méthode par substitution,I méthode par développement itératif,I méthode générale.

Page 23: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode par substitution

Principe : on vérifie une intuition

T (n) = a × T (n/b) + f (n) et T (1) = c

IntuitionT (n) = O(g(n))

A démontrer en fixant les constantes

Page 24: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode par substitution [recherche dichotomique]

fonction RECHERCHE_DICHOTOMIQUE (x , S [1, . . . , n])

1 g := 0, d := n + 1, g < position ≤ d

2 tant que (g < d − 1) faire termine quand g = d − 1

3 si (x > S [(g + d)/2]) alors g < (g + d)/2 < d

4 g := (g + d)/2, et donc g < position ≤ d

5 sinon6 d := (g + d)/2, et donc g < position ≤ d

7 renvoyer d , g < position ≤ d et g = d − 1

position : la position de x s’il apparaît dans S [], la position àlaquelle il faudrait l’insérer sinon

Page 25: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode par substitution [recherche dichotomique]

fonction RECHERCHE_DICHOTOMIQUE (x , S [1, . . . , n])

1 g := 0, d := n + 1, g < position ≤ d

2 tant que (g < d − 1) faire termine quand g = d − 1

3 si (x > S [(g + d)/2]) alors g < (g + d)/2 < d

4 g := (g + d)/2, et donc g < position ≤ d

5 sinon6 d := (g + d)/2, et donc g < position ≤ d

7 renvoyer d , g < position ≤ d et g = d − 1

Nombre d’itérations : T (n) = 1 + T (dn/2e)

Page 26: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode par substitution [recherche dichotomique]

Nombre d’itérations

T (n) = 1 + T (n/2) et T (1) = 1

I T (1) = 1 car s’il y a un seul élément on fera une itération

I T (dn/2e) = T (n/2)(pour simplifier on considère que n est de la forme 2k)

Page 27: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode par substitution [recherche dichotomique]

T (n) = 1 + T (n/2) et T (1) = 1

Intuition T (n) = O(log2 n)

Hypothèse T (n) = k1 × log2 n + k2

donc T (n/2) = k1 × log2 n − k1 + k2

donc T (n) = 1 + T (n/2) = 1 + k1 × log2 n − k1 + k2

donc 1− k1 + k2 = k2 et donc k1 = 1,enfin, puisque T (1) = 1, on a k2 = 1

Conclusion T (n) = log2 n + 1 = O(log2 n) (Θ(log2 n))

Page 28: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode par substitution [recherche dichotomique]

T (n) = 1 + T (n/2) et T (1) = 1

Intuition T (n) = O(log2 n)

Hypothèse T (n) = k1 × log2 n + k2

donc T (n/2) = k1 × log2 n − k1 + k2

donc T (n) = 1 + T (n/2) = 1 + k1 × log2 n − k1 + k2

donc 1− k1 + k2 = k2 et donc k1 = 1,enfin, puisque T (1) = 1, on a k2 = 1

Conclusion T (n) = log2 n + 1 = O(log2 n) (Θ(log2 n))

Page 29: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode par substitution [recherche dichotomique]

T (n) = 1 + T (n/2) et T (1) = 1

Intuition T (n) = O(log2 n)

Hypothèse T (n) = k1 × log2 n + k2

donc T (n/2) = k1 × log2 n − k1 + k2

donc T (n) = 1 + T (n/2) = 1 + k1 × log2 n − k1 + k2

donc 1− k1 + k2 = k2 et donc k1 = 1,enfin, puisque T (1) = 1, on a k2 = 1

Conclusion T (n) = log2 n + 1 = O(log2 n) (Θ(log2 n))

Page 30: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode par substitution [recherche dichotomique]

T (n) = 1 + T (n/2) et T (1) = 1

Intuition T (n) = O(log2 n)

Hypothèse T (n) = k1 × log2 n + k2

donc T (n/2) = k1 × log2 n − k1 + k2

donc T (n) = 1 + T (n/2) = 1 + k1 × log2 n − k1 + k2

donc 1− k1 + k2 = k2 et donc k1 = 1,enfin, puisque T (1) = 1, on a k2 = 1

Conclusion T (n) = log2 n + 1 = O(log2 n) (Θ(log2 n))

Page 31: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode itérative : rappel sommations

I∑n−1

i=1 i = n×(n−1)2 = Θ(n2) = O(n2)

I∑n

i=0 xi = xn+1−1

x−1

en particulier quand x vaut 2∑ni=0 2

i = 2n+1 − 1

Page 32: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Tri par fusion

I diviser pour régnerI décompositionI fusion

décompositions

9 1 5 7

1 7

2 3 9 5 1 7

9 5

5 9 1 7

2 3 4 6 1 5 7 9

1 2 3 4 5 6 7 9

fusions

2 6 3 4

46

6 2 4 3

6 4 2 3

6 9 4 1 2 5 3 7

Page 33: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Tri par fusion

fonction TRI_PAR_FUSION (S)

1 si (longueur(S) > 1) alors2 décomposer S −→ (S1, S2), (n)3 S1 := TRI_PAR_FUSION(S1), (T (dn/2e))4 S2 := TRI_PAR_FUSION(S2), (T (bn/2c))5 S := FUSIONNER(S1, S2), (n)

6 renvoyer S

T (n) = 1 + n + T (dn/2e) + T (bn/2c) + n et T (1) = 1

Page 34: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Tri par fusion

fonction TRI_PAR_FUSION (S)

1 si (longueur(S) > 1) alors2 décomposer S −→ (S1, S2), (n)3 S1 := TRI_PAR_FUSION(S1), (T (dn/2e))4 S2 := TRI_PAR_FUSION(S2), (T (bn/2c))5 S := FUSIONNER(S1, S2), (n)

6 renvoyer S

T (n) = 2n + 1 + 2× T (n/2)

on suppose que n est de la forme 2k

Page 35: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode itérative [tri par fusion]

T (n) = 2n + 1 + 2× T (n/2)

donc T (n/2) = n + 1 + 2× T (n/4)

= (2n + 1) + (2n + 2) + 4× T (n/4)or T (n/4) = n/2 + 1 + 2× T (n/8)

= (2n + 1) + (2n + 2) + (2n + 4) + 8× T (n/8)

...

T (n) =∑log n−1

i=0 (2n + 2i) + 2log n × T (1)

= 2n log n +∑log n−1

i=0 2i + n

or∑log n−1

i=0 2i = 2log n − 1 = n − 1

= 2n log n + 2n − 1 = Θ(n log n)

Page 36: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode itérative [tri par fusion]

T (n) = 2n + 1 + 2× T (n/2)donc T (n/2) = n + 1 + 2× T (n/4)

= (2n + 1) + (2n + 2) + 4× T (n/4)or T (n/4) = n/2 + 1 + 2× T (n/8)

= (2n + 1) + (2n + 2) + (2n + 4) + 8× T (n/8)

...

T (n) =∑log n−1

i=0 (2n + 2i) + 2log n × T (1)

= 2n log n +∑log n−1

i=0 2i + n

or∑log n−1

i=0 2i = 2log n − 1 = n − 1

= 2n log n + 2n − 1 = Θ(n log n)

Page 37: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode itérative [tri par fusion]

T (n) = 2n + 1 + 2× T (n/2)donc T (n/2) = n + 1 + 2× T (n/4)

= (2n + 1) + (2n + 2) + 4× T (n/4)

or T (n/4) = n/2 + 1 + 2× T (n/8)

= (2n + 1) + (2n + 2) + (2n + 4) + 8× T (n/8)

...

T (n) =∑log n−1

i=0 (2n + 2i) + 2log n × T (1)

= 2n log n +∑log n−1

i=0 2i + n

or∑log n−1

i=0 2i = 2log n − 1 = n − 1

= 2n log n + 2n − 1 = Θ(n log n)

Page 38: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode itérative [tri par fusion]

T (n) = 2n + 1 + 2× T (n/2)donc T (n/2) = n + 1 + 2× T (n/4)

= (2n + 1) + (2n + 2) + 4× T (n/4)or T (n/4) = n/2 + 1 + 2× T (n/8)

= (2n + 1) + (2n + 2) + (2n + 4) + 8× T (n/8)

...

T (n) =∑log n−1

i=0 (2n + 2i) + 2log n × T (1)

= 2n log n +∑log n−1

i=0 2i + n

or∑log n−1

i=0 2i = 2log n − 1 = n − 1

= 2n log n + 2n − 1 = Θ(n log n)

Page 39: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode itérative [tri par fusion]

T (n) = 2n + 1 + 2× T (n/2)donc T (n/2) = n + 1 + 2× T (n/4)

= (2n + 1) + (2n + 2) + 4× T (n/4)or T (n/4) = n/2 + 1 + 2× T (n/8)

= (2n + 1) + (2n + 2) + (2n + 4) + 8× T (n/8)

...

T (n) =∑log n−1

i=0 (2n + 2i) + 2log n × T (1)

= 2n log n +∑log n−1

i=0 2i + n

or∑log n−1

i=0 2i = 2log n − 1 = n − 1

= 2n log n + 2n − 1 = Θ(n log n)

Page 40: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode itérative [tri par fusion]

T (n) = 2n + 1 + 2× T (n/2)donc T (n/2) = n + 1 + 2× T (n/4)

= (2n + 1) + (2n + 2) + 4× T (n/4)or T (n/4) = n/2 + 1 + 2× T (n/8)

= (2n + 1) + (2n + 2) + (2n + 4) + 8× T (n/8)

...

T (n) =∑log n−1

i=0 (2n + 2i) + 2log n × T (1)

= 2n log n +∑log n−1

i=0 2i + n

or∑log n−1

i=0 2i = 2log n − 1 = n − 1

= 2n log n + 2n − 1 = Θ(n log n)

Page 41: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode itérative [tri par fusion]

T (n) = 2n + 1 + 2× T (n/2)donc T (n/2) = n + 1 + 2× T (n/4)

= (2n + 1) + (2n + 2) + 4× T (n/4)or T (n/4) = n/2 + 1 + 2× T (n/8)

= (2n + 1) + (2n + 2) + (2n + 4) + 8× T (n/8)

...

T (n) =∑log n−1

i=0 (2n + 2i) + 2log n × T (1)

= 2n log n +∑log n−1

i=0 2i + n

or∑log n−1

i=0 2i = 2log n − 1 = n − 1

= 2n log n + 2n − 1 = Θ(n log n)

Page 42: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode itérative [tri par fusion]

T (n) = 2n + 1 + 2× T (n/2)donc T (n/2) = n + 1 + 2× T (n/4)

= (2n + 1) + (2n + 2) + 4× T (n/4)or T (n/4) = n/2 + 1 + 2× T (n/8)

= (2n + 1) + (2n + 2) + (2n + 4) + 8× T (n/8)

...

T (n) =∑log n−1

i=0 (2n + 2i) + 2log n × T (1)

= 2n log n +∑log n−1

i=0 2i + n

or∑log n−1

i=0 2i = 2log n − 1 = n − 1

= 2n log n + 2n − 1 = Θ(n log n)

Page 43: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Tri par fusion

n/2 n/2

n/4n/4n/4n/4

n/8 n/8 n/8 n/8 n/8 n/8 n/8 n/8

1 1 1 ....

n

2× nhauteur dlog ne

2× n

2× n

décomposition ou fusion d’une suite de longueur n/k : coût O(n/k)

T (n) = 2× n × dlog2 ne

Page 44: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Master theorem [Equations récursives]

T (n) = a × T (n/b) + f (n)

avec a ≥ 1, b > 1 et f (n) est positive asymptotiquement.

I si ∃ε > 0, f (n) = O(nlogb a−ε) alors T (n) = Θ(nlogb a),

I si f (n) = Θ(nlogb a) alors T (n) = Θ(nlogb a × lg n),

I si ∃ε > 0, f (n) = Ω(nlogb a+ε) etsi ∃c < 1, ∃n0, ∀n > n0, a× f (n/b) ≤ c × f (n) alorsT (n) = Θ(f (n))

Tri par fusion (T (n) = 2× T (n/2) + 2n + 1) cas 2 :

a = b = 2 et f (n) = 2n + 1 = Θ(n)et donc T (n) = Θ(n log n)

Page 45: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Master theorem [Equations récursives]

T (n) = a × T (n/b) + f (n)

avec a ≥ 1, b > 1 et f (n) est positive asymptotiquement.

I si ∃ε > 0, f (n) = O(nlogb a−ε) alors T (n) = Θ(nlogb a),

I si f (n) = Θ(nlogb a) alors T (n) = Θ(nlogb a × lg n),

I si ∃ε > 0, f (n) = Ω(nlogb a+ε) etsi ∃c < 1, ∃n0, ∀n > n0, a× f (n/b) ≤ c × f (n) alorsT (n) = Θ(f (n))

Tri par fusion (T (n) = 2× T (n/2) + 2n + 1) cas 2 :

a = b = 2 et f (n) = 2n + 1 = Θ(n)et donc T (n) = Θ(n log n)

Page 46: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Méthode par substitution [tri par fusion]

T (n) = 2n + 1 + 2× T (n/2) et T (1) = 1

Hypothèse : T (n) = O(n log n) = an log n + bn + c

et donc T (n/2) = an/2 log n + (b − a)n/2+ c

T (n) = 2n + 1+ 2T (n/2) = 2n + 1+ an log n + (b − a)n + 2c= an log n + (b − a+ 2)n + 2c + 1

(1) b = b − a+ 2 et donc a = 2(2) c = 2c + 1 et donc c = −1(3) T (1) = b + c = 1 et donc b = 2

et finalement T (n) = 2n log n + 2n − 1 = O(n log n)

Page 47: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Temps de calcul [simulation]

Combien de temps pour traiter un problème ?

Taille log2 n n n log2 n n2 2n

10 0.003ms 0.01ms 0.03ms 0.1ms 1ms100 0.006ms 0.1ms 0.6ms 10ms 1014 siecles1000 0.01ms 1ms 10ms 1 s104 0.013ms 10ms 0.1 s 100 s105 0.016ms 100ms 1.6 s 3 heures106 0.02ms 1 s 20 s 10 jours

pour une machine qui effectue 106 traitements par seconde

Page 48: Complexité des algorithmes - Algorithmique 1 - 2019-2020Algorithmique 1 Programme: I algorithmes:complexité,tris, I structuresdedonnées:arbres,tas,dictionnaires, I méthodes:backtracking,programmationdynamique,

Temps de calcul [simulation]

Quel problème peut-on traiter en une seconde ?

nTs 2n n2 n log2 n n log2 n106 20 1000 63000 106 10300000

107 23 3162 600000 107 103000000

109 30 31000 4.107 109

1012 40 106 3.1010

nTs = nombre d’instructions effectuées chaque seconde