Algo 2 Exercices corrigés. Arbre de décision

Documents pareils
Les arbres binaires de recherche

1 Recherche en table par balayage

Arbres binaires de recherche

Recherche dans un tableau

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

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

Algorithmique & programmation

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

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Algorithmique et programmation : les bases (VBA) Corrigé

Objets Combinatoires élementaires

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Algorithmique I. Algorithmique I p.1/??

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

ARBRES BINAIRES DE RECHERCHE

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

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

Représentation d un entier en base b

Ordonnancement temps réel

Initiation à la programmation en Python

Corrigé des TD 1 à 5

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

Cours Informatique Master STEP

Limites finies en un point

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

Chapitre 7. Récurrences

Polynômes à plusieurs variables. Résultant

Initiation à LabView : Les exemples d applications :

Algorithmique, Structures de données et langage C

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)

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Bases de données documentaires et distribuées Cours NFE04

Les structures de données. Rajae El Ouazzani

Conventions d écriture et outils de mise au point

données en connaissance et en actions?

Cours d algorithmique pour la classe de 2nde

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

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

INF601 : Algorithme et Structure de données

Résolution de systèmes linéaires par des méthodes directes

Introduction à MATLAB R


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

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

Programmation linéaire

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

MIS 102 Initiation à l Informatique

Quelques Algorithmes simples

ÉPREUVE COMMUNE DE TIPE Partie D

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

1. Structure d'un programme FORTRAN 95

Comparaison de fonctions Développements limités. Chapitre 10

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

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

Algorithmique et Programmation

4. Les structures de données statiques

Algorithme. Table des matières

Formats d images. 1 Introduction

Jean-Philippe Préaux

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

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

Alarme domestique- Présentation

TP 1. Prise en main du langage Python

Chapitre 10 Arithmétique réelle

chapitre 4 Nombres de Catalan

Algorithmique et Programmation, IMA

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

= constante et cette constante est a.

L exclusion mutuelle distribuée

as Architecture des Systèmes d Information

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

ALGORITHMIQUE ET PROGRAMMATION En C

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

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

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

Continuité et dérivabilité d une fonction

CHAPITRE VIII : Les circuits avec résistances ohmiques

La classification automatique de données quantitatives

Enoncé et corrigé du brevet des collèges dans les académies d Aix- Marseille, Montpellier, Nice Corse et Toulouse en Énoncé.

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

V- Manipulations de nombres en binaire

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

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

Adama MBODJI MBODJ.SYSTEM

Durée de L épreuve : 2 heures. Barème : Exercice n 4 : 1 ) 1 point 2 ) 2 points 3 ) 1 point

Système binaire. Algèbre booléenne

Probabilités sur un univers fini

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

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Découverte de Python

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

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

Conception de circuits numériques et architecture des ordinateurs

Présentation du langage et premières fonctions

Structure fonctionnelle d un SGBD

Le langage SQL Rappels

Transcription:

Exercices corrigés Arbre de décision Les arbres de décisions permettent de caractériser une classe d algorithmes de tris : les algos de tris par comparaisons séquentiels et déterministes. Cela correspond grosso-modo aux programmes de tri qu on peut écrire dans les langages impératifs standard comme Ada, et en ne faisant que l hypothèse d une fonction de préordre < sur les éléments à trier. Plus précisément, un algorithme donné correspond à un ensemble d arbres de décision, dans lequel chaque arbre de décision représente les suites de comparaisons effectuées par l algorithme lorsque la séquence en entrée a une taille fixée n. Étant donné le caractère séquentiel et déterministe des algos considérés, ces suites ont une structure d arbre. Définition 1 (Arbre de décision). Soit Σ un ensemble fini à n éléments appelé alphabet. Un arbre de décision sur Σ est un arbre binaire, dont : chaque nœud interne est étiqueté a?b avec a et b dans Σ ; un tel nœud représente une comparaison effectuée par l algorithme entre deux éléments de nom a et b dans la séquence d entrée. chaque feuille est étiquetée soit par une permutation des éléments de Σ, qu on note a 1, a 2,..., a n pour signifier a 1 < a 2, etc. (cette permutation correspond donc à la permutation appliquée par l algorithme pour trier la séquence en entrée.) soit étiquetée par un symbole spécial qui représente du code de l algorithme qui n est jamais exécuté. 1 Pour une séquence d entrée donnée (qui associe à chaque élément de Σ une valeur concrète), l exécution de l algorithme de tri représenté par l arbre de décision, doit correspondre exactement à un chemin entre la racine et une feuille-permutation dans l arbre. La figure 1 illustre par exemple le déroulement d un algorithme de tri par insertion sur un ensemble de trois éléments Σ = {a, b, c}. Si on prend par exemple a = 27, b = 42 et c = 5, l algorithme va suivre le chemin surligné en rouge. Figure 1 Arbre de décision sur Σ = {a, b, c} pour un algorithme de tri par insertion. 1. On peut donc ainsi représenter des algorithmes qui font des tests superflus.

