INF220 - Algo DUT SRC1 - Cours 2

  • 2,704 views
Uploaded on

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

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,704
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
61
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

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