2 Représentation d'un tas binaire par un tableau

Documents pareils
Recherche dans un tableau

Programmation C. Apprendre à développer des programmes simples dans le langage C

Arbres binaires de recherche

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

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

Les arbres binaires de recherche

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

Algorithmique I. Algorithmique I p.1/??

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

Les suites numériques

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

1 Recherche en table par balayage

Quelques algorithmes simples dont l analyse n est pas si simple

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Introduction a l'algorithmique des objets partages. Robert Cori. Antoine Petit. Lifac, ENS Cachan, Cachan Cedex. Resume

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Licence Sciences et Technologies Examen janvier 2010

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

I. Introduction aux fonctions : les fonctions standards

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

Calcul de développements de Puiseux et application au calcul du groupe de monodromie d'une courbe algébrique plane

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

Resolution limit in community detection

Séance 0 : Linux + Octave : le compromis idéal

chapitre 4 Nombres de Catalan

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

Programmation Objet - Cours II

Cours 1 : La compilation

Table des matières. I Mise à niveau 11. Préface

EPFL TP n 3 Essai oedomètrique. Moncef Radi Sehaqui Hamza - Nguyen Ha-Phong - Ilias Nafaï Weil Florian

C f tracée ci- contre est la représentation graphique d une

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

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

Calculs de probabilités avec la loi normale

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Ordonnancement. N: nains de jardin. X: peinture extérieure. E: électricité T: toit. M: murs. F: fondations CHAPTER 1

FORMATION CONTINUE SUR L UTILISATION D EXCEL DANS L ENSEIGNEMENT Expérience de l E.N.S de Tétouan (Maroc)

Initiation à l algorithmique

Les structures de données. Rajae El Ouazzani

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

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

données en connaissance et en actions?

Problème : Calcul d'échéanciers de prêt bancaire (15 pt)

I- Définitions des signaux.

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

Structure fonctionnelle d un SGBD

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Le chiffre est le signe, le nombre est la valeur.

Cours Informatique Master STEP

Comment congurer WinEdt pour L A TEX?

Propagation sur réseau statique et dynamique

- Le Diagramme de Gantt. - Le Diagramme de Pert - La Méthode QQCQCCP - La Méthode MOSI - Cahier des charges fonctionnel

Introduction à MATLAB R

Chapitre 7. Récurrences

Quelques Algorithmes simples

Les Enseignants de l Ere Technologique - Tunisie. Niveau 1

Améliorations Sage Gestion Commerciale version 7.71 Sage Comptabilité version 7.72

L exclusion mutuelle distribuée

Rappels sur les suites - Algorithme

Algorithmes de recherche

TP1 - Prise en main de l environnement Unix.

Devenez expert. en trading d'or. Tout ce qu'il faut savoir pour trader l'or

ARBRES BINAIRES DE RECHERCHE

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

Cours 1 : Qu est-ce que la programmation?

Raisonnement par récurrence Suites numériques

CORRECTION EXERCICES ALGORITHME 1

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

1.6- Génération de nombres aléatoires

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

TP 1 : 1 Calculs en binaire, octal et hexadécimal

Représentation d un entier en base b

Modélisation et étude d un système de trading directionnel diversifié sur 28 marchés à terme


Représentation des Nombres

Ebauche Rapport finale

LibreOffice Calc : introduction aux tableaux croisés dynamiques

Note de cours. Introduction à Excel 2007

MapReduce. Nicolas Dugué M2 MIAGE Systèmes d information répartis

ÉPREUVE COMMUNE DE TIPE Partie D

1.1 L EXPLORATEUR WINDOWS

Fonctions homographiques

Complément d information concernant la fiche de concordance

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

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

Chapitre 1 I:\ Soyez courageux!

Reproductibilité des expériences de l article "Analyse et réduction du chemin critique dans l exécution d une application"

Chaînes de Markov au lycée

TEXT MINING von 7

Carl-Louis-Ferdinand von Lindemann ( )

LES CARTES À POINTS : POUR UNE MEILLEURE PERCEPTION

Je découvre le diagramme de Venn

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Annexe : La Programmation Informatique

Transcription:

