Algo
Algo
Algo
Procédure de calcul bien définie
Séquence d'instructions élémentaires
Input: liste non triée
Output: liste triée
Algo: ???
Algorithmes exacts / d'approximation
IPA – Catherine Faron Zucker 5
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
C(n) = ½ n (n-1) = ½ n2 - ½ n
Ordre de grandeur: C(n) n2
1 log n n n log n n2 n3 2n
n!
Notations asymptotiques:
O(g(n))
Ω(g(n))
θ(g(n))
IPA – Catherine Faron Zucker 11
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
IPA – Catherine Faron Zucker 12
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
(imbrications possibles)
Structures de contrôle itératives
TantQue cond Faire instr FinTantQue
variantes
(imbrications possibles)
Tableaux, listes chaînées
Piles, files
Sets et Maps
Graphes, arbres, arbres binaires de recherche
IPA – Catherine Faron Zucker 21
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;
élément en ligne i et colonne j :
matrice[i][j]
Matrice carrée :
int [][] matriceCarree = new int[7][7];
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 25
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
Pile : empiler/dépiler des éléments
statique ou dynamique selon qu'on utilise un
ajout d'un couple clé/valeur :
surnoms.put(“tartampion”, “dupont”);
suppression d'un couple clé/valeur :
surnoms.remove(“tartampion”);
IPA – Catherine Faron Zucker 30
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”);
à suivre...
IPA – Catherine Faron Zucker 34
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 35
PGCD(a, b) itératif
n <- a; m <- b;
TantQue m != 0 Faire
r <- n mod m
n <- m
m <- r
FinTantQue
retourner n
régner: pgcd(a,0) = a
combiner: pgcd(a,b)= pgcd(b,a mod b)=...
Algorithme
Si n = 0
Alors retourner 1
Sinon retourner n * fac(n-1)
FinSi
IPA – Catherine Faron Zucker 39
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
récursion ou itération