TP 4 -Arbres Binaires -



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

ARBRES BINAIRES DE RECHERCHE

Les arbres binaires de recherche

INF601 : Algorithme et Structure de données

Arbres binaires de recherche

TP3 : Manipulation et implantation de systèmes de fichiers 1

Plan du cours : Zippers. Des fonctions sur les listes avec position. Des fonctions sur les listes avec position

Quelques Algorithmes simples

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

Fonctions linéaires et affines. 1 Fonctions linéaires. 1.1 Vocabulaire. 1.2 Représentation graphique. 3eme

Cours 1 : La compilation

Représentation d un entier en base b

La mémoire. Un ordinateur. L'octet. Le bit

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

chapitre 4 Nombres de Catalan

Recherche dans un tableau

Classes et Objets en Ocaml.

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

Algorithmique et Programmation

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

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

Calculs de probabilités avec la loi normale

TP 1. Prise en main du langage Python

Compter à Babylone. L écriture des nombres

Le langage C. Séance n 4

Initiation à la Programmation en Logique avec SISCtus Prolog

Algorithmique, Structures de données et langage C

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

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

Maple: premiers calculs et premières applications

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Présentation du langage et premières fonctions

Conventions d écriture et outils de mise au point

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Algorithmique et Programmation, IMA

OLYMPIADES ACADEMIQUES DE MATHEMATIQUES. 15 mars 2006 CLASSE DE PREMIERE ES, GMF

Initiation à l algorithmique

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Informatique Générale

Feuille TD n 1 Exercices d algorithmique éléments de correction

STAGE IREM 0- Premiers pas en Python

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

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

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

CONFIGURATION DE L AUTOMATE SIEMENS

Licence Sciences et Technologies Examen janvier 2010

Conversion d un entier. Méthode par soustraction

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Problèmes de dénombrement.

Introduction à MATLAB R

Tutorial NL220. Objectifs : Fournir un guide utilisateur pour NL220. Présenter une méthodologie efficace pour la création de projet

Algorithme. Table des matières

La fonction exponentielle

Sélection du contrôleur

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

Vous revisiterez tous les nombres rencontrés au collège, en commençant par les nombres entiers pour finir par les nombres réels.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

modules & compilation

Programme Compte bancaire (code)

Présentation Windows Azure Hadoop Big Data - BI

CH.6 Propriétés des langages non contextuels

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Logiciel Libre Cours 3 Fondements: Génie Logiciel

TP, première séquence d exercices.

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Document Object Model (DOM)

LE RESEAU GLOBAL INTERNET

Domain Name Service (DNS)

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

1 Modélisation d être mauvais payeur

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Chapitre VI- La validation de la composition.

Théorie et Codage de l Information (IF01) exercices Paul Honeine Université de technologie de Troyes France

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

Java Naming and Directory Interface

EXCEL Les tableaux croisés dynamiques

Initiation au binaire

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

EVALUATIONS MI-PARCOURS CM2

2.4 Représentation graphique, tableau de Karnaugh

MOTO ELECTRIQUE. CPGE / Sciences Industrielles pour l Ingénieur TD06_08 Moto électrique DIAGRAMME DES INTER-ACTEURS UTILISATEUR ENVIRONNEMENT HUMAIN

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

TP1 : Initiation à Java et Eclipse

PROGRAMME D HABILETÉS EN FAUTEUIL ROULANT (WSP-F)

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

V- Manipulations de nombres en binaire

COURS D INDUSTRIES... Techniques d impression. Pascal Prévôt Fabien Rocher

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

MIS 102 Initiation à l Informatique

Introduction aux concepts d ez Publish

M é ca n ism e Pr o lo g. Ex e m p le

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Styler un document sous OpenOffice 4.0

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Cours de Master Recherche

Loi binomiale Lois normales

Transcription:

L3 Informatique Programmation fonctionnelle OCaml Année 2013/2014 TP 4 -Arbres Binaires - Un arbre binaire est une structure de données qui peut se représenter sous la forme d une hiérarchie dont chaque élément est appelé nœud, le nœud initial étant appelé racine. Dans un arbre binaire, chaque élément possède au plus deux éléments fils au niveau inférieur, habituellement appelés gauche et droit. Du point de vue de ces éléments fils, l élément dont ils sont issus au niveau supérieur est appelé père. Au niveau le plus élevé il y a donc un nœud racine. Au niveau directement inférieur, il y a au plus deux nœuds fils. En continuant à descendre aux niveaux inférieurs, on peut en avoir quatre, puis huit, seize, etc. c est-à-dire la suite des puissances de deux. Un nœud n ayant aucun fils est appelé feuille, sinon il est appelé nœud interne. Le nombre de niveaux total, autrement dit la distance entre la feuille la plus éloignée et la racine, est appelé hauteur de l arbre. Le niveau d un nœud est appelé profondeur. Exercice 1. Un type pour les arbres binaires Écrire le type bintree permettant de représenter les arbres binaires définis sur les entiers. Utiliser ce type pour définir l arbre binaire défini en Fig.1. (Tous les exemples dans la suite seront donnés sur cet arbre que nous noterons example tree.) Figure 1 Exercice 2. Compter 1. Écrire la fonction bintree count nodes qui calcule le nombre de nœuds dans un arbre binaire. 2. Écrire la fonction bintree count leaves qui calcule le nombre de feuilles dans un arbre binaire. 3. Écrire la fonction bintree count internal nodes qui calcule le nombre de nœuds internes dans un arbre binaire. # bintree_count_nodes;; # bintree_count_nodes example_tree;; - : int = 9 # bintree_count_leaves;; # bintree_count_leaves example_tree;; - : int = 4

# bintree_count_internal_nodes;; # bintree_count_internal_nodes example_tree;; - : int = 5 Exercice 3. Propriétés 1. Écrire la fonction bintree height qui retourne la hauteur d un arbre binaire. # bintree_height;; # bintree_height example_tree;; - : int = 4 Un arbre binaire est symétrique s il est possible de tracer une ligne verticale passant par la racine telle que le sous-arbre gauche est l image miroir du sous-arbre gauche. 2. Écrire la fonction bintree is mirror qui retourne vrai si un arbre binaire est l image mirroir d un autre arbre binaire. Nous nous intéressons ici à la structure des deux arbres binaires et pas aux valeurs des nœuds. 3. Écrire la fonction bintree is symmetric qui retourne vrai si un arbre binaire est symétrique. # bintree_is_mirror;; - : bintree -> bintree -> bool = <fun> # bintree_is_mirror Empty Empty;; # bintree_is_mirror (Node(1, Empty, Empty)) (Node(2, Empty, Empty));; # bintree_is_mirror (Node(1, Empty, Node(3, Empty, Empty))) (Node(2, Node(4, Empty, Empty), Empty));; # bintree_is_symmetric;; - : bintree -> bool = <fun> # bintree_is_symmetric Empty;; # bintree_is_symmetric (Node(1, Empty, Empty));; # bintree_is_symmetric (Node(1, Node(2, Empty, Empty), Node(2, Empty, Empty)));; # bintree_is_symmetric (Node(1, Node(2, Empty, Empty), Node(3, Empty, Empty)));; # bintree_is_symmetric (Node(1, Node(2, Empty, Empty), Empty));; - : bool = false Exercice 4. Collecter 1. Écrire la fonction bintree collect nodes qui retourne la liste des entiers stockés dans un arbre binaire. 2. Écrire la fonction bintree collect leaves qui retourne la liste des entiers stockés dans les feuilles d un arbre binaire. Page 2