LS5 MIAGE UFR d'ieea Université Lille 1 Algorithmique TP : Tri par tas Comme pour le TP sur les tris, vous devez utiliser le paquetage paq_permutation écrit lors des précédents TP. Vous pouvez également charger et utiliser le paquetage compilé fourni si le votre ne fonctionne pas bien. Dans ce cas il vous faudra supprimer les droits en écriture sur les chiers paq_permutation.* par exemple avec la commande chmod u-w paq_permutation.*. L'objectif de ce TP est de (re)programmer l'algorithme du tri par tas et d'étudier sa complexité analytiquement et expérimentalement. Vous devez créer le paquetage paq_tri_tas ainsi qu'un programme principal de test. Comme pour le TP sur les tris, vous allez utiliser les fonctions comp et echange lorsque cela sera nécessaire an de pouvoir compter facilement toutes ces opérations le moment venu. Vous aurez donc sans doute besoin soit de les copier dans votre paquetage paq_tri_tas, soit d'utiliser le paquetage paq_tri du TP sur les tris. 1 Tas binaire Un tas binaire est un arbre binaire qui possède certaines propriétés supplémentaires : la diérence de profondeur entre deux feuilles est d'au plus 1, les feuilles de profondeurs maximum sont toujours le plus à gauche possible, la valeur de chaque n ud doit être supérieure à la valeur de la racine de chacun de ses ls. Q1. Les arbres suivants sont-ils des tas binaires? Justiez si ce n'est pas le cas. 7 2 5 -A- -B- -C- Q2. Où se trouve l'élément maximum d'un tas binaire? Justiez. 2 Représentation d'un tas binaire par un tableau Comme tout arbre binaire, un tas binaire peut être représenté dans un tableau unidimensionnel indicés à partir de 1 : le père d'un n ud en position i a pour enfants un ls gauche en position 2i et un ls droit en position 2i + 1. Exemple. L'arbre est codé par le tableau 1

Les tas binaires sont utilisés pour implanter les les de priorités car ils permettent des insertions en temps logarithmiques et un accès direct au plus grand élément. Q3. Ecrire les trois fonctions suivantes retournant respectivement l'indice du père, du ls droit et du ls gauche du n ud d'indice i dans le tas T : function pere(t : PERMUTATION; i : NATURAL) return NATURAL; function FD(T : PERMUTATION; i : NATURAL) return NATURAL; function FG(T : PERMUTATION; i : NATURAL) return NATURAL; Si l'indice à retourner n'est pas un indice de T vous ne devrez pas lever d'exception ni en tenir compte pour l'écriture de ces fonctions. 3 Insertion dans un tas binaire L'insertion d'un élément dans un tas binaire se ramène à 2 type d'opérations : 1. l'insertion de l'élément dans première cellule vide du tableau codant l'arbre. 2. la percolation de cet élément depuis une feuille de l'arbre jusqu'à la racine (si nécessaire). Ces opérations consistent à échanger autant que nécessaire l'élément qui percole avec son père courant si ce dernier est plus petit que lui. Dans l'exemple suivant, on ajoute l'élément 15 au tas en 3 étapes : 15 15 15 15 15 15 Q4. Ecrire la procédure percoler qui insère l'élément se trouvant à l'indice i à la place approriée dans T pour que les éléments entre l'indice 1 et i forment un tas, sachant que les éléments d'indices 1 à i-1 forment déjà une structure de tas dans T : procedure percoler(t : in out PERMUTATION; i : in NATURAL); Q5. Quelle(s) propriété(s) sur les données doit/doivent être vériée(s) pour que votre algorithme eectue respectivement un maximum et un minimum de comparaisons entre éléments de T? Q. Combien de comparaisons sont eectuées dans chacun de ces cas? Vous donnerez un 4 Créer une structure de tas binaire dans un tableau quelconque Pour ordonner les éléments d'un tableau quelconque en une structure de tas binaire il sut de procéder par insertions successives comme dans un tri par insertion. En eet l'élément d'indice 1 pris seul forme un tas car n'ayant aucun ls il respecte toutes les contraintes. Il est donc possible d'utiliser la procédure percoler pour insérer dans ce tas de taille 1 l'élément d'indice 2 du tableau, et ainsi de suite jusqu'à ce que le tableau complet forme un tas. 2

