SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Parcours d’arbres
Présenté par Yann Caron
skyguide
ENSG Géomatique
Plan du cours
Parcours en profondeur
Pre-order
In-Order
Post-Order
Parcours en largeur
Implémentation
Enjeu
✔ Un arbre est une structure non linéaire
NB : Liste chaînée en est un cas particulier
✔ Dans quel ordre parcourir ses nœuds
✔ Phase de CodeGen en compilation
3/22
Parcours en profondeur
Pre-Order
✔ Effectue l’action
✔ S’il existe, traverser
l’élément gauche
✔ S’il existe, traverser
l’élément à droite
✔ Ordre
A, B, D, E, F, G, C, F
5/22
DD
BB
FF
EE
GG
AA
CC
Démo : tree-dfs-preorder.al
Récursif
FF
In-Order
✔ S’il existe, traverser
l’élément gauche
✔ Effectue l’action
✔ S’il existe, traverser
l’élément à droite
✔ Ordre
D, B, F, E, G, A, F, C
6/22
Démo : tree-dfs-inorder.al
Récursif
DD
BB
FF
EE
GG
AA
CC
FF
Post-Order
✔ S’il existe, traverser
l’élément gauche
✔ S’il existe, traverser
l’élément à droite
✔ Effectue l’action
✔ Ordre
D, F, G, E, B, F, C, A
7/22
Démo : tree-dfs -postorder.al
Récursif
DD
BB
FF
EE
GG
AA
CC
FF
Algorithme générique
✔ Effectue l’action pré-order
✔ Pour tous les éléments enfants :
✔ Traverser l’élément enfant
✔ Effectue l’action in-order
✔ Effectue l’action
8/22
Récursif
Parcours en largeur
En largeur
✔ Créer une file
✔ Ajouter la racine
✔ Tant que la file n’est
pas vide
✔ Retirer l’élément
✔ Action
✔ Ajouter tous les
éléments enfants
✔ Ordre
A, B, C, D, E, F, G, H
10/22
DD
BB
GG
EE
HH
AA
CC
Démo : tree-bfs.al
FF
Impératif
Algorithme générique
✔ Créer une structure (pile, file, file de priorité)
✔ Ajouter l’élément racine
✔ Tant que la structure n’est pas vide
✔ Retirer l’élément
✔ Effectuer le traitement (ou tester le critère
recherche)
✔ Ajouter les enfants de l’élément dans la
structure
11/22
Impératif
Observations
✔ Si la structure est une pile (stack)
✔ Parcours en profondeur pre-order
✔ Attention : il faut inverser l’ordre des
enfants lorsqu’ils sont ajoutés à la pile
✔ Si la structure est une file (queue)
✔ Parcours en largeur
12/22
Observations
✔ Si la structure est une file de priorité :
✔ Et si la priorité c’est le cumul de distance
✔ = Algorithme de Dijkstra
✔ Et si la priorité est la distance de
l’hypoténuse
✔ = A* search
13/22
Démo : tree-generic.al
Autres algorithmes
✔ Best first search
✔ Algorithme de Dijkstra
✔ A* search
✔ Bean search (profondeur limitée)
✔ Min-max – alpha-beta
✔ Binary search tree
✔ Kd-tree
✔ Quad-tree
14/22
Implémentation
Composite
✔ En programmation orientée objet le patron
de conception Composite permet de
déclarer un arbre
✔ Une super classe
✔ Une feuille qui en hérite
✔ Un nœuds qui en hérite et que contient une
liste d’éléments de type super classe
16/22
Composite
17/22
Source : GofComposite.java
Interpreter
✔ Le patron interpreter est une extension du
patron composite
✔ Il ajoute une méthode eval aux composants
qui permet une évaluation en profondeur en
fonction de la topologie de l’arbre
✔ Un contexte (l’ensemble des ressources
nécessaires) est passé en paramètre aux
méthodes interpret
18/22
Interpreter
19/22
Source : Interpreter
Visitor
✔ Il peut être utile de séparer la structure des
données de son implémentation
✔ Dans ce cas, on utilise un patron visiteur
✔ Celui ci intègre tous les comportements des
nœuds de l’arbre dans des méthodes
distinctes
✔ Il s’enregistre auprès de la structure par un
parcours en profondeur
✔ La méthode eval de l’interpreter se
contente de déléguer l’appel au visitor
20/22
Visitor
21/22
Source : GofVisitor.java
Merci de votre attention

