Programme. Pimp A - info121a. Exemple: Arbres d Hierarchie. Traverse et Calculs dans Arbres. Tri Récursivité Dichotomie Arbre Graphe Examen blanc



Documents pareils
Les structures de données. Rajae El Ouazzani

Les arbres binaires de recherche

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Arbres binaires de recherche

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Quelques Algorithmes simples

SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : omarinmt@gmail.com

INF601 : Algorithme et Structure de données

Algorithmique, Structures de données et langage C

ARBRES BINAIRES DE RECHERCHE

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

INFO-F-105 Language de programmation I Séance VI

Cours de Programmation 2

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Chapitre VI- La validation de la composition.

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Java Licence Professionnelle CISII,

Introduction à MATLAB R

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Programmation Web. Madalina Croitoru IUT Montpellier

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Compression de Données - Algorithme de Huffman Document de Conception

Bases de programmation. Cours 5. Structurer les données

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Cours d Algorithmique et de Langage C v 3.0

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Claude Delannoy. 3 e édition C++

Initiation à l algorithmique

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Composants Logiciels. Le modèle de composant de CORBA. Plan

UE C avancé cours 1: introduction et révisions

Programmation en langage C

Cours d initiation à la programmation en C++ Johann Cuenin

Initiation. àl algorithmique et à la programmation. en C

Exercices sur SQL server 2000

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Projet de programmation (IK3) : TP n 1 Correction

Introduction à la programmation concurrente

Configurer la supervision pour une base MS SQL Server Viadéis Services

Machines virtuelles fonctionnelles (suite) Compilation ML Java

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

Algorithmique I. Algorithmique I p.1/??

Analyse de sécurité de logiciels système par typage statique

Encryptions, compression et partitionnement des données

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Génie Logiciel avec Ada. 4 février 2013

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Algorithmique et Programmation, IMA

Structures dynamiques Listes chaînées

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

Présentation Windows Azure Hadoop Big Data - BI

Recherche dans un tableau

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Programmation C++ (débutant)/instructions for, while et do...while

Cours de C. Allocation dynamique. Sébastien Paumier

Conventions d écriture et outils de mise au point

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Le langage C. Introduction, guide de reference

Programme Compte bancaire (code)

Corrigé des exercices sur les références

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Programmation Classique en langage C

Introduction au langage C

Django et PostgreSQL sous la charge


Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Cours 1 : La compilation

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Le langage C. Séance n 4

Once the installation is complete, you can delete the temporary Zip files..

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

PHP 5. La base de données MySql. A. Belaïd 1

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Compilation (INF 564)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Chapitre 1 : La gestion dynamique de la mémoire

Création et Gestion des tables

Objets et Programmation. origine des langages orientés-objet

Université de Strasbourg UFR de Mathématique et d'informatique. L2 Informatique Semestres S3 et S4. Structures de Données et Algorithmes 1 et 2

TP2 : tableaux dynamiques et listes chaînées

SUPPORT DE COURS. Langage C

Programmation en Java IUT GEII (MC-II1) 1

Cours 6 : Tubes anonymes et nommés