Q7. Ecrire la procédure entasser qui ordonne les éléments du tableau T pour former un tas dans T : procedure entasser(t : in out PERMUTATION); Q8. Quelle(s) propriété(s) sur les données doit/doivent être vériée(s) pour que votre algorithme eectue respectivement un maximum et un minimum de comparaisons entre éléments de T? Q. Combien de comparaisons sont eectuées dans chacun de ces cas? Vous donnerez un 5 Une première tentative de tri Vous allez étudier une première idée pour exploiter les avantages de la structure de tas dans le tri d'un tableau. En eet, sachant où se trouve le plus grand élément du tas, et sachant reformer un tas à partir d'un tableau ou d'une tranche de tableau quelconque, vous pouvez appliquer une stratégie comparable à celle du tri par séléction : trouver le maximum, l'échanger avec la dernière case du tableau etc. Comme dans le tri par séléction, le tableau pourra être vu comme étant divisé en une partie triée en n de tableau et une partie non triée en début de tableau. Q10. tas. Ecrire la procédure tritri s'inspirant du tri par séléction mais utilisant la structure de procedure tritri(t : in out PERMUTATION); Q11. D'après les calculs de complexité eectués précédemment sur percoler et entasser donnez une majoration et une minoration du nombre de comparaisons eectuées par tritri. Q. Par rapport aux algorithmes de tri que vous connaissez déjà, ce tri vous paraît-il intéressant? Une autre idée Dans l'algorithme tritri précédent, lorsque l'élément maximum courant du tas est évacué vers sa place dénitive à la n du tableau, les éléments restants ne forment plus un tas, mais presque un tas, ce qui n'est pas exploité par tritri. Pour essayer de réduire la complexité, l'idée est donc maintenant de tenir compte du fait que la partie non triée du tableau forme presque un tas. Q13. Pourquoi la partie non triée ne forme-t-elle pas un tas? Pour remédier à ce problème et ré-ordonner la partie non triée du tableau en structure de tas il faut une nouvelle procédure, tamiser qui fait un peu la même chose que percoler mais en sens inverse. Cette opération consiste à faire descendre de n ud en n ud l'élément se trouvant à la racine jusqu'à la place apropriée dans le tas en l'échangeant autant que nécessaire avec le plus grand ls de sa position courante. Dans l'exemple suivant, le plus grand élément du tas construit précédemment est échangé avec l'élément se trouvant en dernière case du tableau, puis cet élément qui se retrouve à la racine est tamisé jusqu'à sa place : 3

15 15 15 15 L'élément 15 est toujours présent dans le tableau mais dans la partie triée, il n'apparaît donc plus dans le tas. Q14. Ecrire la procédure tamiser qui reforme un tas dans le tableau T sachant que les éléments de T sont presque ordonnés en tas comme détaillé précédemment. procedure tamiser(t : in out PERMUTATION); Q15. Quelle(s) propriété(s) sur les données doit/doivent être vériée(s) pour que votre algorithme eectue respectivement un maximum et un minimum de comparaisons entre éléments de T? Q1. Combien de comparaisons sont eectuées dans chacun de ces cas? Vous donnerez un Tout est maintenant prêt pour écrire la procédure de tri par tas classique. Q17. Ecrire la procédure tritas qui tri le tableau T en utilisant correctement la structure de tas binaire : procedure tritas(t : in out PERMUTATION); Q18. D'après les calculs de complexité eectués précédemment, donnez une majoration et une minoration asymptotiques du nombre de comparaisons eectuées par tritas. Q1. Par rapport aux algorithmes de tri que vous connaissez déjà, ce tri vous paraît-il intéressant? 7 Complexité en moyenne - expérimentations Les questions suivantes sont identiques aux questions sur l'analyse de complexité expérimentale du TP sur les tris. 7.1 Des valeurs exactes Pour établir expérimentalement la valeur exacte du nombre moyen d'opérations, on peut engendrer les n! tableaux possibles contenant n éléments distincts, évaluer le nombre d'opérations eectuées lors du tri de chacun, et faire la moyenne arithmétique. Q20. Programmez une procédure qui traitera tous les tableaux de taille n et calculera les nombres moyens de comparaisons et d'échanges de manière exacte et l'achera sous la forme <taille de donnée> <comparaisons> <échanges>. Q21. Achez le nombre moyen d'opérations nécessaires au tri par tas d'une permutation de taille n = 2, 3,..., 10. Vous redirigerez l'achage dans un chier de données qui sera ensuite utilisé par gnuplot. 4

7.2 Des estimations Malheureusement n! = Ω(e n ) : en pratique, trier tous les tableaux de taille n devient rapidement impossible. Pour des valeurs de n plus grandes, il faut se contenter de valeurs établies au vu d'échantillons. Vous calculerez donc des valeurs approchées du nombre moyen d'opérations en considérant n tableaux de taille n choisis aléatoirement. Q22. Programmez une procédure par tri qui traitera tous les tableaux de taille n et calculera les nombres moyens de comparaisons et d'échanges de manière approchée. Q23. Achez le nombre moyen d'opérations nécessaires au tri par tas d'une permutation de taille n < 15, n = 25, 50, 100, 250, 500, 1000, 5000. Vous redirigerez l'achage dans un chier de données qui sera ensuite utilisé par gnuplot. 7.3 Tracé des courbes Q24. Tracez les courbes donnant le nombre moyen de comparaisons d'une part et le nombre moyen d'échanges d'autres part sur deux graphiques rassemblant le tri par tas, le tri rapide et le tri par fusion. Vous pouvez utiliser le paquetage paq_tri du TP sur les tris et copier les lignes de code nécessaires à la génération des nombres d'opérations à tracer sur votre TP tris. Mais vous pouvez aussi réutiliser les résultats obtenus lors du TP sur les tris car les tests à eectuer sont identiques. Q25. Quelles sont vos conclusions? 5