Title: Algorithmes et structures de donnes 7me cours
1Algorithmes et structures de données7ème cours
- Patrick Reuter
- maître de conférences
- http//www.labri.fr/preuter
2Aujourdhui
- Complexité asymptotique
- Fonctions/Procédures
3Déclaration de variables
- var compteur integer
- var diviseur single
- var c char
- var precision double
- var nom string
- var masculin boolean
- var jours array1..12 of byte
- diviseur 1.1 Affectation
- compteur 1
- Nom Gerhard
Nombre entier
Nombre à virgule flottante
Nombre à virgule flottante avec double précision
Chaîne de caractères
Tableau
4Déclaration de variables
- var compteur integer
- var diviseur single
- var c byte
- var precision double
- var nom string
- var masculin boolean
- var jours array1..12 of byte
- diviseur 1.1 Affectation
- compteur 1
- Nom Gerhard
Nombre entier
Nombre à virgule flottante
Nombre à virgule flottante avec double précision
Chaîne de caractères
Tableau
5Déclaration de variables
- Types de base prédéfinis
- Integer, boolean, Real, Single,
- Les types énumérés
- type t_jourdesemaine (lundi, mardi, mercredi,
jeudi, vendredi, samedi, dimanche) - var jour t_jourdesemaine
- Type tableau (structure homogène)
- 1 dimension
-
- type t_tableau array1..12 of byte
- var jours t_tableau
- 2 dimensions
- type t_damier array1..8 of array1..8 of
t_champ
6- type t_date RECORD
- an integer
- mois byte
- jour byte
- END
- var aujourdhui t_date
536.870.911
536.870.910
...
...
aujourdhui.jour4005
24
Occupe de la place successive dans la mémoire
aujourdhui.mois4004
10
aujourdhui.an 4000
2006
...
0
7Exigences dun programme
- Lisibilité
- Extensibilité
- Portabilité
- Réutilisable
- Fiabilité
- Efficacité (faible complexité)
8Complexité
- Combien de temps dexécution le programme dure
til? - Complexité temporelle
- De combien de mémoire le programme a til besoin?
- ? Complexité de mémoire (ou Complexité spatiale)
- Comment trouver ces complexités ?
- ? méthode empirique
- ? méthode mathématique
9Méthode empirique
- Avec une montre et un logiciel danalyse de
mémoire - Problème dépend des facteurs suivants
- de la machine utilisée
- du jeu dinstructions utilisées
- de lhabileté du programmeur
- du jeu de données générées
- du compilateur choisi
-
- BIEN SUR Le temps dexécution dépend de la
longueur de lentrée (par exemple le nombre de
chansons dans la collection). - Ce temps est une fonction T(n) où n est la
longueur des données dentrée.
10Méthode mathématique
- Théorie de la complexité
- Temporelle
- Spatiale
- Basée sur une machine abstraite
- Random-access memory (RAM)
- Instructions de base (affectation, boucle, appel
de fonctions ) - longueur des données dentrée n
11- Instructions de répétition
- Boucle
- complexité du corps multipliée par le nombre
de fois quelle est répétée. -
- Démarche
- 1. déteminer le nombre de répétitions
- 2. multiplier ce nombre par la complexité du
corps de cette boucle.
121er exemple pour T(n)
- Trouver lartiste dune chanson donnée kaya
- i 1
- tant que iltn faire
- si collectioni.title kaya alors
- afficher collectioni.artiste
- i i 1
- fin tant que
- Affectations 1 n
- Comparaisons 2n
- Appel de fonctions n (Attention
considerer le worst case, c-à-d la pire option) - ?
T(n) 4n1
132ème exemple pour T(n)
- i 1
- tant que iltn faire
- j 1
- tant que jltn faire
- si ij alors
- aij 1
- sinon
- aij 0
- fin si
- j j 1
- fin tant que
- i i 1
- fin tant que
- Affectations 1 2n 2n2
- Comparaisons n 2n2
- ?
T(n) 4n23n1
14Théorie de la complexité
- Comment peut on résoudre des problèmes de plus
grande échelle (plus grand longueur des données
dentrée n ) ? - On utilise une machine plus puissante
- On choisit un algorithme avec une meilleure
complexité
15Théorie de la complexité
- Comment peut on résoudre des problèmes de plus
grande échelle (plus grande longueur des données
dentrée n ) ? - On utilise une machine plus puissante (p.ex.10
fois plus )
16Théorie de la complexité Diminuer les constantes
- Comment peut-on optimiser T(n) ?
- T(n) 4n23n1
- 1ère solution diminuer les constantes a,b,c
- Exemple
- T1(n) 4n23n1
- T2(n) 4n2
- T3(n) n2
17Théorie de la complexité Diminuer les constantes
- 2 fonctions
- T1(n) a1n2b1nc1
- T2(n) a2n2b2nc2
- Amélioration
- lim n? 8 T1(n) /T2(n) a1/a2
- Pour des grand n, seule la constante du plus
grand degré est significative
18Théorie de la complexité
- Comment peut on résoudre des problèmes de plus
grande échelle (plus grande longueur des données
dentrée n ) ? - On choisit un algorithme avec une meilleure
complexité !!!
19Théorie de la complexité Changement de la
fonction
- 2ème solution
- changer la fonction
- T1(n) log2n
- logarithmique
- T2(n) n
- linéaire
- T3(n) n log2 n
- Quasi-linéaire
- T4(n) n2
- quadratique
- T5(n) n3
- cubique
- T6(n) 2n
- exponentiel
20Théorie de la complexité Changement de la
fonction
- Quel taille de n peut être résolue en 1 seconde,
une minute, une heure ? - Avec une machine de 1000 instructions par seconde
21Théorie de la complexité
- Notation Grand-O
- Exemple
- Si
- T(n) c n
- pour une constante c et toutes les valeurs de
ngtn0, on dit - T(n) est dans O(n) ou bien
- T(n) ? O(n) ou, par abus décriture,
- T(n) O(n)
22Théorie de la complexité
- Notation Grand-O
- Exemple (Rappel de T(n) 4n1)
- Si
- T(n) c n
- pour une constante c et toutes les valeurs de
ngtn0, on dit - T(n) est dans O(n) ou bien
- T(n) ? O(n) ou, par abus décriture,
- T(n) O(n)
231er exemple pour T(n)
- Trouver lartiste dune chanson donnée kaya
- i 1
- tant que iltn
- si collectioni.title kaya alors
- afficher collectioni.artiste
- i i 1
- fin tant que
- Affectations 1 n
- Comparaisons 2n
- Appel de fonctions n (Attention
considerer le worst case, c-à-d la pire option) - ? T(n) 4n1 ? O(n) !
24Théorie de la complexité
- En général
- O(f) g ?c gt 0 ? n0 gt 0 ? n n0 g(n)
c f(n) - Soit g une fonction non négative.
- g est dans O(f) sil existe deux constantes
positives c et n0 telles que g ? cf(n) pour tout
n gt n0. - EXEMPLE T(n) 9n2 ? O(n2) f n2, g
9n2 -
252ème exemple pour T(n)
- i 1
- tant que iltn faire
- j 1
- tant que jltn faire
- SI ij ALORS
- aij 1
- SINON
- aij 0
- j j 1
- fin tant que
- i i 1
- fin tant que
- Affectations 1 2n 2n2
- Comparaisons n 2n2
-
- ? T(n)
4n23n1? O(n2) !
26Théorie de la complexité
- Classes de Grand-O
- O(1) complexité constante
- O(log n) complexité logarithmique
- O(n) complexité linéaire
- O(n log n) complexité quasi-linéaire
- O(na) complexité polynomiale
- O(n2) complexité quadratique
- O(n3) complexité cubique
- O(an) complexité exponentielle
O(log n) ? O(n) ? O(n log n) ? O(n2) ? O(n3) ?
O(2n)
27- Instructions de répétition
- Boucle
- complexité du corps multipliée par le nombre
de fois quelle est répétée. -
- Démarche
- 1. déteminer le nombre de répétitions
- 2. multiplier ce nombre par la complexité du
corps de cette boucle.
28- On analyse les boucles pour comme les boucles
tant que -
- Pour i de 1 à n faire
- Fin pour
- Instruction si maximum entre le alors et le
sinon - cas maximum parmi les différents cas
- Appels de fonctions Temps dexécution de la
fonction
29- Procédures et fonctions
- leur complexité est déteminée par celle de leur
corps.
30- type t_tableau array1..n of integer
- var tab t_tableau
- function dedans(quoi integer, n integer)
integer - var position integer
- var i integer
- début
- position 0
- i 1
- tant que (iltn) faire
- si (quoi tabi) alors
- position i
- fin si
-
- i i 1
31- type t_tableau array1..n of integer
- var tab t_tableau
- function dedans(quoi integer, n integer)
integer - var position integer
- var i integer
- début
- position 0
- i 1
- tant que (iltn) faire
- si (quoi tabi) alors
- position i
- fin si
-
- i i 1
En-tête de la fonction
32- type t_tableau array1..n of integer
- var tab t_tableau
- function dedans(quoi integer, n integer)
integer - var position integer
- var i integer
- début
- position 0
- i 1
- tant que (iltn) faire
- si (quoi tabi) alors
- position i
- fin si
-
- i i 1
Corps de la fonction
33(No Transcript)
34- type t_tableau array1..n of integer
- var tab t_tableau
- function dedans(quoi integer, n integer)
integer - var position integer
- var i integer
- début
- position 0
- i 1
- tant que (iltn) faire
- si (quoi tabi) alors
- position i
- fin si
-
- i i 1
Paramètres de la fonction (arguments)
35- type t_tableau array1..n of integer
- var tab t_tableau
- function dedans(quoi integer, n integer)
integer - var position integer
- var i integer
- début
- position 0
- i 1
- tant que (iltn) faire
- si (quoi tabi) alors
- position i
- fin si
-
- i i 1
Type de retour de la fonction
Valeur de retour de la fonction
36- type t_tableau array1..n of integer
- var tab t_tableau
- function dedans(quoi integer, n integer)
integer - var position integer
- var i integer
- début
- position 0
- i 1
- tant que (iltn) faire
- si (quoi tabi) alors
- position i
- fin si
-
- i i 1
37- type t_tableau array1..n of integer
- var tab t_tableau
- function dedans(quoi integer, n integer)
integer - var position integer
- var i integer
- début
- position 0
- i 1
- tant que (iltn) faire
- si (quoi tabi) alors
- position i
- fin si
-
- i i 1
boucle max n itérations
38- type t_tableau array1..n of integer
- var tab t_tableau
- function dedans(quoi integer, n integer)
integer - var position integer
- var i integer
- début
- position 0
- i 1
- tant que (iltn) faire
- si (quoi tabi) alors
- position i
- fin si
-
- i i 1
39- type t_tableau array1..n of integer
- var tab t_tableau
- function dedans(quoi integer, n integer)
integer - var position integer
- var i integer
- début
- position 0
- i 1
- tant que (iltn ET position 0) faire
- si (quoi tabi) alors
- position i
- fin si
-
- i i 1
? T(n) 4n3 ? O(n) !
40- type t_tableau array1..15 of integer
- var tab t_tableau
- function enigme(quoi integer, n integer)
integer - var inf, sup, milieu integer
- var trouve boolean
- début
- inf 1
- sup n
- trouve FAUX
- tant que (sup gtinf ET trouve FAUX) faire
- milieu (inf sup) DIV 2
- si (quoi tabmilieu) alors
- trouve VRAI
- sinon
- si (quoi lt tabmilieu) alors
- sup milieu -1
41- type t_tableau array1..15 of integer
- var tab t_tableau
- function enigme(quoi integer, n integer)
integer - var inf, sup, milieu integer
- var trouve boolean
- début
- inf 1
- sup n
- trouve FAUX
- tant que (sup gtinf ET trouve FAUX) faire
- milieu (inf sup) DIV 2
- si (quoi tabmilieu) alors
- trouve VRAI
- sinon
- si (quoi lt tabmilieu) alors
- sup milieu -1
42- type t_tableau array1..15 of integer
- var tab t_tableau
- function enigme(quoi integer, n integer)
integer - var inf, sup, milieu integer
- var trouve boolean
- début
- inf 1
- sup n
- trouve FAUX
- tant que (sup gtinf ET trouve FAUX) faire
- milieu (inf sup) DIV 2
- si (quoi tabmilieu) alors
- trouve VRAI
- sinon
- si (quoi lt tabmilieu) alors
- sup milieu -1
boucle max. log2n itérations
43- Pourquoi log2n ?
- n entrées dans le tableau
- intervalle sup, inf
- à chaque itération, lintervalle est divisé par 2
- Soit
- milieu (inf sup) DIV 2
- sup milieu -1
- Soit
- milieu (inf sup) DIV 2
- inf milieu 1
- condition darrêt sup inf
- c-à-d que lintervalle est inférieur à 1
- ? max log2n itérations
44- Pourquoi log2n ?
- n entrées dans le tableau
- intervalle sup, inf
- à chaque itération, lintervalle est divisé par 2
- Soit
- milieu (inf sup) DIV 2
- sup milieu -1
- Soit
- milieu (inf sup) DIV 2
- inf milieu 1
- condition darret sup inf
- c-à-d que lintervalle est inférieur à 1
45- type t_tableau array1..15 of integer
- var tab t_tableau
- function enigme(quoi integer, n integer)
integer - var inf, sup, milieu integer
- var trouve boolean
- début
- inf 1
- sup n
- trouve FAUX
- tant que (sup gtinf ET trouve FAUX) faire
- milieu (inf sup) DIV 2
- si (quoi tabmilieu) alors
- trouve VRAI
- sinon
- si (quoi lt tabmilieu) alors
- sup milieu -1
? T(n) 7log2n5 ? O(log n) !