Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Complexité Algorithmique
Mail: jouini.mouna@yahoo.fr
1
A.U. 2020-2021
Plan du cours
Chap-1: Eléments de base de la complexité
algorithmique
2
Objectifs du cours
Maîtriser la démarche «diviser pour régner»
3
Chapitre 1 –Eléments de base de
la complexité
algorithméque
4
Introduction
Un algorithme = une suite ordonnée d'instruction
écrites pour la résolution d'un problème donné.
5
Introduction
Le choix d'une structure de données adéquate
dépend généralement du problème à résoudre.
Exemples :
Déterminer si oui ou non un nombre entier n est pair
est un problème de décision;
Efficacité de l’algorithme
◼ Temps d’exécution
◼ Quantité d’espace disque occupée par les variables
◼ Quantité de trafic généré sur un réseau
◼ Quantité de données déplacées sur le disque
9
Caractéristiques d’un algorithme
10
Résolution d’un problème
11
Décidabilité et indécidabilité (1)
Une propriété mathématique est dite décidable s'il
existe un procédé mécanique qui détermine, au bout
d'un temps fini, si elle est vraie ou fausse dans
n'importe quel contexte possible.
L'indécidabilité c'est l'impossibilité absolue et
définitivement démontrée de résoudre par un procédé
général de calcul un problème donné.
Dire que le problème est indécidable est plus fort que
dire que l'on ne sait pas résoudre le problème, ce qui
marquerait simplement notre ignorance.
12
Décidabilité et indécidabilité (2)
Notons que la notion de décidabilité doit être
rapprochée de celle de calculabilité.
Il suffit en effet de :
faire la division de m par n,
regarder le reste obtenu, r,
si r = 0 alors il est VRAI que "m est un multiple de n’’
sinon il est FAUX que "n est un multiple de m"
16
Exemple (3)
Problème A
C'est un procédé absolument sûr, qui fonctionne en un
temps fini pour tous les jeux de données possibles et
conduit toujours à la bonne réponse.
17
Exemple (4)
Problème B
Un problème indécidable de géométrie élémentaire.
Soient F1 F2 ... Fn une liste de formes polygonales.
Peut-on paver le plan, sans recouvrement ni espace vide
avec des exemplaires de F1 F2... Fn ?
Il a été démontré que ce problème est indécidable, il
n'existe aucun algorithme permettant par un calcul fini à
partir des données (la liste des formes géométriques)
d'établir si OUI ou NON il est possible de paver le plan
avec des exemplaires des formes géométriques
considérées. 18
Complexité
Maintenant que l’on sait ce qui peut être calculé il y a une
autre limite: l’espace et le temps.
Parmi les problèmes que l’on peut résoudre, il y a en a
certains qui sont plus faciles que d’autres:
Ex1: pour trier une liste, il y a des algorithmes en O(n
log n). C’est considéré comme un problème facile
(surtout avec les machines d’aujourd’hui).
Ex2: Pour résoudre le problème du voyageur de
commerce, on ne connait pas d’algorithmes non
exponentiels : il y a environ n! chemins possibles. Si n
= 15 alors 15! = 1307674368000 Donc il est très difficile.
19
Quelques paradigmes pour un algorithme
efficace
Un paradigme est une méthode générique qui
s'applique dans plusieurs situations algorithmiques.
L'induction: Ce paradigme donne lieu à des
processus itératifs.
Diviser pour régner: tous les algorithmes récursifs.
Trouver un ordre "optimal" sur les opérations à
effectuer
Exemples :
•les parcours en profondeur dans les graphes,
•les utilisations des ordres lexicographiques.
20
Quelques paradigmes pour un algorithme
efficace
Utiliser une structure de données ad hoc: pour
résoudre efficacement les opérations de base de
l'algorithme.
Exemples : arborescences binaires ordonnées de
recherche, arborescences bicolorées,…
23
Exemple : Calcul de la valeur d’un
polynôme
3ème variante : Schéma de Horner
P(x) = (….(((anx+an-1)x+an-2)x+an-3)…..)x+a0
début
P = an
Pour i de n-1 à 0 (pas = –1) faire
P = P*X + ai Coût de l’algorithme:
Fin pour Fin - n additions
- n multiplications
➔ Nécessité d’estimer le coût d’un
algorithme avant de l’écrire et l’implémenter
24
Chapitre 2 – Complexité et
optimalité
25
Plan
26
Introduction
La complexité algorithmique permet de mesurer les
performances d'un algorithme afin de le comparer avec
d'autres algorithmes résolvant le même problème.
28
Définition
◼ Critères d’évaluation d’un programme
◼ Est-ce que le programme satisfait les spécifications de
la tâche ?
◼ Est-ce qu’il fonctionne correctement ?
◼ Est-il bien documenté ?
◼ …
mémoire ?
◼ Est-ce que son temps d’exécution est acceptable?
30
Complexité temporelle et
spatiale
31
Complexité temporelle (1)
◼ La complexité temporelle d’un algorithme est la quantité
de temps nécessaire à son exécution complète
◼ Le temps d’exécution est proportionnel au nombre
d’opérations fondamentales effectuées par l’algorithme
◼ Opérations fondamentales : lecture, écriture, addition,
soustraction, comparaison, multiplication,…
◼ On supposera que chaque opération
fondamentale de l’algorithme prend un temps
unitaire (1)
32
Complexité temporelle (2)
x=0 ; (1 op affectation)
y=0 ; (1 op affectation)
x=x+1 ; (2 ops: 1 addition + 1 affectation)
z=x+y; (2 ops: 1 addition + 1 affection)
y=z; (1 op affectation)
Exemple
Dans cecas on va considérer que les opérations d’addition et
affectation sont fondamentales.
Donc comme opérations fondamentales, on a 7 opérations.
33
Complexité temporelle (2)
Exemple
35
Calcul du coût d’un
algorithme
36
Temps d’exécution (1)
▪ Le temps d’exécution d’un algorithme est en général
exprimé en fonction des données sur lesquelles il opère.
▪T(n) est le temps d’exécution exprimé en fonction des
données de taille n. C’est également le nombre
d’opérations élémentaires.
▪ Il faut donc définir une mesure de taille sur les données.
▪ Le temps d'exécution d'un programme dépend :
▪ du nombre de données,
✓de la taille du code,
✓du type d'ordinateur utilisé (processeur, mémoire),
37
Temps d’exécution (2)
Règles générales
41
Evaluation de la complexité (2)
◼ Schema decisionnel
◼ Boucle ou iteration
44
Schémas itératifs (1)
◼ Hypothèse: le traitement à l’intérieur de la boucle est
O(1)
◼ Si le nombre d’itérations est constant alors la
complexité est O(1)
◼ Exemple: Parcours d'un intervalle constant 1..5 alors la
complexité est O(1). Sinon si le nombre d’itérations est
fixée à N alors la complexité est O(N)
◼ Exemple:
Pour i = 1..N Faire
opérations en O(1) N opérations
45
FinFaire
Schémas itératifs (2)
◼ 2 boucles imbriquées (chacune à N itérations) avec des
instructions en O(1) : Complexité = O(N2)
◼ 3 boucles imbriquées (chacune à N itérations) avec des
instructions en O(1) : Complexité = O(N3)
◼ …
◼ M boucles imbriquées (chacune à N itérations) avec
des instructions en O(1) : Complexité = O(NM)
46
Schémas itératifs (3)
Exemple:
Pour i = 1..N Faire
Pour j=1..N faire
opérations en O(1)
FinFaire
… FinFaire
47
Boucles multiplicatives (1)
◼ Les boucles multiplicatives sont des boucles contrôlées
par une variable qui, à chaque exécution de la boucle, est
divisée ou multipliée par une constante.
◼ Exemple:
var = 1
Tantque var <= N faire
…….
qqchose en O(1)
…….
var = 2*var
FinFaire
Ici, la constante = 2 48
Boucles multiplicatives (2)
◼ Puisque var est initialisé à 1, après k itérations la variable var
sera égale à 2k (car à la sortie de la 1ère itération var=2=21 puis à
la sortie de la 2ème itération var=4=22, à la sortie de la 3eme
itération var=8=23 etc.)
◼ Pour trouver la complexité temporelle il faut trouver k
◼ Le nombre d'itérations k peut être trouvé en appliquant la
fonction logarithme des deux côtés de l'égalité
var = 2k
Log2(var) = log2 (2k) N
◼ Puisque l'itération se
= k log2(2) termine quand var
= k Donc >= N, la complexité
de l'algorithme est en
k = log2(var) O(log (N)) 49
Boucles multiplicatives (3)
◼ En général, si l'on suppose que la variable de contrôle
var est multipliée par une constante Facteur, alors on
peut voir qu'après k itérations, var = Facteurk
◼ Dans ce cas :
var = Facteurk
logFacteur(var) = logFacteur (Facteurk)
= k logFacteur (Facteur)
= k Donc k
= logFacteur (var)
Pour var = N, k= logFacteur (N) 50
Travail à faire
var = N
Tantque var > 1 Faire
……..
qqchose en O(1)
……..
var = var/2
FinFaire
51
Travail à faire (sol)
◼ Puisque var est initialisé à N, après k itérations la
variable var sera égale à N/2K
◼ Le nombre K peut être calculé comme suit:
var = N/2K
log2(var) = log2 (N/2K)
= log2(N)-log2(2K)
= log2(N)-K*log2(2)
= log2(N)-K
Compteur avec un
Compteur avec
pas de 1
un pas de 2
(n -1)(1+ n −1) n −n 2
uk = 2
=
2
k =1
60
Exemple 1 (4) – solution
61
Signification
Pourquoi ½(n2-n) est approximé par 0(n2 ) ?
◼ Soit deux fonctions positives f et g, on dit que f(n) est en
O(g(n)) (de l’ordre de g(n)) s’il existe deux constantes
positives c et n0 t.q n n0, f(n) ≤ c g(n)
◼ Dans notre exemple : f(n)= ½(n2-n) et g(n)= n2 car pour
c=1/2 et n0 = 0 on a n 0, ½(n2-n) ≤ ½ n2
40
½ n2
30
½ (n2-n)
25
20
15
10
5
0 62
0
Exemple 2 (1)
◼ factorielle d’un entier n
◼ version itérative (Rq: Opération fondamentale :
multiplication)
static int factIter(int n)
{ int r=1;
for(int i=1; i<=n; i++) r=r*i;
}
◼ version récursive
static int factRec(int n)
{
if(n==0) return 1;
else return n*factRec(n-1);
} 63
Exemple 2 (2) – solution
◼ Mesure de la complexité temporelle
◼ Version itérative
65
Illustration (1)
◼ Temps d’exécution : Exemple
◼Sur un ordinateur effectuant 1000 000 opérations par
seconde (1 Mhz)
◼s: micro-secondes, ms: milli-secondes, s :secondes,
Taille
n=102 6.6s 0.1ms 0.6 ms 10 ms
n=103 9.9s 1 ms 9.9 ms 1s
n=104 13.3s 10 ms 0.1 s 100 s
n=105 16.6s 0.1 s 1.6 s 2.7 h
n=106 19.9s 1s 19.9s 11.5 j
66
Illustration (2)
Complexité n3 2n
Taille
n=102 1s 4x106 a
n=103 16.6 mn >10100 a
n=104 11.5 j >10100 a
n=105 31.7 a >10100 a
n=106 31.7x103 a >10100 a
67
Travail à faire (1)
◼ 1. Calculer la complexité temporelle de la fonction de
recherche d’un élément dans un tableau
Fonction Appartient (donnée T: tableau d’entiers, donnée N, x:
entier) retourne booléen
début
variable i : entier i 1;
tantque ( i ≤ N et T[i] ≠ x) faire
i i+1
fin tantque
si (i>N) retourner faux
sinon retourner vrai
finsi fin
69
Travail à faire (2)
Algorithme A
i 1; j 1
Tant que (i m) et j n) faire
i i+1; j j+1;
Fin Tant que
71
Complexité en fonction de deux
paramètres
Déterminer la complexité des algorithmes
suivants (par rapport au nombre d'itérations
effectuées), où m et n sont deux entiers positifs.
Algorithme A
i 1; j 1
Tant que (i m) et j n) faire
i i+1; j j+1;
Fin Tant que
Algorithme B
i 1; j 1
Tant que (i m) ou (j n) faire
i i+1; j j+1;
Fin Tant que
73
Complexité en fonction de deux
paramètres
Déterminer la complexité des algorithmes
suivants (par rapport au nombre d'itérations
effectuées), où m et n sont deux entiers positifs.
Algorithme B
i 1; j 1
Tant que (i m) ou j n) faire
i i+1; j j+1;
Fin Tant que
79
Approximation des complexités (1)
▪Exemple
quand n grand.
81
Approximation des complexités (3)
▪Même raisonnement pour les constantes
multiplicatives, mais il faut être plus prudent au moment
de l’approximation.
▪Exemple:
▪Un algorithme A1 a une complexité (Min, Max, ou Moy)
égale à n2 et un algorithme A2 de complexité 2n.
▪A2 est meilleur que A1 que si n>2.
▪3n2 – 25n = n (3n - 25) est toujours > 0 pour n>2.
▪Si A1 a pour complexité 3n2 et A2 a 25n,
▪A2 est meilleur que A1 pour tous les n>2.
▪n2 – 2n = n (n - 2) est toujours > 0 pour n>2. 82
Approximation des complexités (4)
Définition
Borne supérieure.
Exemple 1
Pourquoi ½(n2-n) est approximé par 0(n2 )?
◼ Dans notre exemple : F(n)= ½(n2-n) et g(n)= n2
car pour k=1/2 et n0 = 0 on a n 0,
½(n2-n) ≤ ½ n2
40 ½ n2
½ (n2-n)
35
30
25
20
15
10
0
5 0 89
Notation grand-O
Borne supérieure asymptotique
Exemple 2
Initialiser un tableau d’entiers
for (int i=0; i<n; i++) Tab[i]=0;
Il y a n itérations
Chaque itération nécessite un temps constant c, où c
est une constante (accès au tableau + une
affectation).
91
Exercices complexité asymptotique
1. n2O (10-5n3)
2. 25 n4-19n3+13n2 O (n4)
3. 2n+100 O(2n)
92
Exercices complexité asymptotique
Solution exercice 1
n2O (10-5n3)
Il suffit de trouver deux entiers strictement positifs k
et n0 tels que n2 k 10-5n3 n n0
25 n4-19n3+13n2 O (n4)
25 n4-19n3+13n2 25 n4+19n3+13n2 25
n4+19n4+13n4 =(25+19+13) n4 n 1
94
Exercices complexité asymptotique
Exercice 2
95
Exercices complexité asymptotique
Solution de l’exercice 2
On a donc en final:
O(1) O(log(n)) O(n) O(nlog(n)) O(n2) O(n3)
97
n
Complexité asymptotique en termes de
temps d'exécution
◼ Soit un ordinateur qui exécute 1000000 d'instructions par
seconde, on exécute un algorithme qui utilise, pour une donnée
de taille n = 60, f(n) instructions, f(n) étant l'une des fonctions,
nlog(n), 2n, log(n), 1, n2, n3, n
◼ Voici le tableau qui donne le temps d'exécution correspondant à
chacune des fonctions
F(n) Temps en secondes
log(n) 4,09 10-6
n 6 10-5
n log(n) 2,46 10-4
n2 3,60 10-3
n3 2,16 10-1
2n 1,15 1012 36 558 ans 9 ans sur un ordinateur récent
98
Exercices calcul complexité
Soit la fonction récursive F d'un paramètre entier n suivante:
Fonction F(n:entier): entier
Si n=0 alors
Retourner 2
Sinon
retourner (F(n-1)*F(n-1)) Fin si
99
Exercices calcul complexité
Réponse
1. Que calcule la fonction F(0) = 2,
F(1) = 2*2 = 22 , F(2) = 22 * 22 = 24
F(3) = 24 * 24 = 28
intuitivement on peut conclure que F(n)= 2n
2. Calcul de complexité
On s'interesse au nombre m(n) de multiplications
effectuées. M(n) est solution de l'équation de
recurrence
100
Exercices calcul complexité
Réponse
On montre par la suite que
102
Plan
Relations d'inclusion
103
Introduction
104
Problème de décision
▪La théorie de la complexité ne traite que des problèmes de
décision binaire, c'est-a-dire posant une question dont la
réponse soit oui ou non .
▪Cependant on étend la notion de complexité aux problèmes
d'optimisation. En effet il est facile de transformer un
probleme d'optimisation en probleme de décision.
106
Problème de décision
107
Notion de réduction entre problèmes
108
Notion de réduction entre problèmes
Définition
109
Notion de réduction entre problèmes
111
Complexité d’un problème (2)
o Par exemple, si on dit que la complexité d’un problème est
quadratique cela veut dire:
112
Classe P
Classe NP
Autres classes (L, NL, EXPTIME, Co-
NP, EXPTIME)
113 113
Familles de classes de complexité (1)
o Il s’agit de classifier les problèmes selon l’ordre de
grandeur de leur complexité.
o on va se limiter aux problèmes de décision ou propriétés.
o Une propriété est une fonction à valeurs booléennes.
o Un problème de décision peut donc être vu comme un
ensemble d’instances du problème avec pour chaque
instance une réponse “oui” ou “non”.
114
Classe P
P = PTIME = c TIME(nc)
115
Exemples de problèmes dans P
116
Classe NP
NP = c NTIME(nc)
117
Exemples de problèmes dans NP
• Problème du plus court chemin dans un graphe:
Il est possible de vérifier en temps polynomial si un chemin
donné relie a et b et si sa longueur est inférieure à une valeur B.
•Problème du plus long chemin dans un graphe:
il est possible de vérifier en temps polynomial si un chemin
donné est élémentaire, s’il relie a et b et si sa longueur est
inférieure à une valeur B.
•Problème hamiltonien:
Lorsqu’un graphe G admet un cycle hamiltonien, il est possible
de vérifier en temps polynomial si un tel cycle passe une et une
seule fois par tout les sommets de G.
• Problème du voyageur de commerce , 3 SAT, 3 COL
118
Autres classes de complexité (1)
L = LOGSPACE = SPACE(log n)
Un problème de décision qui peut être résolu par un algorithme
déterministe en espace logarithmique par rapport à la taille de
l'instance est dans L
120