Travaux dirigés n o 6

Documents pareils
Les arbres binaires de recherche

ARBRES BINAIRES DE RECHERCHE

Les structures de données. Rajae El Ouazzani

Arbres binaires de recherche

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

# 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>

Recherche dans un tableau

INF601 : Algorithme et Structure de données

chapitre 4 Nombres de Catalan

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

Algorithmique, Structures de données et langage C

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

Quelques Algorithmes simples

1 Recherche en table par balayage

TD3: tableaux avancées, première classe et chaînes

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

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

MIS 102 Initiation à l Informatique

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

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

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Classes et Objets en Ocaml.

Architecture des Systèmes d Information Architecture des Systèmes d Information

Application 1- VBA : Test de comportements d'investissements

Initiation à la programmation en Python

Algorithmique et Programmation, IMA

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

Module 16 : Les fonctions de recherche et de référence

Définitions. Numéro à préciser. (Durée : )

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

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

Présentation du langage et premières fonctions

Partie publique / Partie privée. Site statique site dynamique. Base de données.

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

Nouvelles propositions pour la résolution exacte du sac à dos multi-objectif unidimensionnel en variables binaires

Les deux points les plus proches

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

Plan du cours. Historique du langage Nouveautés de Java 7

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

Cours 1 : La compilation

Initiation à l algorithmique

Java Licence Professionnelle CISII,

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

I. Introduction aux fonctions : les fonctions standards

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

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)

Cours de Systèmes d Exploitation

Algorithmique I. Algorithmique I p.1/??

Continuité en un point

Initiation à la Programmation en Logique avec SISCtus Prolog

SOCLE COMMUN - La Compétence 3 Les principaux éléments de mathématiques et la culture scientifique et technologique

Le langage SQL Rappels

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

Algorithmes de recherche

Conventions d écriture et outils de mise au point

Algorithme. Table des matières

données en connaissance et en actions?

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

Algorithmes d'apprentissage

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

Utilisation d objets : String et ArrayList

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

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

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Compilation (INF 564)

EXCEL TUTORIEL 2012/2013

1. Introduction Création d'une requête...2

Cours de Programmation Impérative: Zones de mémoires et pointeurs

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

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

OCL - Object Constraint Language

Table des matières. Introduction

Pourquoi l apprentissage?

Formation Word/Excel. Présentateur: Christian Desrochers Baccalauréat en informatique Clé Informatique, 15 février 2007

Licence Sciences et Technologies Examen janvier 2010

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

Algorithmique et Programmation

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

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

Le Langage De Description De Données(LDD)

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

Plan de formation des Personnels en CUI-CAE Année

Relation d ordre. Manipulation des relations d ordre. Lycée Pierre de Fermat 2012/2013 Feuille d exercices

Quelques algorithmes simples dont l analyse n est pas si simple


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

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Représentation d un entier en base b

STAGE IREM 0- Premiers pas en Python

EXCEL Les tableaux croisés dynamiques

Cours de Master Recherche

Les algorithmes de base du graphisme

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

Excel Avancé. Plan. Outils de résolution. Interactivité dans les feuilles. Outils de simulation. La valeur cible Le solveur

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

La présente publication est protégée par les droits d auteur. Tous droits réservés.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Transcription:

Travaux dirigés n o 6 Lycée Kléber MPSI, Option Info 2014/2015

Exercice 1 (Indexation d un arbre binaire) Ecrire une fonction Caml indexation : ( f, n) arbre_binaire -> (string,string) arbre_binaire qui remplace toute l information des nœuds et feuilles de l arbre fourni en argument par le mot binaire correspondant à l indexation décrite dans le cours. Exercice 2 (Sous-arbres de profondeur donnée) Ecrire une fonction Caml liste_a_profondeur : ( f, n) arbre_binaire -> int -> ( f, n) arbre_binaire list qui prend en arguments un arbre binaire a et un entier n et qui renvoie la liste (éventuellement vide) de tous les sous-arbres de a dont la racine est à la profondeur n dans a. Exercice 3 (Calcul du squelette) Ecrire une fonction Caml deshabille : ( f, n) arbre_binaire -> squelette

