INF220 - Algo DUT SRC1 - Cours 2
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

INF220 - Algo DUT SRC1 - Cours 2

on

  • 2,934 views

Erratum :

Erratum :
Défiler un élément d'une file = lire la valeur de l'élément au début de la file en l'enlevant de la file

Statistics

Views

Total Views
2,934
Views on SlideShare
849
Embed Views
2,085

Actions

Likes
0
Downloads
60
Comments
0

3 Embeds 2,085

http://www.lirmm.fr 2065
http://www2.lirmm.fr 19
http://www.onlydoo.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

INF220 - Algo DUT SRC1 - Cours 2 Presentation Transcript

  • 1. DUT SRC – IUT de Marne-la-Vallée 15/02/2012 INF220 - Algorithmique Cours 2 Listes et arbres Philippe Gambette
  • 2. Résumé de lépisode précédent• RécursivitéUn algorithme récursif = un algorithme qui sappelle lui-mêmeOn suppose que : * on sait construire/calculer le premier objet (initialisation) * à partir du (n-1)-ième objet on sait construire/calculer le n-ième (hérédité)alors on arrive à construire/calculer tous les objets. algo(param1) sortie de algo(param2) sortie de algo(param3) algo(param2) algo(param3)• TriPour ranger un ensemble déléments tous comparables deux à deux selon uncertain ordre.Cas de base : tri dun tableau dentiers pour lordre ≤Plusieurs algorithmes possibles : - tri par sélection (cours) plus ou moins - tri à bulles (cours + TD3) rapide... compter - tri par insertion (TD3) le nombre de - ... comparaisons
  • 3. Sources • Cours de Jean-François Berdjugin à lIUT de Grenoble http://berdjugin.com/enseignements/inf/inf220/ • Cours de Xavier Heurtebise à lIUT de Provence http://x.heurtebise.free.fr • Le livre de Java premier langage, dA. Tasso • http://xkcd.com, http://xkcd.free.fr
  • 4. Plan des cours du semestre • Listes • Piles et files • Arbres
  • 5. Plan des cours du semestre • Listes • Piles et files • Arbres
  • 6. Intérêt des listes Le problème des tableaux : - taille fixe - insertion “difficile” dun élément - suppression “difficile” dun élément
  • 7. Intérêt des listes Lintérêt des listes : - taille variable - insertion facile dun élément - suppression facile dun élément Mais : - accès “difficile” au i-ième élément
  • 8. Définition récursive dune liste “simplement chaînée” Une liste “simplement chaînée” est : - soit une liste vide - soit une première case qui contient une valeur, et qui pointe vers une liste
  • 9. Définition récursive dune liste dentiers Une liste dentiers est : - soit une liste vide - soit une première case qui contient un entier, et qui pointe vers une liste dentiers
  • 10. Définition illustrée dune liste dentiers Une liste dentiers est : - soit une liste vide - soit une première case qui contient un entier, et qui pointe vers une liste dentiers NULL 5 6
  • 11. Définition illustrée dune liste dentiers Une liste dentiers est : - soit une liste vide - soit une première case qui contient un entier, et qui pointe vers une liste dentiers NULL 5 6 Liste “simplement chaînée” : la chaîne dune ancre Quand lancre est jetée et toute la chaîne déroulée, on a facilement accès au premier maillon (sur le bateau). Pour les suivants il faut remonter lancre. Quand on a un maillon sous les yeux on peut facilement le supprimer (le casser et accrocher le précédent au suivant), en insérer un... Source image : http://virginiejmr.free.fr/serie_salle_de_bain.htm
  • 12. Définition illustrée dune liste dentiers Une liste dentiers est : - soit une liste vide - soit une première case qui contient un entier, et qui pointe vers une liste dentiers NULL 5 6 L1 L2 L1 ← NULL L2 ← creeListe(5,creeListe(6, NULL))
  • 13. Définition illustrée dune liste dentiers Une liste dentiers est : - soit une liste vide - soit une première case qui contient un entier, et qui pointe vers une liste NULL dentiers NULL 5 6 L2 L1 L3 L2 L1 ← NULL L2 ← creeListe(5,creeListe(6, NULL)) L2 ← NULL L3 ← L1
  • 14. Fonctions de base sur les listes Une liste dentiers est : - soit une liste vide - soit une première case qui contient un entier, et qui pointe vers une liste dentiers NULL 5 6 L1 L2 L1 ← NULL L2 ← creeListe(5,creeListe(6, NULL))Sur une liste L1 ou L2, on peut : si L2 est non vide : si L2 est non vide :• savoir si elle est vide : • accéder à la valeur de • accéder à la liste quiL1 = NULL ? son premier élément : commence à la case suivante : tete(L2) suivant(L2)
  • 15. Fonctions de base sur les listes Une liste dentiers est : - soit une liste vide - soit une première case qui contient un entier, et qui pointe vers une liste dentiers NULL 5 6 L1 L2 L3 L1 ← NULL L2 ← creeListe(5,creeListe(6, NULL))Sur une liste L1 ou L2, on peut : si L2 est non vide : si L2 est non vide :• savoir si elle est vide : • accéder à la valeur de • accéder à la liste quiL1 = NULL ? son premier élément : commence à la case suivante : tete(L2) renvoie 5 suivant(L2) renvoie L3
  • 16. Fonctions de base sur les listes Une liste dentiers est : - soit une liste vide - soit une première case qui contient un entier, et qui pointe vers une liste dentiers NULL 5 6 L1 L2 L5 L2 ← creeListe(5,creeListe(6, NULL)) L1 ← NULL L5 ← suivant(L2)Sur une liste L1 ou L2, on peut : si L2 est non vide : si L2 est non vide :• savoir si elle est vide : • accéder à la valeur de • accéder à la liste quiL1 = NULL ? son premier élément : commence à la case suivante : tete(L2) renvoie 5 suivant(L2)
  • 17. Fonctions de base sur les listes Une liste dentiers est : - soit une liste vide - soit une première case qui contient un entier, et qui pointe vers une liste dentiers NULL 5 4 L1 L2 L5 L2 ← creeListe(5,creeListe(6, NULL)) L1 ← NULL L5 ← suivant(L2) tete(L5) ← 4Sur une liste L1 ou L2, on peut : si L2 est non vide : si L2 est non vide :• savoir si elle est vide : • accéder à la valeur de • accéder à la liste quiL1 = NULL ? son premier élément : commence à la case suivante : tete(L2) renvoie 5 suivant(L2)
  • 18. Fonctions de base sur les listes Une liste dentiers est : - soit une liste vide - soit une première case qui contient un entier, et qui pointe vers une liste dentiers NULL 5 4 L1 L2 L5 L3 L2 ← creeListe(5,creeListe(6, NULL)) L1 ← NULL L5 ← suivant(L2) tete(L5) ← 4Sur une liste L1 ou L2, on peut : si L2 est non vide : si L2 est non vide :• savoir si elle est vide : • accéder à la valeur de • accéder à la liste quiL1 = NULL ? son premier élément : commence à la case suivante : tete(L2) renvoie 5 suivant(L2) renvoie L3
  • 19. Premières fonctions sur les listes Modification de lélément en tête dune liste Ecrire lalgorithme remplaceTete qui prend en entrée une liste dentiers L et un entier a, et renvoie la liste L dont le premier élément est remplacé par a Algorithme remplaceTete 2 5 6 Entrées : liste dentiers L, entier a Type de sortie : liste dentiers Début L Fin
  • 20. Premières fonctions sur les listes Modification de lélément en tête dune liste Ecrire lalgorithme remplaceTete qui prend en entrée une liste dentiers L et un entier a, et renvoie la liste L dont le premier élément est remplacé par a Algorithme remplaceTete 2 5 6 Entrées : liste dentiers L, entier a Type de sortie : liste dentiers Début L remplaceTete(L,5) : 5 5 6 L Fin
  • 21. Premières fonctions sur les listes Modification de lélément en tête dune liste Ecrire lalgorithme remplaceTete qui prend en entrée une liste dentiers L et un entier a, et renvoie la liste L dont le premier élément est remplacé par a Algorithme remplaceTete 2 5 6 Entrées : liste dentiers L, entier a Type de sortie : liste dentiers Début L … tete(L) ← a remplaceTete(L,5) : renvoyer L 5 5 6 ... Fin L
  • 22. Premières fonctions sur les listes Modification de lélément en tête dune liste Ecrire lalgorithme remplaceTete qui prend en entrée une liste dentiers L et un entier a, et renvoie la liste L dont le premier élément est remplacé par a Algorithme remplaceTete 2 5 6 Entrées : liste dentiers L, entier a Type de sortie : liste dentiers Début L … tete(L) ← a remplaceTete(L,5) : renvoyer L 5 5 6 ... Fin L ne fonctionne pas sur la liste vide L L
  • 23. Premières fonctions sur les listes Modification de lélément en tête dune liste Ecrire lalgorithme remplaceTete qui prend en entrée une liste dentiers L et un entier a, et renvoie la liste L dont le premier élément est remplacé par a Algorithme remplaceTete 2 5 6 Entrées : liste dentiers L, entier a Type de sortie : liste dentiers Début L si L ≠ NULL alors : tete(L) ← a remplaceTete(L,5) : Fin Si 5 5 6 renvoyer L Fin L Facile pour les listes, facile pour les tableaux
  • 24. Premières fonctions sur les listes Suppression de lélément en tête dune liste Par exemple, supprimer 5 au début de la liste L=creeListe(5,creeListe(6, NULL)) 5 6 L
  • 25. Premières fonctions sur les listes Suppression de lélément en tête dune liste Par exemple, supprimer 5 au début de la liste L=creeListe(5,creeListe(6, NULL)) 5 6 L
  • 26. Premières fonctions sur les listes Suppression de lélément en tête dune liste Par exemple, supprimer 5 au début de la liste L=creeListe(5,creeListe(6, NULL)) 5 6 L ← suivant(L) L
  • 27. Premières fonctions sur les listes Suppression de lélément en tête dune liste Par exemple, supprimer 5 au début de la liste L=creeListe(5,creeListe(6, NULL)) 5 6 L ← suivant(L) L Facile pour les listes, “difficile” pour les tableaux
  • 28. Premières fonctions sur les listes Insertion dun élément en tête dune liste Par exemple, insérer 2 au début de la liste L=creeListe(5,creeListe(6, NULL)) 5 6 L
  • 29. Premières fonctions sur les listes Insertion dun élément en tête dune liste Par exemple, insérer 2 au début de la liste L=creeListe(5,creeListe(6, NULL)) 2 5 6 L creeListe(2,L)
  • 30. Premières fonctions sur les listes Insertion dun élément en tête dune liste Par exemple, insérer 2 au début de la liste L=creeListe(5,creeListe(6, NULL)) 2 5 6 L ← creeListe(2,L) L L Facile pour les listes, “difficile” pour les tableaux
  • 31. Premières fonctions sur les listes Valeur du i-ième élément dune liste Nécessite de parcourir la liste ! Écrire la fonction valeur qui prend en entrée une liste dentiers L et un entier i, et qui renvoie la valeur de la i-ième case de L, si elle existe, et -1 sinon. Algorithme valeur 2 5 6 Entrées : liste dentiers L, entier i Type de sortie : Variables : valeur(L,2) renvoie... Début L Fin
  • 32. Premières fonctions sur les listes Valeur du i-ième élément dune liste Nécessite de parcourir la liste ! Écrire la fonction valeur qui prend en entrée une liste dentiers L et un entier i, et qui renvoie la valeur de la i-ième case de L, si elle existe, et -1 sinon. Algorithme valeur 2 5 6 Entrées : liste dentiers L, entier i Type de sortie : Variables : valeur(L,2) renvoie 5 Début L Fin
  • 33. Premières fonctions sur les listes Valeur du i-ième élément dune liste Nécessite de parcourir la liste ! Écrire la fonction valeur qui prend en entrée une liste dentiers L et un entier i, et qui renvoie la valeur de la i-ième case de L, si elle existe, et -1 sinon.Algorithme valeur 2 5 6Entrées : liste dentiers L, entier i L3Type de sortie : entierVariables : entier resultatDébut L L L2 resultat ← -1 Si L≠NULL alors : Si i=1 alors : resultat ← tete(L) Sinon : resultat ← valeur(suivant(L),i-1) Fin Si Fin Si renvoyer resultatFin Facile pour les tableaux, “difficile” pour les listes
  • 34. Premières fonctions sur les listes Valeur du i-ième élément dune liste Nécessite de parcourir la liste ! Écrire la fonction valeur qui prend en entrée une liste dentiers L et un entier i, et qui renvoie la valeur de la i-ième case de L, si elle existe, et -1 sinon.Algorithme valeur 2 5 6Entrées : liste dentiers L, entier i L3Type de sortie : entierVariables : entier resultatDébut L L1 L2 resultat ← -1 Si L≠NULL alors : Arbre dexécution : Si i=1 alors : resultat ← tete(L) 6 valeur(L,3) valeur(L2,1) Sinon : resultat ← valeur(suivant(L),i-1) 6 6 Fin Si valeur(L1,2) Fin Si renvoyer resultatFin Facile pour les tableaux, “difficile” pour les listes
  • 35. Plan • Listes • Piles et files • Arbres
  • 36. Files et pilesFiles PilesFIFO “First In First Out” LIFO “Last In First Out”File dattente à la Poste Pile de documents à travailler
  • 37. Files et pilesFiles PilesFIFO “First In First Out” LIFO “Last In First Out”File dattente à la Poste Pile de documents à travailler Gestion des buffers activation de plusieurs sorts et effets à la suitehttp://www.dessinateur.biz/blog/tag/file-dattente/ http://fnhostile420.tumblr.com/post/1586779953/aporianonymous-i-have-a-to-do-pilehttp://img.clubic.com/02989454-photo-cisco-crs3.jpg http://imageshack.us/photo/my-images/268/magicthegatheringback.jpg/
  • 38. Files et pilesFiles PilesFIFO “First In First Out” LIFO “Last In First Out”File dattente à la Poste Pile de documents à travailler Pourquoi utiliser ces structures de données ? • Plus simple à programmer quune liste • Fonctions plus limitées, adaptées aux besoins Gestion des buffers activation de plusieurs sorts et effets à la suitehttp://www.dessinateur.biz/blog/tag/file-dattente/ http://fnhostile420.tumblr.com/post/1586779953/aporianonymous-i-have-a-to-do-pilehttp://img.clubic.com/02989454-photo-cisco-crs3.jpg http://imageshack.us/photo/my-images/268/magicthegatheringback.jpg/
  • 39. Files et pilesFiles PilesFIFO “First In First Out” LIFO “Last In First Out”File dattente à la Poste Pile de documents à travaillerQuatre fonctions : Quatre fonctions :- créer : créer une file vide - créer : créer une pile vide- enfiler : ajouter un élément en fin de - empiler : ajouter un élément en hautfile de la pile- défiler : lire la valeur de lélément à la - dépiler : lire la valeur de lélément enfin de la file en lenlevant de la file haut de la pile en lenlevant de la pile- tester si vide : savoir si la file est vide - tester si vide : savoir si la pile est vide Gestion des buffers activation de plusieurs sorts et effets à la suitehttp://www.dessinateur.biz/blog/tag/file-dattente/ http://fnhostile420.tumblr.com/post/1586779953/aporianonymous-i-have-a-to-do-pilehttp://img.clubic.com/02989454-photo-cisco-crs3.jpg http://imageshack.us/photo/my-images/268/magicthegatheringback.jpg/
  • 40. Files et piles implémentable avec liste implémentable avec listeFiles doublement chaînée Piles simplement chaînéeFIFO “First In First Out” LIFO “Last In First Out”File dattente à la Poste Pile de documents à travaillerQuatre fonctions : Quatre fonctions :- créer : créer une file vide - créer : créer une pile vide- enfiler : ajouter un élément en fin de - empiler : ajouter un élément en hautfile de la pile- défiler : lire la valeur de lélément à la - dépiler : lire la valeur de lélément enfin de la file en lenlevant de la file haut de la pile en lenlevant de la pile- tester si vide : savoir si la file est vide - tester si vide : savoir si la pile est vide Gestion des buffers activation de plusieurs sorts et effets à la suitehttp://www.dessinateur.biz/blog/tag/file-dattente/ http://fnhostile420.tumblr.com/post/1586779953/aporianonymous-i-have-a-to-do-pilehttp://img.clubic.com/02989454-photo-cisco-crs3.jpg http://imageshack.us/photo/my-images/268/magicthegatheringback.jpg/
  • 41. Plan • Listes • Piles et files • Arbres
  • 42. Intérêt des arbres Intérêt des arbres : • représentation dun objet qui a une structure arborée : → contenu dun disque dur : C: C:Users C:UsersPhilippe C:UsersGuest C:Work C:WorkINF120 C:WorkINF120Cours1.pdf C:WorkINF120Cours2.pdf C:WorkINF120TD1.pdf C:WorkINF220 • stockage astucieux déléments → trouver rapidement le minimum des valeurs stockées → stocker un dictionnaire de manière compacte : a l g o r t r ê t
  • 43. Arbre La “minute xkcd” - Arbre - Voici un arbre de noël avec un tas de cadeaux en dessous ! - … Lannée prochaine, on ne tinvitera pas à la maison. http://xkcd.com/835 http://xkcd.free.fr/?id=835
  • 44. Définition récursive dun arbre Un arbre : - soit une feuille, qui contient - soit un noeud qui contient une valeur, une valeur, mais na pas denfant et un tableau denfants dont chaque case pointe vers un arbre
  • 45. Définition illustrée dun arbre Un arbre : - soit une feuille, qui contient - soit un noeud qui contient une valeur, une valeur, mais na pas denfant et un tableau denfants dont chaque case pointe vers un arbre 5 A ← CreeArbre(5,[]) 5 6 2A A 3 racine 3 4A ← CreeArbre(5,[CreeArbre(6,[CreeArbre(2,[]),CreeArbre(3,[])]), CreeArbre(3,[CreeArbre(4,[]),CreeArbre(6,[])])]) 6 Si chaque tableau denfants a au plus deux cases, cest un arbre binaire.
  • 46. Fonctions de base sur les arbres Tester si larbre est une feuille : 5 6 2 estFeuille(A) A 3 3 4 Récupérer la valeur de la racine de larbre 6 racine(A) Récupérer le tableau des enfants de la racine de larbre enfants(A)
  • 47. Fonctions de base sur les arbres Tester si larbre est une feuille : 5 6 2 estFeuille(A) A 3 Type de sortie pour un arbre dentiers : un booléen 3 4 Récupérer la valeur de la racine de larbre 6 racine(A) Type de sortie pour un arbre dentiers : un entier Récupérer le tableau des enfants de la racine de larbre enfants(A) Type de sortie pour un arbre dentiers : un tableau darbres dentiers