Weitere ähnliche Inhalte

Mehr von Yann Caron

Mehr von Yann Caron (20)

Algea - 02 - gemmes
Algea - 02 - gemmesAlgea - 02 - gemmes
Algea - 02 - gemmes
 
Algea - 01 - hero
Algea - 01 - heroAlgea - 01 - hero
Algea - 01 - hero
 
ALGEA - 00 - introduction
ALGEA - 00 - introductionALGEA - 00 - introduction
ALGEA - 00 - introduction
 
Programmation Android - Tp2 Travaux pratiques - Geomatique
Programmation Android - Tp2 Travaux pratiques - GeomatiqueProgrammation Android - Tp2 Travaux pratiques - Geomatique
Programmation Android - Tp2 Travaux pratiques - Geomatique
 
Programmation Android - 10 - Spatialite
Programmation Android - 10 - SpatialiteProgrammation Android - 10 - Spatialite
Programmation Android - 10 - Spatialite
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
 
Programmation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridgeProgrammation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridge
 
Programmation Android 07 - Techniques avancées
Programmation Android 07 - Techniques avancéesProgrammation Android 07 - Techniques avancées
Programmation Android 07 - Techniques avancées
 
Programmation Android - 06 - Publication
Programmation Android - 06 - PublicationProgrammation Android - 06 - Publication
Programmation Android - 06 - Publication
 
Programmation Android - 05 - Google map
Programmation Android - 05 - Google mapProgrammation Android - 05 - Google map
Programmation Android - 05 - Google map
 
Programmation Android - 04 - Databases
Programmation Android - 04 - DatabasesProgrammation Android - 04 - Databases
Programmation Android - 04 - Databases
 
Programmation Android - 03 - IHM bases
Programmation Android - 03 - IHM basesProgrammation Android - 03 - IHM bases
Programmation Android - 03 - IHM bases
 
Programmation Android - 02 - Android
Programmation Android - 02 - AndroidProgrammation Android - 02 - Android
Programmation Android - 02 - Android
 
Programmation Android - 01 - Introduction
Programmation Android - 01 - IntroductionProgrammation Android - 01 - Introduction
Programmation Android - 01 - Introduction
 
Programmation Android - 00 - Présentation
Programmation Android - 00 - PrésentationProgrammation Android - 00 - Présentation
Programmation Android - 00 - Présentation
 
In01 - Programmation Android - 07 - techniques avancées
In01 - Programmation Android - 07 - techniques avancéesIn01 - Programmation Android - 07 - techniques avancées
In01 - Programmation Android - 07 - techniques avancées
 
In01 - Programmation Android - Travaux pratiques
In01 - Programmation Android - Travaux pratiquesIn01 - Programmation Android - Travaux pratiques
In01 - Programmation Android - Travaux pratiques
 
In01 - Programmation Android - 06 - publication
In01 - Programmation Android - 06 - publicationIn01 - Programmation Android - 06 - publication
In01 - Programmation Android - 06 - publication
 
In01 - Programmation Android - 05 - Google map
In01 - Programmation Android - 05 - Google mapIn01 - Programmation Android - 05 - Google map
In01 - Programmation Android - 05 - Google map
 
Cours CNAM In01 - Programmation Android - Septembre 2014
Cours CNAM In01 - Programmation Android - Septembre 2014Cours CNAM In01 - Programmation Android - Septembre 2014
Cours CNAM In01 - Programmation Android - Septembre 2014
 

Kürzlich hochgeladen

conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
mansouriahlam
 

Kürzlich hochgeladen (7)

firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdf
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestion
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 
optimisation logistique MLT_231102_155827.pdf
optimisation logistique  MLT_231102_155827.pdfoptimisation logistique  MLT_231102_155827.pdf
optimisation logistique MLT_231102_155827.pdf
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 