Assurance Qualité. Cours de génie logiciel. Renaud Marlet. LaBRI / INRIA (d'après A.-M. Hugues) màj 23/04/2007

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Derrière toi Une machine virtuelle!

Présentation du langage et premières fonctions

Pensez à vous inscrire... si ce n est pas encore fait

Le Langage De Description De Données(LDD)

Logiciel Libre Cours 3 Fondements: Génie Logiciel

INF 321 : mémento de la syntaxe de Java

.NET - Classe de Log

Chapitre 7. Récurrences

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Transcription:

Programme Pimp A - info121a Programmation IMPérative Avancée Burkhart Wolff Frédéric Vernier Tri Récursivité Dichotomie Arbre Graphe Examen blanc Recherche linéaire Diviser pour mieux régner Traverse et Calculs dans Arbres Exemple: Arbres d Hierarchie Arbres sont omniprésent Examples Représentations d arbres Parcours et Calculs etc. Exemple: Systeme de fichiers Freigabe Temp C:\ Windows oradexe Programme Installer oradata Visual Studio Borland Chemins comme moyens de structurer name spaces : C:\Temp\Freigabe\ Dokumente und Einstellungen

Exemple: Arbres d Hierarchie Example: Tas Exemple: Systeme de fichiers (represen ration exo- tique ) Tas (Heaps) père plus petits (plus grands) que ses fils Structure importante si on veut trouver un élément de priorité max ou min VITE peut être utilisé pour un tri (heapsort) Example: Arbre Syntaxique Example: Arbre Syntaxique Expressions et différentes notations lineares et textuelles while (b 0) if (a > b) a := a b else b := b a return(a) Programme et representation sous forme d arbre syntaxique

Example: Arbre Rouge-Noir Example: Arbre Rouge-Noir Proprietés: 1. Un nœud est soit rouge soit noir. 2. La racine est noire. 3. Le parent d'un nœud rouge est noir. 4. Le chemin de chaque feuille à la racine contient le même nombre de nœuds noirs. Proprietés 1. insertion et suppression en O(ln n), donc trier O(n*(ln n)) 2. recherche en O(ln n) Example: Recherche en Jeux n queens Recherche systéma tique des solutions en jeux Arbre implicit Example: Recherche Labyrinthe La recherche d une sortie d un laby- rinthe

Example: Recherche Labyrinthe Example: Recherche Labyrinthe La recherche d une sortie d un laby- rinthe La recherche d une sortie d un laby- rinthe représente un arbre implicitement Arbres, Arbres, Arbres Differentes formes d arbres [Wikipedia] Arbres : Definitions sont des graphes particuliers (voir: théorie de graphes) consistent des nœuds (lat: nodus) (autre terminologie: sommets) et une relation entre des nœuds: père et fils. Un nœuds sans père: racine, sans fils: feuille. le nombre maximale des fils dans un arbre M est appelé le degré de l arbre M arbres M avec degré 2 sont appelés binaires (3: ternaires, n-aires); le premier gauche(m), le deuxième droite(m).

Arbre implicite: Code C++ Revision: Réprèsentation dans un tableau arbre implicite dans le positionne ment #include <iostream>... enum Kind { Value, Operator ; enum OpKind { Mult, Add ; struct Entry { enum Kind kind; union { struct { int val; valuedata; struct { OpKind op; operatordata; kinddata; ; typedef vector<entry> Expr; Expr expr; Code C++ void mkvalueentry(int n) { Entry e; e.kind = Value; e.kinddata.valuedata.val = n; expr.push_back(e); void mkoperatorentry(opkind opn) { Entry e; e.kind = Operator; e.kinddata.operatordata.op = opn; expr.push_back(e); Code C++ void mk_syntaxtree(){ /* Postcond: sets expr to expresseion "2 * 3 + 4" */ mkvalueentry(2); mkvalueentry(3); mkoperatorentry(mult); mkvalueentry(4); mkoperatorentry(add); int get_right(int x) { /* Pre: 2 <= x < expr.size() */ return (x - 1); int get_left(int x) { /* Pre: 2 <= x < expr.size() */???

Arbre explicite C++-code Structure de donné auxiliaire: un Tas <ref, X> (angl: Heap) avec positions. elements clé: operations <ref> null <ref> create (<X> x) <X> get(<ref> ref) #include <iostream>... enum Kind { Value, Operator ; enum OpKind { Mult, Add ; struct Node { enum Kind kind; union { struct { int val; valuedata; struct { OpKind op; int left, right; operatordata; kinddata; ; typedef vector<node> Expr; Expr expr; C++-code C++-code /* The Heap */ int null = -1; int create_node(node node){ expr.push_back(e); return(expr.size()-1) Node get_node(int n){ return(expr[n]); // Constructors int mkvalueentry(int n) { Entry e; e.kind = Value; e.kinddata.valuedata.val = n; return(create_node(e)); void mkoperatorentry(opkind opn; int l,r) { Entry e; e.kind = Operator; e.kinddata.operatordata.op = opn; e.kinddata.operatordata.left=l; e.kinddata.operatordata.right=r; return(create_node(e)); // Selectors int get_left(int x) { // Pre: 0 <= x < expr.size() && e.kind == Operator return (get_node(x).kinddata.operatordata.left);...

C++-code C++-code // Recall: How to work on union types with switch es. // A printing function: void print_node(node e){ switch (e.kind) { case Value: cout<<(e.kinddata.valuedata.val)<<' ';break; case Operator:switch(e.kindData.operatorData.op){ case Mult : cout<<"*["<< e.kinddata.operatordata.left <<":" << e.kinddata.operatordata.right<<"]"; break; case Add : cout<<"+["<< e.kinddata.operatordata.left <<":" << e.kinddata.operatordata.right<<"]"; break; ; break;... int mk_syntaxtree(){ /* Postcond: sets expr to expresseion "2 * 3 + 4" */ int m1 = mkvalueentry(2); int m2 = mkvalueentry(3); int m3 = mkoperatorentry(mult,m1,m2); int m4 = mkvalueentry(4); int m5 = mkoperatorentry(add, m3,m4); return(m5); // or just: int mk_syntaxtree(){ /* Postcond: sets expr to expresseion "2 * 3 + 4" */ int m3 = mkoperatorentry(mult,mkvalueentry(2), mkvalueentry(3)); return(mkoperatorentry(add, m3,mkvalueentry(4))); Parcours d arbres Parcours d arbres Parcours en profondeur (depth-first) Variante A: Parcours Préfixe. Parcours en profondeur (depth-first) Variante B: Parcours Infixe. visiterpréfixe(arbre A) : visiter(a) if nonvide(gauche(a)) visiterpréfixe(gauche(a)) if nonvide(droite(a)) visiterpréfixe(droite(a)) visiterinfixe(arbre A) : if nonvide(gauche(a)) visiterinfixe(gauche(a)) visiter(a) if nonvide(droite(a)) visiterinfixe(droite(a))

Parcours d arbres Parcours sur arbres Parcours en profondeur (depth-first) Variante C: Parcours Postfixe. visiterpostfixe(arbre A) : if nonvide(gauche(a)) visiterpostfixe(gauche(a)) if nonvide(droite(a)) visiterpostfixe(droite(a)) visiter(a) Parcours en profondeur (depth-first) Variante D: Parcours Postfixe modifié pour l evaluation <C> evalpostfixe(arbre A) : <C> res1, res2; if nonvide(gauche(a)) res1 = evalpostfixe(gauche(a)) if nonvide(droite(a)) res2 = evalpostfixe(droite(a)) return(calculer(a, res1, res2)) Parcours d Arbres Parcours d arbres Comparison des Parcours: Rendu du parcours infixe : 4, 2, 7, 5, 8, 1, 3, 9, 6 Rendu du parcours postfixe : 4, 7, 8, 5, 2, 9, 6, 3, 1 Rendu du parcours préfixe : 1, 2, 4, 5, 7, 8, 3, 6, 9 Parcours en largeur (breadth first) Structure de donné auxiliaire: File <X> (angl: Queue) First-in-first-out principle (FIFO) elements clé: operations File<X> FileVide enfiler(file<x>, <X> x) <X> defiler(file<x>) (inout)

Parcours d arbres Parcours d arbres Parcours en largeur (breadth first) ParcoursLargeur(Arbre A){ f = FileVide; enfiler(racine(a), f); while (f = FileVide) { nœud = defiler(f); Visiter(nœud) //On choisit de faire une opération if (nonvide(gauche(nœud)) enfiler(gauche(nœud), f) if (nonvide(droite(nœud))) enfiler(droite(nœud), f) Rendu du parcours en largeur 1, 2, 3, 4, 5, 6, 7, 8, 9, Exo Exo: Max filetree. Exo: postfix-tree. Exo: Print expr in infix-order (para) Exo: Adv: How to modify that (min para).