type Sequence i s array( Positive range <>) of Element ; procedure TriInsertionSenti ( T: in out Sequence ) i s -- version du tri par insertion avec sentinelle : -- on remplace des comparaisons sur les indices -- par une comparaison au maximum ( la sentinelle ). I: Integer ; E: Element ; Fini : Boolean := True ; begin -- on place le max en fin for K in T First..T Last -1 loop i f T(K +1) < T(K) then Fini := False ; E := T(K) ; T(K) := T(K +1) ; T(K +1) := E ; i f Fini then return ; -- ici : T Last > T First et T(T Last ) est le max de T. for K in reverse T First..T Last -2 loop E:=T(K); I:=K+1 ; while T( I) < E loop T(I -1) := T(I); I:=I+1 ; T(I -1) := E; end ; Figure 2 Tri par insertion avec sentinelle. Exercice 1. Calculer l arbre de décision sur Σ = {A, B, C} associé à l algorithme de tri donné en figure 2. Démonstration. Voilà l arbre de décision sous forme textuelle : si B<A alors si C<A alors si C<B alors si A<B alors absurde sinon (A>B) tri=[c;b;a] sinon (C>B) tri=[b;c;a] sinon (C>A) si A<B alors absurde

sinon (A>B) tri=[b;a;c] sinon (B>A) si C<B alors si C<A alors si B<A alors absurde sinon (B>A) tri=[c;a;b] sinon (C>A) tri=[a;c;b] sinon (C>B) tri=[a;b;c] Sur cet algo, certains tests apparaissent superflus dans l arbre de décision (mais pas dans l algo lui-même) : cela vient du fait que dans l arbre de décision, on raisonne avec n fixé, alors que dans l algo, on raisonne avec n quelconque.

type Tab i s array (1.. n) of Integer ; type Noeud ; type ArbreDecision i s access Noeud ; type Noeud ( EstFeuille : Boolean ) i s record case EstFeuille i s when True => Permutation : Tab ; when others => Indice1, Indice2 : Integer ; FGauche, FDroit : ArbreDecision ; -- vaut null si cas impossible end case ; end record ; Figure 3 Structure Ada d un arbre de décision. Exercice 2. Soit T un tableau contenant à n éléments. Pour coder un arbre de décision associé à un certain algorithme de tri sur T, on utilise un type Noeud avec un champ booléen EstFeuille indiquant si le nœud est une feuille ou non. En Ada (voir figure 3), on fait de ce champ un discriminant. Ansi, si EstFeuille vaut False, alors le nœud a les autres champs suivants : Indice1 et Indice2 correspondant au test T(Indice1) < T(Indice2). FGauche et FDroit correspondant aux 2 fils. Dans ces fils, une feuille est simplement représentée par un pointeur null. Au contraire, si EstFeuille vaut True, alors le nœud représente une permutation qui est donnée par son champ Permutation. Celle-ci associe à chaque position dans le tableau final (trié) sa position initiale dans T. Ecrire une fonction Execute qui parcourt un arbre de décision (supposé construit) A et renvoie le tableau trié correspondant aux valeurs stockées dans T. function Execute ( A : in ArbreDecision ; T: Tab ) return Tab ; Démonstration. On sélectionne la branche de A en fonction des valeurs de T, puis on compose T avec la permutation trouvée. function Execute ( A: ArbreDecision ; T: Tab ) return Tab i s Res : Tab ; Cour : ArbreDecision := A; begin while not Cour. EstFeuille loop i f T[ Cour. Indice1 ] < T[ Cour. Indice2 ] then Cour := Cour. FGauche ; e l s e Cour := Cour. FDroit ; -- normalement, Cour /= null si A represente un tri correct! f o r I in Res Range loop Res (I) := T( Cour. Permutation (I)) ; return Res ; end Execute ;

Exercice 3. Combien de feuilles doit au moins posséder l arbre de décision associé à un algorithme de tri? En déduire que tout algorithme de tri d un ensemble de n éléments nécessite Ω(n log n) comparaisons dans le cas le pire. Démonstration. Soit A l arbre de décision associé à un algorithme de tri d un ensemble de n éléments. En supposant que cet algorithme est correct, chacunes des n! permutations à n éléments doit figurer sur une feuille de A (sinon, l inverse d une permutation absente donne un ordre initial sur les éléments pour lequel l algorithme ne trie pas le tableau correctement). Le nombre f de feuilles possibles de A vérifie donc n! f. n! f (1) Remarquons à présent que le nombre de comparaisons dans le cas le pire correspond au nombre de nœuds internes traversés par le chemin le plus long allant de la racine à une feuille de l arbre de décision. Autrement dit, c est exactement la hauteur h de l arbre. Comme A est un arbre binaire, on peut démontrer par récurrence que : f 2 h (2) En combinant les formules (1) et (2), on obtient log 2 (n!) h. (3) La formule bien connue de Stirling nous donne une approximation 2 de la factorielle de n : n! = 2πn( n e )n (1 + Θ( 1 n )). On a donc : ce qui nous donne : On peut vérifier que A > 0, n! A( n e )n log(n!) log A + n log n n log e. n e 2, n log n n log e 1 n log n. 2 Grâce à l équation (3), on a donc bien B > 0, N 0 > 0, n N 0, h Bn log n. On a donc bien montré que le nombre de comparaisons dans le cas le pire est en Ω(n log n). Exercice 4. Écrire un programme Ada qui construit automatiquement l arbre de décision associé à un programme de tri. Démonstration. Voir solution sur le wiki. Bibliographie indicative [1] T. Cormen, C. Leiserson, R. Rivest, C. Klein. Introduction à l algorithmique : cours et exercices. Dunod, 2002. Disponible à la B.U. Sciences et à la bibliothèque MI2S, en français et en anglais. 2. Alternativement, si on ne se souvient plus par cœur de Stirling, on peut aussi transformer log 2 (n!) en 1 n ln 2 i=1 ln i et majorer cette dernière somme par une intégrale (la fonction ln s intègre par partie très facilement)