qui prend en argument un arbre binaire et qui renvoie son squelette. Exercice 4 (Tri par tas ou heapsort) 1 Ecrire une fonction : liste_aleatoire n qui rende une liste de n nombres entiers aléatoires. Utiliser la fonction : random int k qui rend un entier pseudo aléatoire entre 0 et k. 2 Ecrire une fonction : trinaif L qui trie une liste d entiers par ordre croissant : le principe est de trier la queue de la liste, puis d insérer le premier élément en bonne place grce une fonction insert_ds_liste_triee x liste. Le but du jeu est d écrire un tri efficace en utilisant la structure de données de tas (heap). Un tas est un arbre binaire, dont les nœuds portent des éléments (ici des entiers) d un ensemble complètement ordonné (ici N ). La valeur portée par tout nœud est inférieure (ou égale, mais pas supérieure) aux valeurs portées par le fils gauche et le fils droit. La valeur en un nœud est donc inférieure ou égale à

toutes les valeurs portées par les descendants de ce nœud. Exercice 5 Un tas est décrit par le type : type Tas= Rien Noeud of int * Tas * Tas;;. On aura besoin de deux fonctions, l une pour ajouter un élément (un entier) dans un tas, l autre pour amputer un tas de sa racine. 3 Pour amputer, écrire une fonction : enlever untas qui utilise le principe suivant : soit (x,fg,fd) le tas. La racine du nouveau tas portera le petit élément entre fg et fd ; supposons que ce soit l élément de fg ; alors le nouveau fils gauche est enlever fg, et le nouveau fils droit est fd. 4 Pour ajouter un élément y, écrire une fonction : ajouter y untas. C est trivial si le tas est vide. Sinon soit x la valeur de la racine. La racine du nouveau tas est le minimum de x et de y. Le fils gauche du nouveau tas est le fils droit de l ancien, et le fils droit du nouveau tas est le résultat de l ajout de max x y au fils gauche de l ancien tas.

Ainsi on insère toujours à droite, mais on permute fils gauche et droit à chaque descente. Ces permutations évitent d avoir un arbre plus lourd à droite qu à gauche. On pourrait bien sûr prendre la conversion symétrique (insérer systématiquement à gauche, en permutant gauche et droite lors de chaque descente). On pourrait aussi ne pas permuter gauche et droite, mais choisir aléatoirement à chaque insertion entre la gauche et la droite. Toutes ces techniques (dites de randomisation) font que le tas obtenu reste équilibré, même après de nombreuses insertions et suppressions. 5 Ecrire une fonction : najouter liste untas qui ajoute tous les éléments d une liste d entiers dans le tas. 6 Ecrire une fonction : vider untas qui rend la liste triée des éléments contenus dans le tas. Bien sûr, cette fonction appelle la fonction enlever définie précédemment. 7 Ecrire une fonction : tripartas liste qui trie une liste d entiers, en les insérant dans un tas, puis en vidant le tas (heapsort).

Comparer les temps d éxécution de cette fonction avec trinaif sur une longue liste (disons dix mille éléments). Exercice 6 ( extrait de CCP 2012) Un arbre binaire de recherche est un arbre binaire d entiers dont : les fils de la racine sont des arbres binaires de recherche ; les étiquettes de tous les nœuds composant le fils gauche de la racine sont inférieures ou égales à l étiquette de la racine ; les étiquettes de tous les nœuds composant le fils droit de la racine sont strictement supérieures à l étiquette de la racine. Un arbre binaire d entiers est représenté par le type arbre dont la définition est : type arbre = Vide Noeud of arbre * int * arbre;; Dessiner l arbre correspondant à :

Noeud( Noeud( Noeud( Noeud(Vide,1,Vide), 3, Noeud(Vide,4,Vide) ), 5, Vide), 7, Noeud( Noeud(Vide,8,Vide), 9, Vide) ) Est-ce un arbre de recherche? Exercice 7 Soit le programme en Karelle langage JULLIAN CaML TD: 6, arbres

let rec eliminer v a = let rec aux a = match a with Noeud(g,v,Vide) -> (v,g) Noeud(g,v,d) -> let (vr,ar) = (aux d) in (vr,(noeud(g,v,ar))) in match a with Vide -> Vide Noeud(g,vp,d) -> if (vp = v) then (let rg = (eliminer v g) in (if (rg = Vide) then d else let (vm,gp) = aux rg in Noeud(gp,vm,d))) else

if (v < vp) then Noeud((eliminer v g),vp,d) else Noeud(g,vp,(eliminer v d));; Soit la constante exemple définie et initialisée par : let exemple = Noeud(Noeud(Noeud(Vide,1,Vide),2,Vide),2,Noeud(Vide,3,Vide) Détailler les étapes du calcul de (eliminer 2 exemple) en précisant pour chaque appel aux fonctions eliminer et aux, les valeurs des paramètres et résultats.