La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Algorithmes et structures de données 7ème cours Patrick Reuter maître de conférences

Présentations similaires


Présentation au sujet: "Algorithmes et structures de données 7ème cours Patrick Reuter maître de conférences"— Transcription de la présentation:

1 Algorithmes et structures de données 7ème cours Patrick Reuter maître de conférences

2 Aujourdhui - Complexité asymptotique - Fonctions/Procédures

3 Déclaration de variables var compteur : integer; var diviseur : single; var c : char; var precision : double; var nom : string; var masculin : boolean; var jours : array[1..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

4 Déclaration de variables var compteur : integer; var diviseur : single; var c : byte; var precision : double; var nom : string; var masculin : boolean; var jours : array[1..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

5 Dé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 = array[1..12] of byte; var jours : t_tableau; –2 dimensions type t_damier = array[1..8] of array[1..8] of t_champ; var damier : t_damier; Type enregistrement ( structure hétérogène) type t_date = RECORD jour:byte; mois:byte; an:integer; END; var aujourdhui : t_date

6 type t_date = RECORD an:integer; mois:byte; jour:byte; END; var aujourdhui : t_date; aujourdhui.an # # # aujourdhui.jour;# aujourdhui.mois;# #0 Occupe de la place successive dans la mémoire

7 Exigences dun programme Lisibilité Extensibilité Portabilité Réutilisable Fiabilité Efficacité (faible complexité)

8 Complexité 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

9 Mé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.

10 Mé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.

12 1er exemple pour T(n) Trouver lartiste dune chanson donnée kaya i := 1; tant que i<=n faire si collection[i].title = kaya alors afficher collection[i].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) = 4n+1

13 2ème exemple pour T(n) i := 1; tant que i<=n faire j := 1; tant que j<=n faire si i=j alors a[i][j] := 1; sinon a[i][j] := 0; fin si j := j + 1; fin tant que i := i + 1; fin tant que Affectations : 1 + 2n + 2n 2 Comparaisons : n+ 2n 2 T(n) = 4n 2 +3n+1

14 Thé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 ) ? 1.On utilise une machine plus puissante 2.On choisit un algorithme avec une meilleure complexité

15 Thé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 ) ? 1.On utilise une machine plus puissante (p.ex.10 fois plus ) T i (n)Facteur de croissance de longueur des données dentrée n log 2 n>10 n10 n log 2 n<10 n2n2 3,16 n3n3 2,15 2n2n 1

16 Théorie de la complexité – Diminuer les constantes Comment peut-on optimiser T(n) ? T(n) = 4n 2 +3n+1 1ère solution : diminuer les constantes a,b,c Exemple : –T 1 (n) = 4n 2 +3n+1 –T 2 (n) = 4n 2 –T 3 (n) = n 2 n T 1 (n) T 2 (n) T 3 (n) T 1 /T 2 21,561,281,081,041,011 T 1 /T 3 86,255,114,314,154,044

17 Théorie de la complexité – Diminuer les constantes 2 fonctions –T 1 (n) = a 1 n 2 +b 1 n+c 1 –T 2 (n) = a 2 n 2 +b 2 n+c 2 Amélioration : –lim n T 1 (n) /T 2 (n) = a 1 /a 2 Pour des grand n, seule la constante du plus grand degré est significative

18 Thé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 ) ?* 2.On choisit un algorithme avec une meilleure complexité !!!

19 Théorie de la complexité – Changement de la fonction 2ème solution changer la fonction T 1 (n) = log 2 n logarithmique T 2 (n) = n linéaire T 3 (n) = n log 2 n Quasi-linéaire T 4 (n) = n 2 quadratique T 5 (n) = n 3 cubique T 6 (n) = 2 n exponentiel

20 Thé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 T i (n)1 sec1 min1 heure log 2 n N n log 2 n n2n n3n n2n 91521

21 Théorie de la complexité Notation Grand-O Exemple : Si T(n) c n pour une constante c et toutes les valeurs de n>n 0, on dit « T(n) est dans O(n) »ou bien T(n) O(n) ou, par abus décriture, T(n) = O(n)

