Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Introduction à l’Algorithmique
IPA – Catherine Faron Zucker
2
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 IPA – Catherine Faron Zucker
3
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 IPA – Catherine Faron Zucker
4
Exemple Exemple de problème à résoudre Input: liste non triée
Comment trier une liste d'élèves par ordre alpha? Input: liste non triée Output: liste triée Algo: ??? IPA – Catherine Faron Zucker
5
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 chaînes de carctères codant la séquences de gènes du génome humain séquençage de l'ADN Séquençage du génome humain En biochimie, le séquençage consiste à déterminer l'ordre linéaire des composants d'une macromolécule (les acides aminés d'une protéine, etc.). En génétique, le séquençage concerne la détermination de la séquence des gènes voire des chromosomes, voire du génome complet. Ce qui techniquement revient à effectuer le séquençage de l'ADN constituant ces gènes ou ces chromosomes. algo sur graphes: modélisent pb réels: réseaux de communication ,jeux, pb du voyageur de commerce, pb de coloration de graphes pour planification d'évènements... pb combinatoires: explosion combinatoire, pas d'algo en temps raisonnable, sauf exception géométriques: graphisque, robotique: trouver la paire la plus proche, trouver le polygone convexe le plus petit numérique: systèmes d'équation, évaluation de fonctions, calcul intégral, etc. suppose représentation des nombres, approximations IPA – Catherine Faron Zucker
6
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 IPA – Catherine Faron Zucker
7
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. IPA – Catherine Faron Zucker
8
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? IPA – Catherine Faron Zucker
9
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 IPA – Catherine Faron Zucker
10
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 IPA – Catherine Faron Zucker
11
Efficacité d'un algorithme
Classes de complexité 1 log n n n log n n2 n n n! Notations asymptotiques: O(g(n)) Ω(g(n)) θ(g(n)) IPA – Catherine Faron Zucker
12
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 tableau/liste: taille fixe ou non set: ensemble non ordonné d'éléments distincts opérations: test d'appartenance, union, intersection si on prend un super-ensemble, on représente un set par une suite de 0 et de 1 selon que l'élément est dans le super set ou pas dictionnaires ou map: recherche d'un élément, ajout, suppression système de clés uniques IPA – Catherine Faron Zucker
13
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 IPA – Catherine Faron Zucker
14
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 IPA – Catherine Faron Zucker
15
Itérations int i = 0; while(i<10){ System.out.println(“Coucou”);
} IPA – Catherine Faron Zucker
16
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”); IPA – Catherine Faron Zucker
17
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 IPA – Catherine Faron Zucker
18
Validité d'une boucle Invariant de boucle Initialisation Conservation
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). IPA – Catherine Faron Zucker
19
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) IPA – Catherine Faron Zucker
20
Fact(n) i ← 1; fact ← 1 { Invariant: fact = i ! et i ≤ n }
TantQue i < n Faire i ← i + 1 fact ← fact * i FinTantQue (fact = i ! et i ≤ n ) et non(i<n) retourner fact IPA – Catherine Faron Zucker
21
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 tableau/liste: taille fixe ou non set: ensemble non ordonné d'éléments distincts opérations: test d'appartenance, union, intersection si on prend un super-ensemble, on représente un set par une suite de 0 et de 1 selon que l'élément est dans le super set ou pas dictionnaires ou map: recherche d'un élément, ajout, suppression système de clés uniques IPA – Catherine Faron Zucker
22
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; IPA – Catherine Faron Zucker
23
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 IPA – Catherine Faron Zucker
24
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]; IPA – Catherine Faron Zucker
25
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) IPA – Catherine Faron Zucker
26
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 IPA – Catherine Faron Zucker
27
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 IPA – Catherine Faron Zucker
28
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(){} } IPA – Catherine Faron Zucker
29
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(){} } IPA – Catherine Faron Zucker
30
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”); IPA – Catherine Faron Zucker
31
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”); IPA – Catherine Faron Zucker
32
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”); IPA – Catherine Faron Zucker
33
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... IPA – Catherine Faron Zucker
34
Structures de données listes chaînées : cf. td arbres arbres binaires
simplement, doublement arbres arbres binaires arbres binaires de recherche graphes à suivre... IPA – Catherine Faron Zucker
35
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 IPA – Catherine Faron Zucker
36
PGCD(a, b) itératif n <- a; m <- b; TantQue m != 0 Faire
r <- n mod m n <- m m <- r FinTantQue retourner n IPA – Catherine Faron Zucker
37
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)=... IPA – Catherine Faron Zucker
38
PGCD(a, b) récursif Si b=0 Alors retourner a //terminaison
Sinon retourner pgcd(a, a mod b) finSi Théorème de Lamé (1845) : (n>=m) Si l ’algorithme d ’Euclide nécessite k étapes pour calculer pgcd (n,m) on a n>=m>=Fibk [Fib0 = 0, Fib1 = 1, Fibk = Fibk-1 + Fibk-2, pour k>1] T(Euclide, (n,m)) = O(log min(n,m)) même complexité Euclide version itérative, version récursive IPA – Catherine Faron Zucker
39
Fac(n) Relation de récurence Algorithme fac(n) = n * fac(n-1), n>0
Si n = 0 Alors retourner 1 Sinon retourner n * fac(n-1) FinSi IPA – Catherine Faron Zucker
40
Fac(n) Complexité cf. module Maths discrètes 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 IPA – Catherine Faron Zucker
41
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 IPA – Catherine Faron Zucker
42
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) M(n-1) pour n>1 et M(1)=1 M(n) = 2*M(n-1)+1 = ... = 2n -1 (algo exponentiel) IPA – Catherine Faron Zucker
43
Recherche dichotomique
Version itérative vue en TD Version récursive ? IPA – Catherine Faron Zucker
44
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) IPA – Catherine Faron Zucker
45
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 IPA – Catherine Faron Zucker
46
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] IPA – Catherine Faron Zucker
47
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 IPA – Catherine Faron Zucker
48
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 IPA – Catherine Faron Zucker
49
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 IPA – Catherine Faron Zucker
50
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 IPA – Catherine Faron Zucker
51
Tri Fusion Principe “divide and conquer”
division du tableau en 2 sous-tableaux tri récursif des 2 sous-tableaux fusion des 2 sous-tableaux Le coeur de l'algorithme est la fusion des 2 sous-tableaux triés IPA – Catherine Faron Zucker
52
Tri fusion Algorithme TriFusion(tab[0 .. n-1]) Si n > 1 Alors
copie de tab[ 0 .. n/2 -1] dans tab1 copie de tab[ n/2 n-1] dans tab2 TriFusion (tab1) TriFusion (tab2) Fusion (tab1, tab2, tab) IPA – Catherine Faron Zucker
53
Quick Sort Principe “divide and conquer”
partition du tableau en 2 sous-tableaux tel que l'élt à l'indice de partitionnement est bien placé tri récursif des 2 sous-tableaux Le coeur de l'algorithme est la partition en 2 sous-tableaux IPA – Catherine Faron Zucker
54
Quick Sort Algorithme QuickSort(tab[ g .. d ) Si g < d Alors
s <- Partition(tab) QuickSort(tab[g .. s-1]) QuickSort(tab[s+1 .. d]) IPA – Catherine Faron Zucker
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.