1 / 54

Introduction à l’Algorithmique

Introduction à l’Algorithmique. Introduction à l'Algorithmique. Algorithme Validité d'un algorithme Preuve de sa correction Analyse d'un algorithme Complexité d'un algorithme Structures de données Conception d'un algorithme. Algorithme. Permet de résoudre un problème donné

trella
Download Presentation

Introduction à l’Algorithmique

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. IPA – Catherine Faron Zucker Introduction à l’Algorithmique

  2. IPA – Catherine Faron Zucker Introduction à l'Algorithmique • Algorithme • Validité d'un algorithme • Preuve de sa correction • Analyse d'un algorithme • Complexité d'un algorithme • Structures de données • Conception d'un algorithme

  3. IPA – Catherine Faron Zucker Algorithme • Permet de résoudre un problème donné ex: Trier une liste de noms par ordre alphabétique • Procédure de calcul bien définie Séquence d'instructions élémentaires • termine en un temps fini • prend une ou des valeur(s) en entrée • donne une ou des valeur(s) en sortie

  4. IPA – Catherine Faron Zucker Exemple • Exemple de problème à résoudre Comment trier une liste d'élèves par ordre alpha? • Input: liste non triée • Output: liste triée • Algo: ???

  5. IPA – Catherine Faron Zucker Types de problèmes • Tris d'éléments d'une liste • Recherche d'un élément • Calcul sur des chaînes (caractères, nombres, bits, ...)‏ • Problèmes de graphes • Problèmes combinatoires • Problèmes géométriques • Problèmes numériques • Algorithmes exacts / d'approximation

  6. IPA – Catherine Faron Zucker Algorithme et Programme • Un algorithme est implémenté dans un langage de programmation • Un même algorithme peut être implémenté dans différents langages (Java, C, Python, Caml, ...) • Pseudo-code

  7. IPA – Catherine Faron Zucker Validité d'un algorithme • Précondition • doit être vérifiée avant un traitement donné, • garantit que la possibilité de déroulement du traitement. • Postcondition • doit être vérifiée après le déroulement du traitement, • garantit que le traitement a bien permis de réaliser ce pourquoi il a été réalisé. • Invariant • condition qui est toujours vraie, • caractérise l'état interne de tout ou partie d'un algo.

  8. IPA – Catherine Faron Zucker Analyse d'un algorithme • Complexité: mesure de son efficacité • Taille mémoire nécessaire à son exécution • Temps d'exécution nécessaire • dans le meilleur des cas • dans le pire des cas • en moyenne Exemple: recherche d'un élément dans une liste? Exemple: recherche du plus grand élément d'une liste?

  9. IPA – Catherine Faron Zucker Efficacité d'un algorithme • Temps d'exécution • fonction de la taille des données en entrée choix du bon paramètre • taille d'une liste, degré d'un polynôme • taille d'une matrice? • nombre de noeuds, profondeur, largeur d'un graphe? • nombre de mots d'un fichier ou nombre de caractères? • fonction du nombre de fois où une opération de base est répétée dans l'algorithme

  10. IPA – Catherine Faron Zucker Efficacité d'un algorithme • Temps d'exécution: T(n)  C(n)  t • C(n) nombre de fois où l'opération de base de l'algorithme est exécutée • t temps d'exécution de cette opération de base C(n) = ½ n (n-1) = ½ n2 - ½ n • Ordre de grandeur: C(n) n2

  11. IPA – Catherine Faron Zucker Efficacité d'un algorithme • Classes de complexité 1 log n n n log n n2 n3 2n n! • Notations asymptotiques: • O(g(n)) • Ω(g(n)) • θ(g(n))

  12. IPA – Catherine Faron Zucker Structure de Données • Moyen de stocker et organiser les données d'un algorithme • accès aux données • modification, mise à jour des données • Tableaux, listes chaînées • Piles, files • Sets et Maps • Graphes, arbres, arbres binaires de recherche

  13. IPA – Catherine Faron Zucker Conception d'un algorithme • Stratégie de résolution d'un problème • Approche itérative • répéter jusqu'à obtention du résultat souhaité • Approche récursive • diviser pour régner

  14. IPA – Catherine Faron Zucker Structures de contrôle • Structures de contrôle conditionnelle • Si cond Alors instr FinSi • Si cond Alors instr sinon instr FinSi (imbrications possibles) • Structures de contrôle itératives • TantQue cond Faire instr FinTantQue • variantes (imbrications possibles)

  15. IPA – Catherine Faron Zucker Itérations int i = 0; while(i<10){ System.out.println(“Coucou”); i +=1; }

  16. IPA – Catherine Faron Zucker Itérations int i = 0; do{ System.out.println(“Coucou”); i +=1; }while(i<10); for (i=0; i<10; i++) System.out.println(“Coucou”);

  17. IPA – Catherine Faron Zucker Calcul du pgcd PGCD(a,b) n <- a; m <- b; TantQue m != 0 Faire r <- n mod m n <- m m <- r FinTantQue retourner n

  18. IPA – Catherine Faron Zucker Validité d'une boucle • Invariant de boucle • Initialisation • Montrer que I est vrai avant d'entrer dans la boucle • Conservation • Montrer que si C et I sont vrais, alors après la liste d'instructions, I est encore vrai. • Terminaison • On en déduit que (I et non C) est vrai à la sortie de la boucle (si la boucle termine).

  19. IPA – Catherine Faron Zucker PGCD(a, b) n <- a; m <- b; { Invariant : pgcd(a,b)=pgcd(n,m) et n>=0 et m>=0 } TantQue m != 0 Faire r <- n mod m n <- m m <- r { pgcd(a,b)=pgcd(m,n) et m>=0 et n>0 } FinTantQue // pgcd(a,b)=pgcd(n,m) et n>=0 et m=0 // Donc n=pgcd(a,b)

  20. IPA – Catherine Faron Zucker Fact(n)‏ i ← 1; fact ← 1 { Invariant: fact = i ! et i ≤ n } TantQue i < n Faire i ← i + 1 fact ← fact * i { Invariant: fact = i ! et i ≤ n } FinTantQue (fact = i ! et i ≤ n ) et non(i<n) retourner fact

  21. IPA – Catherine Faron Zucker Structures de Données • Moyen de stocker et organiser les données d'un algorithme • accès aux données • modification, mise à jour des données • Tableaux, listes chaînées • Piles, files • Sets et Maps • Graphes, arbres, arbres binaires de recherche

  22. IPA – Catherine Faron Zucker Tableaux • suite ordonnée d'éléments de taille fixe int [] tableau = new int[10]; • premier élément : tableau[0] • dernier élément : tableau[tableau.length -1] • i ième élément : tableau[i-1] • init./modif. d'un élément: tableau[i] = 3;

  23. IPA – Catherine Faron Zucker Tableaux • valeur tableau[i] / indice i • recherche du (des) élément(s) vérifiant une certaine propriété • vérification de la présence ou l'absence d'une certaine valeur dans le tableau • recherche de l'indice dans le tableau d'une valeur donné • tri du tableau selon un certain critère

  24. IPA – Catherine Faron Zucker Matrices • Tableau de tableaux : int [][] matrice = new int[10][15]; • élément en ligne i et colonne j : matrice[i][j] • Matrice carrée : int [][] matriceCarree = new int[7][7];

  25. IPA – Catherine Faron Zucker Listes • suite ordonnée d'éléments de taille variable ArrayList<Integer> liste; liste = new ArrayList<Integer>(); • Ne peuvent contenir que des objets • premier élément : liste.get(0) • dernier élément : liste.get(liste.size()-1) • i ième élément : liste.get(i-1)

  26. IPA – Catherine Faron Zucker Listes • ajout d'un élt: liste.add(new Integer(3)); • modif d'un élt: liste.set(i,new Integer(4)); • suppression d'un élt: liste.remove(i); • mêmes algos que sur les tableaux

  27. IPA – Catherine Faron Zucker Piles et Files • Ordonnancements particuliers des éléments d'un tableau ou d'une liste • Pile : empiler/dépiler des éléments • statique ou dynamique selon qu'on utilise un tableau ou une liste • File : enfiler /défiler des éléments • implémentation par liste plus simple

  28. IPA – Catherine Faron Zucker Piles public class Pile{ private Object[] table; private int hauteur; public void empiler(Object o){table[hauteur]=o; hauteur++;} public Object depiler(){hauteur--; return table[hauteur];} public Object sommet(){} public boolean vide(){} public boolean pleine(){} }

  29. IPA – Catherine Faron Zucker Files public class Pile{ private ArrayList<Object> liste; private int longueur; public void enfiler(Object o){liste.add(o); longueur++;} public Object defiler(){longueur--; return liste.remove(0);} public Object tete(){} public Object queue(){} public boolean vide(){} }

  30. IPA – Catherine Faron Zucker Maps • collection de paires d'objets, de taille variable HashMap<String,String> surnoms; surnoms = new HashMap<String,String>(); • paires clé/valeur, clés uniques • ajout d'un couple clé/valeur : surnoms.put(“tartampion”, “dupont”); • suppression d'un couple clé/valeur : surnoms.remove(“tartampion”);

  31. IPA – Catherine Faron Zucker Maps • plus de premier, dernier, i ième élément, récupération d'une valeur associée à une clé : String nom = surnoms.get(“tartampion”); • récupération directe de • la valeur associée à une clé : get • de l'information de présence/absence • d'une valeur: surnom.containsKey(“dupont”); • d'une clé : surnom.containsValue(“tartampion”);

  32. IPA – Catherine Faron Zucker Sets • ensemble non ordonné d'objets, de taille variable HashSet<String> surnoms; surnoms = new HashSet<String>(); • ajout d'un élément : surnoms.put(“tartampion”); • suppression : surnoms.remove(“tartampion”); • test direct de la présence d'un élément : surnoms.contains(“tartampion”);

  33. IPA – Catherine Faron Zucker Maps et Sets • Les structures de Maps et de Sets ne supportent que les opérations de dictionnaire:insérer, rechercher, supprimer • HashMap et HashSet sont des implémentations à base de tables de hachage qui permettent de réduire le coût de ces opérations.à suivre...

  34. IPA – Catherine Faron Zucker Structures de données • listes chaînées : cf. td • simplement, doublement • arbres • arbres binaires • arbres binaires de recherche • graphes à suivre...

  35. IPA – Catherine Faron Zucker Conception d'un algorithme • Stratégie de résolution d'un problème • Approche incrémentale • itérer jusqu'à obtention du résultat souhaité • Approche récursive • diviser pour régner: • diviser en sous-problèmes • régner sur les sous-problèmes • combiner les solutions des sous-problèmes

  36. IPA – Catherine Faron Zucker PGCD(a, b) itératif n <- a; m <- b; TantQue m != 0 Faire r <- n mod m n <- m m <- r FinTantQue retourner n

  37. IPA – Catherine Faron Zucker PGCD(a, b) récursif • diviser: pgcd(a,b) = pgcd(b, a mod b) semblable au problème initial de taille moindre • régner: pgcd(a,0) = a • combiner: pgcd(a,b)= pgcd(b,a mod b)=...

  38. IPA – Catherine Faron Zucker PGCD(a, b) récursif Si b=0 Alors retourner a //terminaison Sinon retourner pgcd(a, a mod b) finSi

  39. IPA – Catherine Faron Zucker Fac(n) • Relation de récurence fac(n) = n * fac(n-1), n>0 fac(0) = 1 • Algorithme Si n = 0 Alors retourner 1 Sinon retourner n * fac(n-1) FinSi

  40. IPA – Catherine Faron Zucker Fac(n) Complexité • opération élémentaire : * • nbre de fois où elle est effectuée • fonction de n: M(n) • relation de récurence: M(n) = 1 + M(n-1) pour n>0 et M(0) = 0 en développant, on a M(n) = M(n-i) – i pour tout i pour i=n, on obtient M(n) = M(O) + n = n cf. module Maths discrètes

  41. IPA – Catherine Faron Zucker Tours de Hanoï • n disques de tailles décroissantes sur une tige • Problème: comment faire passer les n disques sur une autre tige, en utilisant une tige intermédiaire afin qu'un disque ne soit jamais empilé sur un plus petit? • Algorithme (récursif): • faire passer n-1 disques sur la tige 2 • faire passer le plus grand disque sur la tige 3 • reste à faire passer les n-1 disques de t2 à t3

  42. IPA – Catherine Faron Zucker Tours de Hanoï • Algorithme: • faire passer n-1 disques sur la tige 2 • faire passer le plus grand disque sur la tige 3 • reste à faire passer les n-1 disques de t2 à t3 • Complexité • on compte le nbre de déplacements • il est fonction du nombre de disques • M(n) = M(n-1) + 1 + M(n-1) pour n>1 et M(1)=1 • M(n) = 2*M(n-1)+1 = ... = 2n -1 (algo exponentiel)

  43. IPA – Catherine Faron Zucker Recherche dichotomique • Version itérative vue en TD • Version récursive ?

  44. IPA – Catherine Faron Zucker Algorithmes de tri • Structures de données ordonnées • Nombreux algorithmes • tri par sélection • tri par insertion • tri à bulles • tri fusion • tri rapide (quicksort)

  45. IPA – Catherine Faron Zucker Tri par sélection • Principe • recherche du plus petit élt du tableau et échange avec le premier élt • recherche du plus petit élt du tableau entre les positions 2 et n-1 et échange avec le second élt • ... • recherche du plus petit élt entre les positions n-2 et n-1 et échange avec l'élt en position n-2

  46. IPA – Catherine Faron Zucker Tri par sélection • Algorithme itératif Pour i de 0 à n-2 Faire min <- i Pour j de i+1 à n-1 Faire Si tab[ j ] < tab[min] Alors min <- j FinSi FinPour Echanger tab[ i ] et tab[min] FinPour

  47. IPA – Catherine Faron Zucker Tri par insertion • Principe le tableau étant trié jusqu'à l'élt i-1, insérer l'élt i à sa place parmi les i premiers élts récursion ou itération

  48. IPA – Catherine Faron Zucker Tri par insertion • Algorithme itératif Pour i de 1 à n-1 Faire val <- tab[ i ] j <- i-1 TantQue j >= 0 et tab[ j ] > val Faire tab [ j+1] <- tab [ j ] j <- j - 1 FinTantQue tab [ j+1 ] <- val

  49. IPA – Catherine Faron Zucker Tri à bulles • Principe comparaison 2 à 2 des éléments adjacents et échange s'ils ne sont pas ordonnés comme les bulles, les plus grands élts remonten en fin de liste

  50. IPA – Catherine Faron Zucker Tri à bulles • Algorithme itératif Pour i de 0 à n-2 Faire Pour j de 0 à n-2-i Faire Si tab[ j+1 ] < tab[ j ] Alors échanger tab[ j+1 ] < tab[ j ] FinSi FinPour FinPour

More Related