Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Algorithmique 1 - 2019-2020
Stéphane Grandcolas
Aix-Marseille Université
Contact : stephane.grandcolas@univ-amu.fr
Algorithmique 1
Objectifs :
I introduire les structures de données et les techniques de
conception de base de l’algorithmique,
I étudier les outils d’analyse et de preuve de correction des
algorithmes.
Modalités de contrôle :
session 1 : NF = 0, 8 × ET + 0, 2 × CC
session 2 : NF = ET
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.
P : un problème
P : un problème
Structures de contrôle
I séquence
I tableaux
On veut
I Evaluer l’efficacité de la méthode M
I Comparer M avec une autre méthode M0
Notations :
I n : taille des données,
Configurations caractéristiques :
I meilleur cas,
I cas moyen.
Evaluation de T (n) (séquence)
k
X
(Ci (n) + Ti (n)) + Ck+1 (n)
i=1
1 si (n > 1) alors
2 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
n0 n
T (n )
c2 × f (n)
n0 n
T (n) = n3 + 2 n2 + 4 n + 2 = O(n3 )
(si n ≥ 1 alors T (n) ≤ 9 × n3 )
Exemples
T (n) = n3 + 2 n2 + 4 n + 2 = O(n3 )
(si n ≥ 1 alors T (n) ≤ 9 × n3 )
T (n) = n3 + 2 n2 + 4 n + 2 = O(n3 )
(si n ≥ 1 alors T (n) ≤ 9 × n3 )
2n
T (n) = 2 n10 + n7 + 12 n4 + = O(2n )
100
Les principales classes de complexité
Coût total
T (n) = c1 + c2 + c3 + c4 = O(1)
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 )
1 pour i := n à 2 faire
2 pour j := 1 à i − 1 faire
3 si (S[j] > S[j + 1]) alors i − 1 fois
4 PERMUTER(S, j, j + 1), Cperm
n−1
X n × (n − 1)
T (n) = (1 + Cperm ) × i = (1 + Cperm ) × = O(n2 )
2
i=1
Equations récursives
Cas général
Intuition
T (n) = O(g (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 sinon
6 d := (g + d)/2, et donc g < position ≤ d
7 renvoyer d, g < position ≤ d et g = d − 1
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 sinon
6 d := (g + d)/2, et donc g < position ≤ d
7 renvoyer d, g < position ≤ d et g = d − 1
Nombre d’itérations
Pn−1 n×(n−1)
I
i=1 i= 2
= Θ(n2 ) = O(n2 )
x n+1 −1
Pn
I
i=0 xi = x−1
6 2 4 3 9 5 1 7
26 34 59 17
fusions 1579
2346
12345679
Tri par fusion
fonction TRI_PAR_FUSION (S)
T (n) = 2n + 1 + 2 × T (n/2)
T (n) = 2n + 1 + 2 × T (n/2)
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)
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)
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)
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)
...
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)
...
Plog n−1
T (n) = i=0 (2n + 2i ) + 2log n × T (1)
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)
...
Plog n−1
T (n) = i=0 (2n + 2i ) + 2log n × T (1)
P n−1 i
= 2n log n + logi=0 2 +n
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)
...
Plog n−1
T (n) = i=0 (2n + 2i ) + 2log n × T (1)
P n−1 i
= 2n log n + logi=0 2 +n
Plog n−1
or i=0 2i = 2log n − 1 = n − 1
hauteur dlog ne
n/4 n/4 n/4 n/4 2×n
1 1 1 ....
T (n) = 2 × n × dlog2 ne
Master theorem [Equations récursives]
(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