Théorie des langages - 01.1 - Parcours d'arbres

  • 1. Parcours d’arbres Présenté par Yann Caron skyguide ENSG Géomatique
  • 2. Plan du cours Parcours en profondeur Pre-order In-Order Post-Order Parcours en largeur Implémentation
  • 3. Enjeu ✔ Un arbre est une structure non linéaire NB : Liste chaînée en est un cas particulier ✔ Dans quel ordre parcourir ses nœuds ✔ Phase de CodeGen en compilation 3/22
  • 5. Pre-Order ✔ Effectue l’action ✔ S’il existe, traverser l’élément gauche ✔ S’il existe, traverser l’élément à droite ✔ Ordre A, B, D, E, F, G, C, F 5/22 DD BB FF EE GG AA CC Démo : tree-dfs-preorder.al Récursif FF
  • 6. In-Order ✔ S’il existe, traverser l’élément gauche ✔ Effectue l’action ✔ S’il existe, traverser l’élément à droite ✔ Ordre D, B, F, E, G, A, F, C 6/22 Démo : tree-dfs-inorder.al Récursif DD BB FF EE GG AA CC FF
  • 7. Post-Order ✔ S’il existe, traverser l’élément gauche ✔ S’il existe, traverser l’élément à droite ✔ Effectue l’action ✔ Ordre D, F, G, E, B, F, C, A 7/22 Démo : tree-dfs -postorder.al Récursif DD BB FF EE GG AA CC FF
  • 8. Algorithme générique ✔ Effectue l’action pré-order ✔ Pour tous les éléments enfants : ✔ Traverser l’élément enfant ✔ Effectue l’action in-order ✔ Effectue l’action 8/22 Récursif
  • 10. En largeur ✔ Créer une file ✔ Ajouter la racine ✔ Tant que la file n’est pas vide ✔ Retirer l’élément ✔ Action ✔ Ajouter tous les éléments enfants ✔ Ordre A, B, C, D, E, F, G, H 10/22 DD BB GG EE HH AA CC Démo : tree-bfs.al FF Impératif
  • 11. Algorithme générique ✔ Créer une structure (pile, file, file de priorité) ✔ Ajouter l’élément racine ✔ Tant que la structure n’est pas vide ✔ Retirer l’élément ✔ Effectuer le traitement (ou tester le critère recherche) ✔ Ajouter les enfants de l’élément dans la structure 11/22 Impératif
  • 12. Observations ✔ Si la structure est une pile (stack) ✔ Parcours en profondeur pre-order ✔ Attention : il faut inverser l’ordre des enfants lorsqu’ils sont ajoutés à la pile ✔ Si la structure est une file (queue) ✔ Parcours en largeur 12/22
  • 13. Observations ✔ Si la structure est une file de priorité : ✔ Et si la priorité c’est le cumul de distance ✔ = Algorithme de Dijkstra ✔ Et si la priorité est la distance de l’hypoténuse ✔ = A* search 13/22 Démo : tree-generic.al
  • 14. Autres algorithmes ✔ Best first search ✔ Algorithme de Dijkstra ✔ A* search ✔ Bean search (profondeur limitée) ✔ Min-max – alpha-beta ✔ Binary search tree ✔ Kd-tree ✔ Quad-tree 14/22
  • 16. Composite ✔ En programmation orientée objet le patron de conception Composite permet de déclarer un arbre ✔ Une super classe ✔ Une feuille qui en hérite ✔ Un nœuds qui en hérite et que contient une liste d’éléments de type super classe 16/22
  • 18. Interpreter ✔ Le patron interpreter est une extension du patron composite ✔ Il ajoute une méthode eval aux composants qui permet une évaluation en profondeur en fonction de la topologie de l’arbre ✔ Un contexte (l’ensemble des ressources nécessaires) est passé en paramètre aux méthodes interpret 18/22
  • 20. Visitor ✔ Il peut être utile de séparer la structure des données de son implémentation ✔ Dans ce cas, on utilise un patron visiteur ✔ Celui ci intègre tous les comportements des nœuds de l’arbre dans des méthodes distinctes ✔ Il s’enregistre auprès de la structure par un parcours en profondeur ✔ La méthode eval de l’interpreter se contente de déléguer l’appel au visitor 20/22
  • 22. Merci de votre attention