22 Théorie de la complexité Notation Grand-O Exemple : (Rappel de T(n) = 4n+1) Si T(n) c n pour une constante c et toutes les valeurs de n>n 0, on dit « T(n) est dans O(n) »ou bien T(n) O(n) ou, par abus décriture, T(n) = O(n)

23 1er exemple pour T(n) Trouver lartiste dune chanson donnée kaya i := 1; tant que i<=n si collection[i].title = kaya alors afficher collection[i].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) = 4n+1 O(n) !

24 Théorie de la complexité En général : O(f) = {g | c > 0 : n 0 > 0 : n n 0 : g(n) c f(n)} Soit g une fonction non négative. g est dans O(f) sil existe deux constantes positives c et n 0 telles que g cf(n) pour tout n > n0. EXEMPLE : T(n) = 9n 2 O(n 2 ) f = n 2, g = 9n 2

25 2ème exemple pour T(n) i := 1; tant que i<=n faire j := 1; tant que j<=n faire SI i=j ALORS a[i][j] := 1; SINON a[i][j] := 0; j := j + 1; fin tant que i := i + 1; fin tant que Affectations : 1 + 2n + 2n 2 Comparaisons : n+ 2n 2 T(n) = 4n 2 +3n+1 O(n 2 ) !

26 Thé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(n a) complexité polynomiale –O(n 2) complexité quadratique –O(n 3) complexité cubique O(a n) complexité exponentielle O(log n) O(n) O(n log n) O(n 2 ) O(n 3 ) O(2 n )

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 tant que 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 = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin

31 type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin En-tête de la fonction

32 type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin Corps de la fonction

33

34 type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position :=i; fin si i := i + 1; fin tant que result := position; fin Paramètres de la fonction (arguments)

35 type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin Type de retour de la fonction Valeur de retour de la fonction

36 type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin

37 type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin boucle max n itérations

38 type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin

39 type t_tableau = array[1..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 (i<=n ET position = 0) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin T(n) = 4n+3 O(n) !

40 type t_tableau = array[1..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 >=inf ET trouve = FAUX) faire milieu := (inf + sup) DIV 2; si (quoi = tab[milieu]) alors trouve := VRAI; sinon si (quoi < tab[milieu]) alors sup := milieu -1; sinon inf := milieu + 1; fin si fin tant que si (trouve = FAUX) alors result := 0; sinon result := milieu; fin si fin

41 type t_tableau = array[1..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 >=inf ET trouve = FAUX) faire milieu := (inf + sup) DIV 2; si (quoi = tab[milieu]) alors trouve := VRAI; sinon si (quoi < tab[milieu]) alors sup := milieu -1; sinon inf := milieu + 1; fin si fin tant que si (trouve = FAUX) alors result := 0; sinon result := milieu; fin si fin

42 type t_tableau = array[1..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 >=inf ET trouve = FAUX) faire milieu := (inf + sup) DIV 2; si (quoi = tab[milieu]) alors trouve := VRAI; sinon si (quoi < tab[milieu]) alors sup := milieu -1; sinon inf := milieu + 1; fin si fin tant que si (trouve = FAUX) alors result := 0; sinon result := milieu; fin si fin boucle max. log 2 n itérations

43 Pourquoi log 2 n ? –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 log 2 n itérations

44 Pourquoi log 2 n ? –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 itération sup- inf sup-inf DIV

45 type t_tableau = array[1..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 >=inf ET trouve = FAUX) faire milieu := (inf + sup) DIV 2; si (quoi = tab[milieu]) alors trouve := VRAI; sinon si (quoi < tab[milieu]) alors sup := milieu -1; sinon inf := milieu + 1; fin si fin tant que si (trouve = FAUX) alors result := 0; sinon result := milieu; fin si fin T(n) = 7log 2 n+5 O(log n) !


Télécharger ppt "Algorithmes et structures de données 7ème cours Patrick Reuter maître de conférences"

Présentations similaires


Annonces Google