Conception de Site Webs Interactifs Cours 3 Patrick Reuter [email protected].
Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences...
-
Upload
heloise-martineau -
Category
Documents
-
view
110 -
download
0
Transcript of Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences...
Algorithmes et structures de données
avancées
Cours 1+2+3 Patrick Reutermaître de conférences
http://www.labri.fr/~preuter
Déroulement
• CM mardi 8h30 – 9h30
• TD/TP en alternance mardi de 10h00–11h30
Motivation
• Niklaus Wirth, ETH Zuerich, 1976« Algorithms + Data Structures = Programs »
Motivation
Structure de donnée:
p.ex. fantôme- couleur - position- direction- aggressif ou pas ?
Algorithmes:
p.ex. mettre a jour lemeilleur score
Motivation
Structure de donnée:
- tableau a 2 dimension
Algorithmes:
- surtout I.A.
Motivation
Structure de donnée :
Pile
LIFO(Last In First Out)
Motivation
Structure de donnée :
File
FIFO(First In First Out)
Aussi: File à priorité
Motivation
8.168.684.336 pages
Comment ça marche ?
01
m-1
JOEASM
SAM
h
AC
… …
Table de hachage
Fonction de hachage
Adressage indirecteh(c) pas forcément injective
Adressage directeh(c) injective
Résolution des collisions par adressage ouvert
Résolution des collisions par chaînage externe
sondage linéaire hi(c) = (h(c) + i)
mod m
Sondage quadratiquehi(c) = (h(c) + a*i + b*i2)
mod m
ASDA
• Nouvelles structures de données– Arbres– Graphes
• Preuves
• Récursivité/Récurrence
• Théorie de la complexité
• …
Motivation
Structure de donnée :
Arbre(pour l’éliminationdes parties cachées)
Motivation
Structure de donnée :
Graphe(pour plannifier destrajets)
Rappel sur la récurrence
Factoriel
• 0! = 1• 1! = 1• 2! = 1*2• 3! = 1*2*3• 4! = 1*2*3*4• 5! = 1*2*3*4*5• 6! = 1*2*3*4*5*6• n! = 1*2*3*4*5*6* .. * (n-1) * n
Factoriel
• Deux manières de faire :– Itératif– Récursif
Itératiffonction factorielBoucle(n : integer): integer;var i,res : integer;début
res := 1;i := 1;tant que i<=n faire
res := res * i;i := i + 1;
fin tant queresult := res;
fin
Rappel
Fonction définie par récurrence
Une fonction définie par récurrence se caractérise par deux propriétes :
• La fonction est définie par elle-meme, c-à-d. la fonction appelle elle-meme dans le corps de la fonction
• L’appel (ou les appels) de la fonction par elle-meme est isolé par une condition, la condition d’arret, pour éviter les appels infinis.
Sondage
function factoriel(n : integer) : integer;var resultat : integer;
begin
if (n = 0) OR (n = 1) thenresultat := 1
else resultat := n * factoriel(n-1);result := resultat;
end;
Sondage
function factoriel(n : integer) : integer;var resultat : integer;
begin
if (n = 0) OR (n = 1) thenresultat := 1
else resultat := n * factoriel(n-1);result := resultat;
end;
Sondage
function factoriel(n : integer) : integer;var resultat : integer;
begin
if (n = 0) OR (n = 1) thenresultat := 1
else resultat := n * factoriel(n-1);result := resultat;
end;
Condition d’arrêt : la fonction n’est plus appelé par elle-même
Sondage
function factoriel(n : integer) : integer;var resultat : integer;
begin
if (n = 0) OR (n = 1) thenresultat := 1
else resultat := n * factoriel(n-1);result := resultat;
end;
Condition d’arrêt : la fonction n’est plus appelé par elle-même
Appel de la fonction par elle-même
Sondage
function factoriel(n : integer) : integer;var resultat : integer;beginWriteLn(‘debut de fonction : n = ‘,n);if (n = 0) OR (n = 1) then
resultat := 1else resultat := n * factoriel(n-1);WriteLn(‘fin de fonction : resultat = ‘,resultat);result := resultat;
end
• Appel de fonction : factoriel(5);
• factoriel := 5 * factoriel(5 - 1);
• factoriel := 5 * (4 * factoriel(4 - 1));
• factoriel := 5 * (4 * (3 * factoriel(3 - 1)));
• factoriel := 5 * (4 * (3 * (2 * factoriel(2 - 1))));
• factoriel := 5 * (4 * (3 * (2 * (1 ))));
Rappel : Listes
suivant
cle
nomannee
premier
suivant
cle
nomannee
suivant
cle
nomannee
suivant
cle
nomannee …
typep_t_liste_simple = ^t_liste_simple;
t_liste_simple = recordcle : integer;nom : string;annee : integer;...
suivant : p_t_liste_simple;end;
Afficher tous les éléments
• Itératif
• Récursif
Itératif{ Afficher les éléments de la liste }
temp := premier;
while (NOT (temp = NIL)) do
begin
WriteLn(temp^.annee);
temp := temp^.suivant;
fin;
suivant
cle
nomannee
premier
suivant
cle
nomannee
suivant
cle
nomannee
suivant
cle
nomannee …
temp
{ Afficher les éléments de la liste }
temp := premier;
while (NOT (temp = NIL)) do
begin
WriteLn(temp^.annee);
temp := temp^.suivant;
fin;
Itératif
suivant
cle
nomannee
premier
suivant
cle
nomannee
suivant
cle
nomannee
suivant
cle
nomannee …
temp
Afficher tous les éléments :Récursif
procedure afficherListe(temp : p_t_liste_simple);
suivant
cle
nomannee
premier
suivant
cle
nomannee
suivant
cle
nomannee
suivant
cle
nomannee …
temp
Afficher tous les éléments
procedure afficherListe(temp : p_t_liste_simple);begin if (temp <> NIL) then begin WriteLn('Element annee : ', temp^.annee); afficherListe(temp^.suivant); end;end;
Sondage …
• Recherche linéare dans un tableau non-trié– O(n)
• Recherche linéare dans une liste non-trié– O(n)
• Recherche dans un tableau trié – O(log n) (par dichotomie)
• Recherche dans une liste triée – O(n)
• Table de Hachage HT– Suivant la fonction de hachage h(t), au mieux O(1),
au pire O(n)
Complexité asymptotique
Chercher Ajouter Enlever
Tableau non trié: O(n) O(n) O(n)
Liste non triée: O(n) O(1) O(1)
Tableau trié: O(lg n) O(n) O(n)
Liste trié : O(n) O(1) O(1)
Arbre binaire:
Arbres binaires
Parcours en profondeur : 1 2 4 5 7 8 3 6 9 Parcours en largeur : 1 2 3 4 5 6 7 8 9
Arbres binaires- structure de données qui peut se représenter sous la forme d'une hiérarchie
- chaque élément est appelé nœud
- le nœud initial est appelé racine.
- chaque nœud possède au plus deux éléments fils au niveau inférieur, habituellement appelés fils gauche et fils droit.
- l'élément d’un nœud fils au niveau supérieur est appelé père.
- au niveau le plus élevé, il y a donc un nœud racine.
- un nœud n'ayant aucun fils est appelé feuille.
- les nœuds ayant au moins un fils sont appelés nœuds internes.
- le nombre de niveaux total, autrement dit la distance entre la feuille la plus éloignée et la racine est appelé profondeur ou hauteur de l'arbre.
- Autrement dit : La hauteur d'un arbre est la longueur du plus grand chemin de la racine à une feuille.
Arbres binaires
Un arbre binaire est un graphe connexe acyclique, tel que le degré de chaque nœud soit au plus 3, et celui de la racine au plus 2.
HAUTEUR : 3
Arbres binaires
• Arbre binaire entier est un arbre dont tous les nœuds possèdent zéro ou deux fils.
• Arbre binaire parfait (complet) est un arbre binaire entier dans lequel toutes les feuilles sont à la même distance de la racine.
– Un arbre binaire complet de hauteur h contient donc 2h+1-1 nœuds, – et son nombre de feuilles est : Fh = 2h.
• Arbre binaire dégénéré est un arbre binaire dans lequel tous ses noeuds n'ont qu'un seul descendant.
Arbres binaires
• Stockage dans un tableau
+
* 6
2 3
1
2 3
4 5
1 + 2 3
2 * 4 5
3 6 0 0
4 2 0 0
5 3 0 0
No contenu gauche droite
Arbres binaires
+3
racine^
racine
+gauche droitecontenu
+3
*gauche droitecontenu
+3
2gauche droitecontenu
+3
3gauche droitecontenu
+3
6gauche droitecontenu
type p_t_noeud = ^t_nœud; t_noeud = RECORD
cle : integer;contenu : char;gauche : p_t_noeud;droite : p_t_noeud;
END;
Arbres binaires
Méthode d'itération des arbres binaires
• Préfixe,
• Postfixe,
• Infixe
Arbres binaires
• Préfixe,
+
* 6
2 3
Arbres binaires
• Préfixe, + (* (2),( 3)),( 6) (avec parcours en profondeur)
• Postfixe,
+
* 6
2 3
Arbres binaires
• Préfixe, + (* (2),( 3)),( 6)
• Postfixe, ((2), (3) *),( 6) +
• Infixe :+
* 6
2 3
Arbres binaires
• Préfixe, + (* (2),( 3)),( 6)
• Postfixe, ((2), (3) *),( 6) +
• Infixe : ((2)*(3)) + (6) +
* 6
2 3
Arbres binaires
• Infixe
procedure parcourir( nœud : p_t_noeud )début
si NOT(nœud^.gauche = NIL)alorsparcourir(nœud^.gauche)
WriteLn(nœud.contenu);
si NOT(nœud^.droite = NIL)alorsparcourir(nœud^.droite)
finfin
+
* 6
2 3
Arbre binaire de recherche
Arbre binaire de recherche
• un arbre binaire dans lequel – chaque nœud possède une clé, – telle que chaque nœud du sous-arbre gauche ait une
clé inférieure ou égale à celle du nœud considéré, – et que chaque nœud du sous-arbre droit possède
une clé supérieure ou égale à celle-ci– Les nœuds que l'on ajoute deviennent des feuilles de
l'arbre. – on pourra interdire ou non des clés de valeur égale.
Complexité asymptotique
Arbre balancé AVL Arbre non balancé
Trouver: O(lg n) O(n)
Insérer: O(lg n) O(n)
Enlever: O(lg n) O(n)
Arbre binaire balancé
• Arbre balancé AVL – nommé selon ses auteurs
– [Andelson-Velskii et Landis, 1962]
– Pour chaque nœud, la hauteur du sous-arbre gauche (SAG) et du sous-arbe droite (SAD) diffèrent au plus de un
Enigme
Peut-on commencer une promenade sur une île ou une rive, terminer la promenade sur n'importe quelle autre (ou la même) île ou rive en passant exactement une fois sur chacun des ponts?