Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences...

48
Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences http://www.labri.fr/~preuter

Transcript of Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences...

Page 1: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Algorithmes et structures de données

avancées

Cours 1+2+3 Patrick Reutermaître de conférences

http://www.labri.fr/~preuter

Page 2: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Déroulement

• CM mardi 8h30 – 9h30

• TD/TP en alternance mardi de 10h00–11h30

Page 3: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Motivation

• Niklaus Wirth, ETH Zuerich, 1976« Algorithms + Data Structures = Programs »

Page 4: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Motivation

Structure de donnée:

p.ex. fantôme- couleur - position- direction- aggressif ou pas ?

Algorithmes:

p.ex. mettre a jour lemeilleur score

Page 5: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Motivation

Structure de donnée:

- tableau a 2 dimension

Algorithmes:

- surtout I.A.

Page 6: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Motivation

Structure de donnée :

Pile

LIFO(Last In First Out)

Page 7: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Motivation

Structure de donnée :

File

FIFO(First In First Out)

Aussi: File à priorité

Page 8: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Motivation

8.168.684.336 pages

Comment ça marche ?

01

m-1

JOEASM

SAM

h

AC

… …

Page 9: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 10: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

ASDA

• Nouvelles structures de données– Arbres– Graphes

• Preuves

• Récursivité/Récurrence

• Théorie de la complexité

• …

Page 11: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Motivation

Structure de donnée :

Arbre(pour l’éliminationdes parties cachées)

Page 12: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Motivation

Structure de donnée :

Graphe(pour plannifier destrajets)

Page 13: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Rappel sur la récurrence

Page 14: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 15: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Factoriel

• Deux manières de faire :– Itératif– Récursif

Page 16: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 17: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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.

Page 18: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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;

Page 19: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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;

Page 20: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 21: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 22: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 23: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

• 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 ))));

Page 24: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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;

Page 25: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Afficher tous les éléments

• Itératif

• Récursif

Page 26: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 27: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

{ 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

Page 28: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 29: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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;

Page 30: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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)

Page 31: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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:

Page 32: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 33: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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.

Page 34: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 35: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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.

Page 36: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 37: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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;

Page 38: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Arbres binaires

Méthode d'itération des arbres binaires

• Préfixe,

• Postfixe,

• Infixe

Page 39: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Arbres binaires

• Préfixe,

+

* 6

2 3

Page 40: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Arbres binaires

• Préfixe, + (* (2),( 3)),( 6) (avec parcours en profondeur)

• Postfixe,

+

* 6

2 3

Page 41: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Arbres binaires

• Préfixe, + (* (2),( 3)),( 6)

• Postfixe, ((2), (3) *),( 6) +

• Infixe :+

* 6

2 3

Page 42: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Arbres binaires

• Préfixe, + (* (2),( 3)),( 6)

• Postfixe, ((2), (3) *),( 6) +

• Infixe : ((2)*(3)) + (6) +

* 6

2 3

Page 43: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 44: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

Arbre binaire de recherche

Page 45: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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.

Page 46: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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)

Page 47: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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

Page 48: Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences preuter.

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?