3. Écrire la fonction bintree collect internal nodes qui retourne la liste des entiers stockés dans les nœuds internes d un arbre binaire. 4. Écrire la fonction bintree collect level qui retourne la liste des entiers stockés dans les nœuds à hauteur h dans un arbre binaire. # bintree_collect_nodes;; # bintree_collect_nodes example_tree;; - : int list = [1; 2; 4; 5; 7; 8; 3; 6; 9] # bintree_collect_leaves;; # bintree_collect_leaves example_tree;; - : int list = [4; 7; 8; 9] # bintree_collect_internal_nodes;; # bintree_collect_internal_nodes example_tree;; - : int list = [1; 2; 5; 3; 6] # bintree_collect_level;; - : bintree -> int -> int list = <fun> # bintree_collect_level example_tree 1;; - : int list = [1] # bintree_collect_level example_tree 2;; - : int list = [2; 3] # bintree_collect_level example_tree 3;; - : int list = [4; 5; 6] # bintree_collect_level example_tree 4;; - : int list = [7; 8; 9] # bintree_collect_level example_tree 5;; - : int list = [] Exercice 5. Visiter 1. Écrire la fonction bintree pre qui retourne la liste des entiers rencontrés dans un arbre binaire lors du parcours préfixe. 2. Écrire la fonction bintree post qui retourne la liste des entiers rencontrés dans un arbre binaire lors du parcours postfixe. 3. Écrire la fonction bintree in qui retourne la liste des entiers rencontrés dans un arbre binaire lors du parcours infixe. # bintree_visit_pre;; # bintree_visit_pre example_tree;; - : int list = [1; 2; 4; 5; 7; 8; 3; 6; 9] # bintree_visit_post;; # bintree_visit_post example_tree;; - : int list = [4; 7; 8; 5; 2; 9; 6; 3; 1] # bintree_visit_in;; # bintree_visit_in example_tree;; - : int list = [4; 2; 7; 5; 8; 1; 3; 9; 6] Page 3

Exercice 6. Rechercher Un arbre binaire de recherche est un arbre binaire tel que pour chaque nœud, les entiers stockés dans son sous-arbre gauche sont inférieurs ou égaux, et les entiers stockés dans son sous-arbre droit sont supérieurs. 1. Écrire la fonction bintree insert qui insert un entier dans un arbre binaire de recherche. 2. Écrire la fonction bintree search qui retourne vrai si un entier donné est dans un arbre binaire de recherche. # bintree_insert;; - : bintree -> int -> bintree = <fun> # bintree_insert Empty 1;; Node (1, Empty, Empty) # bintree_insert (bintree_insert Empty 1) 2;; Node (1, Empty, Node (2, Empty, Empty)) # bintree_insert (bintree_insert (bintree_insert Empty 1) 2) 3;; Node (1, Empty, Node (2, Empty, Node (3, Empty, Empty))) # bintree_insert (bintree_insert (bintree_insert Empty 1) 2) 0;; Node (1, Node (0, Empty, Empty), Node (2, Empty, Empty)) # bintree_search;; - : bintree -> int -> bool = <fun> Exercice 7. Modifier 1. Écrire la fonction bintree double qui retourne un nouvel arbre binaire dans lequel tous les entiers ont été multiplié par deux. 2. Écrire la fonction bintree apply qui prend en argument une fonction de type int -> int et retourne un nouvel arbre binanire tous les entiers sont obtenus en appliquant cette fonction à l entier stocké dansle nœud. Réécricre la fonction bintree double en utilisant la fonction bintree apply. 3. Écrire la fonction bintree rotate qui échange les sous-arbres gauche et droit en tout nœud. 4. Écrire la fonction bintree sum subtree qui retourne un nouvel arbre binaire dans lequel chaque entier est la somme de tous les entiers stockées dans le sous-arbre enraciné en ce nœud. # bintree_double;; # bintree_double example_tree;; Node (2, Node (4, Node (8, Empty, Empty), Node (10, Node (14, Empty, Empty), Node (16, Empty, Empty))), Node (6, Empty, Node (12, Node (18, Empty, Empty), Empty))) # bintree_apply;; - : bintree -> (int -> int) -> bintree = <fun> # bintree_apply example_tree (function x -> x + 1);; Node (2, Page 4

Node (3, Node (5, Empty, Empty), Node (6, Node (8, Empty, Empty), Node (9, Empty, Empty))), Node (4, Empty, Node (7, Node (10, Empty, Empty), Empty))) # bintree_rotate;; # bintree_rotate example_tree;; Node (1, Node (3, Node (6, Empty, Node (9, Empty, Empty)), Empty), Node (2, Node (5, Node (8, Empty, Empty), Node (7, Empty, Empty)), Node (4, Empty, Empty))) # bintree_sum_subtree;; # bintree_sum_subtree example_tree;; Node (45, Node (26, Node (4, Empty, Empty), Node (20, Node (7, Empty, Empty), Node (8, Empty, Empty))), Node (18, Empty, Node (15, Node (9, Empty, Empty), Empty))) Page 5