CHAPITRE 5 STRUCTURATION DES DONNÉES

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

ARBRES BINAIRES DE RECHERCHE

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

CCP PSI Mathématiques 1 : un corrigé

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

Résolution d équations non linéaires

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

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

Chapitre 7. Récurrences

LE PROBLEME DU PLUS COURT CHEMIN

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

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

Raisonnement par récurrence Suites numériques

Introduction à la théorie des graphes. Solutions des exercices

Les arbres binaires de recherche

Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme

Chp. 4. Minimisation d une fonction d une variable

CORRECTION EXERCICES ALGORITHME 1

Algorithmes récursifs

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

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

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

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

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

Rappels sur les suites - Algorithme

Initiation à la programmation en Python

MIS 102 Initiation à l Informatique

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

Quelques Algorithmes simples

4. Les structures de données statiques

Initiation à l algorithmique

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

Continuité et dérivabilité d une fonction

chapitre 4 Nombres de Catalan

Initiation à LabView : Les exemples d applications :

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

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Introduction à MATLAB R

CHAPITRE VIII : Les circuits avec résistances ohmiques

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Probabilités sur un univers fini

Programmation linéaire

Suites numériques 3. 1 Convergence et limite d une suite

Jean-Philippe Préaux

Chapitre 6. Fonction réelle d une variable réelle

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

Raisonnement probabiliste

Bac Blanc Terminale ES - Février 2011 Épreuve de Mathématiques (durée 3 heures)

Chapitre 5 : Flot maximal dans un graphe

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

Algorithmique et Programmation

Image d un intervalle par une fonction continue

ÉPREUVE COMMUNE DE TIPE Partie D

Taux d évolution moyen.

1 Recherche en table par balayage

Une nouvelle approche de détection de communautés dans les réseaux sociaux

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

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

Recherche dans un tableau

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

L exclusion mutuelle distribuée

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Peut-on imiter le hasard?

Polynômes à plusieurs variables. Résultant

Optimisation for Cloud Computing and Big Data

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

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Cours d Informatique

Exercices du Cours de la programmation linéaire donné par le Dr. Ali DERBALA

Algorithme. Table des matières

Statistiques Descriptives à une dimension

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

Les deux points les plus proches

Objets Combinatoires élementaires

Cours d électricité. Circuits électriques en courant constant. Mathieu Bardoux. 1 re année

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

Groupe symétrique. Chapitre II. 1 Définitions et généralités

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

Resolution limit in community detection

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

Calcul intégral élémentaire en plusieurs variables

Plus courts chemins, programmation dynamique

Université Paris-Dauphine DUMI2E 1ère année, Applications

Organigramme / Algorigramme Dossier élève 1 SI

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007

Chapitre 2 Le problème de l unicité des solutions

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Quelques algorithmes simples dont l analyse n est pas si simple

BACCALAUREAT GENERAL MATHÉMATIQUES

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Calculateur quantique: factorisation des entiers

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

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

Géométrie Algorithmique Plan du cours

Probabilités sur un univers fini

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

La persistance des nombres

Représentation d un entier en base b

Pourquoi l apprentissage?

Transcription:

CHAPITRE 5 STRUCTURATION DES DONNÉES Les numéros de sections à gauche me sont propres; ceux entre parenthèses indiquent les sections correspondantes du livre; les numéros à droite sont les numéros de pages de ces transparents. La structuration adéquate des données est un élément déterminant dans la conception d'algorithmes efficaces 1 Listes (5.1 à 5.3) - Tableau (5.1) - Pointeur (5.2) 2 Graphes (5.4) Orientés arc chemin circuit Non orientés arête chaîne cycle 3 Arborescences (5.5) 2 = arbres orientés 4 Monceaux (5.7) 5 = arbre binaire représenté par un vecteur Fabrication d un monceau 14 Application: Tri de Williams (Heapsort) 24 5 Structures d ensembles disjoints (5.9) 27 = partition d un ensemble Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 1

5.5 ARBORESCENCES Arbre libre (ou flottant) Définition: Graphe connexe acyclique non orienté. Propriétés Un arbre à n nœuds a n 1 arêtes L ajout d une arête (n importe où) crée un cycle La suppression d une arête déconnecte le graphe Arbre enraciné Définition: Un nœud particulier appelé racine. Termes spécifiques aux arbres enracinés: Père (parent), fils (fille, enfant), frère (sœur) d un nœud Ancêtre ou descendant d un nœud Feuille, nœud interne Représentation d un nœud Type Nœud1 = structure Valeur : Information (par exemple: réel) Fils-gauche, Frere-suivant : Nœud1 Type Nœud2 = structure Valeur : Information (par exemple: réel) Parent : Nœud2 2 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

5.5 ARBORESCENCES ARBORESCENCES BINAIRES Représentation d un nœud Type Nœud-binaire = structure Valeur : Information (par exemple: réel) Fils-gauche, Fils-droit : Nœud-binaire Arborescence de fouille binaire Définition Arborescence de fouille (arbre binaire de recherche) := Arborescence binaire telle que la valeur contenue dans tout nœud interne est celle de ses descendants de gauche celle de ses descendants de droite. Exemple d arborescence de fouille 50 35 75 27 48 90 38 80 Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 3

5.5 ARBORESCENCES ARBORESCENCES DE FOUILLE BINAIRES Recherche d'un nœud FONCTION Trouver { Assertion: La valeur cherchée existe dans l arbre. } (a : Nœud-binaire; {racine} v : Information {valeur cherchée} ) : Nœud-binaire. {nœud recherché} SI v = a.valeur ALORS RETOURNER a SINON SI v < a.valeur ALORS RETOURNER Trouver (a^.fils-gauche, v) SINON {v > a.valeur} RETOURNER Trouver (a^.fils-droit, v) FIN Trouver. Algorithme d'ordre p (profondeur de l arbre de racine a) Exercice: Modifier cet algorithme pour qu il retourne un diagnostic d échec lorsque l arbre de racine a ne contient pas de nœud de valeur v. Exercice: Étendre cet algorithme à la recherche d un nœud dans une arborescence de fouille k-aire. 4 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

5.7 MONCEAUX (angl.: heaps) 1º Arborescence binaire essentiellement complète Définition - chaque nœud interne possède ses 2 fils (sauf éventuellement un seul nœud, au niveau 1, dont le fils unique est alors à gauche); - toutes les feuilles sont soit sur le niveau 0, soit sur les niveaux 0 et 1; - une feuille de niveau 1 ne se trouve jamais à la gauche d'un nœud interne du même niveau. Représentation à l'aide d'un tableau T Les sommets de profondeur k sont rangés dans les éléments T[2k], T[2k+ 1],..., T[2k+1-1]. Note: le père de T[i] est T[i DIV 2]; les fils de T[i] sont T[2i] et T[2i + 1]. T[1] T[2] T[3] T[4] T[5] T[6] T[7] T[8] T[9] T[10] Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 5

5.7 MONCEAUX 2º Monceau Définition - Arborescence binaire essentiellement complète ; - valeur de chaque nœud interne celles de ses fils. Exemple de monceau 40 10 30 7 5 25 28 3 6 5 Représentation interne 1 2 3 4 5 6 7 8 9 10... 40 10 30 7 5 25 28 3 6 5... 6 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

5.7 MONCEAUX OPÉRATIONS SUR LES MONCEAUX A) Modification de la valeur d'un nœud Premier cas: la valeur du nœud est diminuée Stratégie. Pour rétablir la propriété du monceau, si la nouvelle valeur est inférieure à celle du plus grand des deux fils, il faut échanger le nœud avec ce fils, et continuer le processus vers le bas tant et aussi longtemps que la propriété du monceau n'est pas satisfaite. PROCÉDURE Tamiser (T[1..n], i) {T est le monceau, et i l indice de l élément qui a reçu la nouvelle valeur} { l ancienne valeur, non utilisée, n est pas passée en paramètre } k i { k est l indice du nœud courant } RÉPÉTER { Rechercher la plus grande valeur entre le nœud k et ses deux fils } j k { k est sauvegardé dans j aux fins de comparaisons } SI 2j n ET T[2j] > T[k] ALORS k 2j SI 2j < n ET T[2j+1] > T[k] ALORS k 2j+1 { Assertion: La plus grande valeur cherchée est dans le nœud k } { Assertion: Si j=k, le nœud courant est arrivé en position finale, sinon le nœud courant k est maintenant le plus grand fils du nœud sauvegardé en j } SI k > j ALORS {Noter que ce test n est pas indispensable} ÉCHANGER valeurs T[j] et T[k]. JUSQU'À j = k. FIN Tamiser. Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 7

OPÉRATIONS SUR LES MONCEAUX MODIFICATION DE LA VALEUR D'UN NŒUD Exemple pour Tamiser Valeur 4 40 10 30 7 5 25 28 3 6 5 40 4 30 7 5 25 28 3 6 5 8 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

OPÉRATIONS SUR LES MONCEAUX MODIFICATION DE LA VALEUR D'UN NŒUD Exemple pour Tamiser (suite) 40 7 30 4 5 25 28 3 6 5 40 7 30 6 5 25 28 3 4 5 Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 9

OPÉRATIONS SUR LES MONCEAUX MODIFICATION DE LA VALEUR D'UN NŒUD Second cas: la valeur du nœud est augmentée. Stratégie. Pour rétablir la propriété du monceau, si la nouvelle valeur dépasse celle du père, il suffit d échanger la valeur du nœud avec celle du père, et de continuer le processus vers le haut tant et aussi longtemps que la propriété du monceau n'est pas satisfaite. PROCÉDURE Percoler (T[1..n], i) {T est le monceau, et i l indice de l élément qui a reçu la nouvelle valeur} { l ancienne valeur, non utilisée, n est pas passée en paramètre } k i { k est l indice du nœud courant } RÉPÉTER { Rechercher la plus grande valeur entre le nœud k et son père } j k { k est sauvegardé dans j aux fins de comparaisons } SI j > 1 ET T[j DIV 2] < T[k] ALORS k j DIV 2 { Assertion: La plus grande valeur cherchée est dans le nœud k } { Assertion: si j=k, le nœud courant est arrivé en position finale; sinon, le nœud k est le père du nœud sauvegardé en j.} SI k < j ALORS {Noter que ce test n est pas indispensable} ÉCHANGER valeurs T[j] et T[k]. JUSQU'À j = k. FIN Percoler. 10 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

OPÉRATIONS SUR LES MONCEAUX MODIFICATION DE LA VALEUR D'UN NŒUD Exemple pour Percoler 40 10 30 7 5 25 28 3 6 5 Valeur 12 40 10 30 7 5 25 28 3 12 5 Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 11

OPÉRATIONS SUR LES MONCEAUX MODIFICATION DE LA VALEUR D'UN NŒUD Exemple pour Percoler (suite): 40 10 30 12 5 25 28 3 7 5 40 12 30 10 5 25 28 3 7 5 Troisième cas (général): Mise à jour de la valeur d'un nœud PROCÉDURE Modif-Monceau (T[1..n], i, v) { Met la valeur v dans T[i] et reconstruit le monceau } x T[i]; T[i] v; SI v < x ALORS Tamiser (T, i) SINON Percoler(T, i) FIN Modif-Monceau. 12 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

OPÉRATIONS SUR LES MONCEAUX B) Chercher le plus grand élément du monceau FONCTION Maximum (T[1..n]) RETOURNER T[1]. FIN Maximum. C) Éliminer le plus grand élément du monceau PROCÉDURE Éliminer-Racine (T[1..n]) T[1] T[n]. Tamiser (T[1..n 1], 1). FIN Éliminer-Racine. D) Ajouter un nœud dont la valeur est v PROCÉDURE Ajouter-Nœud (T[1..n], v) T[n+1] v. Percoler (T[1..n+1], n+1). FIN Ajouter-Nœud. Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 13

FABRICATION D UN MONCEAU À PARTIR D UN TABLEAU NON ORDONNÉ Algorithmes et exemples Algorithme coûteux: Faire-Monceau-Lent Algorithme nécessitant un temps dans l'ordre de n logn PROCÉDURE Faire-Monceau-Lent (T[1..n]) POUR i 2 JUSQU'À n FAIRE Percoler (T[1..i], i). Fin Faire-Monceau-Lent. Exemple 12 24 7 6 43 3 10 9 5 65 24 12 7 6 43 3 10 9 5 65 14 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

FABRICATION D UN MONCEAU ALGORITHMES ET EXEMPLES Exemple pour Faire-Monceau-Lent (suite) 43 24 7 6 12 3 10 9 5 65 État final: etc. 65 43 10 9 24 3 7 6 5 12 Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 15

FABRICATION D UN MONCEAU ALGORITHMES ET EXEMPLES Méthode plus efficace: Faire-Monceau Algorithme nécessitant un temps dans l'ordre de n PROCÉDURE Faire-Monceau (T[1..n]) POUR i n DIV 2 PAS 1 JUSQU'À 1 FAIRE Tamiser(T, i). FIN Faire-Monceau. Exemple (même état initial): 12 24 7 6 43 3 10 9 5 65 12 24 7 6 65 3 10 9 5 43 16 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

FABRICATION D UN MONCEAU ALGORITHMES ET EXEMPLES Exemple pour Faire-Monceau (suite) 12 24 7 9 65 3 10 6 5 43 12 24 10 9 65 3 7 6 5 43 etc. État final: le même que pour Faire-Monceau-Lent Exercice Les algorithmes Faire-Monceau et Faire-Monceau-Lent conduisent-ils toujours au même monceau? Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 17

FABRICATION D UN MONCEAU ANALYSES D EFFICACITÉ Analyse directe de Faire-Monceau (basée sur le code) Soient: m le nombre max. d itérations à l intérieur de Tamiser (T[1..n], i) (c est ce qu on cherche); j t la valeur de j après l exécution de «j k» à la te itération. au démarrage:j 1 = i à la fin de l étape précédente k 2j d où: {j t 2j t 1, 1< t m} à la dernière itération à l intérieur de Tamiser: n j m n j m 2j m 1 2 m 1 j 1 = 2 m 1 i. 2 m 1 n i m 1 + lg ( n i ). Cela pour l intérieur de Tamiser. Or, il y a n/2 appels à Tamiser. D où une borne supérieure sur le nombre total d itérations de Faire-Monceau: n/2 n/2 n M = m = (1 + lg i=1 i=1 i ). Supposons d abord n pair. Alors n 2 = n 2, et il vient: n/2 M = n 2 + i=1 lg n i = n 2 + lg nn/2 (n/2)! n 2 + lg nn/2 e n/2 n n/2 πn = n 2 + n 2 lge 1 1+lge 2 lg(πn) < 2 n O(n) Supposons maintenant n impair. Alors n 2 = n 1 2, et le calcul fait pour n pair s applique sans modification: M reste une borne supérieure sur le nombre total d itérations. Ainsi, dans tous les cas, M O(n), ce qui prouve que: La fabrication d un monceau s effectue en un temps linéaire 18 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

FABRICATION D UN MONCEAU ANALYSES D EFFICACITÉ Analyse de Faire-Monceau basée sur le nombre de nœuds de chaque niveau On prend une instruction quelconque à l intérieur de la boucle RÉPÉTER comme instruction baromètre. On doit tamiser tous les nœuds internes. Pour tamiser un nœud au niveau r, on doit faire au plus r+1 tours de boucle. La hauteur d un monceau contenant n nœuds est k = lgn. Dans le monceau, il y a: 2 k 1 nœuds de niveau 1 (nœuds internes + feuilles), 2 k 2 nœuds de niveau 2 (tous des nœuds internes),... 2 k k = 1nœud de niveau k (la racine). Soit M le nombre total d itérations (pour Faire-Monceau) à l intérieur de RÉPÉTER. On a: t 2 k 1 2 + 2 k 2 3 + 2 k 3 4 +... + 2 0 (k+1) 2 k 1 + 2 k 1 2 + 2 k 2 3 + 2 k 3 4 +... + 2 0 (k+1) = 2 k+1 (1 2 1 + 2 2 2 + 3 2 3 +... + (k+1) 2 (k+1) ) k+1 = 2 k+1 i 2 i 2 k+1 i 2 i = 2 k+1 2 = 2 k+2 = 4n i=1 i=1 où la somme de la série résulte de l égalité 7º de l aidemémoire (Chapitre 1, page 4). Ainsi, on trouve encore que M O(n) Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 19

FABRICATION D UN MONCEAU ANALYSES D EFFICACITÉ Analyse de Faire-Monceau basée sur la récursivité A chaque étape, l algorithme réunit deux monceaux voisins pour faire un nouveau monceau en plaçant un nœud au-dessus d eux qui est pris comme racine de ce nouveau monceau. Plus spécifiquement, pour construire un monceau de hauteur k (on suppose k 2), l algorithme: part de deux monceaux de hauteur au plus k 1 (celui de gauche pourrait avoir une hauteur k 2); tamise ensuite la racine sur un chemin de longueur au plus la hauteur du monceau à construire, soit k. Quel temps d exécution cela prend-il? Appelons T(k) le temps mis pour construire un monceau de hauteur k. la construction de chacun des deux monceaux de départ prend un temps T(k 1); le tamisage de la nouvelle racine prend en pire cas un temps s(k) O(k) (il peut s arrêter après un chemin plus court). On a donc la relation de récurrence: T(k) = 2 T(k 1) + s(k) Cette équation est analogue à T(k) = 2 T(k 1) + k non homogène de type 2, que nous avons résolue au chapitre 4 (voir exemple 4.7.7 du livre, repris dans les transparents) et qui donne T(k) O(2 k ) Mais un monceau de n éléments a comme hauteur lgn, et peut donc être construit en un temps T( lgn ) O(2 lgn ). Et comme 2 lgn n, ce temps est (tiens!) dans O(n). J 20 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

FABRICATION D UN MONCEAU ANALYSES D EFFICACITÉ Analyse de Faire-Monceau-Lent en pire cas (problème 5.19) PROCÉDURE Faire-Monceau-Lent (T[1..n]) POUR i 2 JUSQU À n FAIRE Percoler (T[1..i], i). PROCÉDURE Percoler (T[1..n], i) k i RÉPÉTER j k SI j > 1 ET T[j 2] < T[k] ALORS k j 2. Échanger T[j] et T[k]. JUSQU À j = k. Lors d un appel à Percoler (T[1..i], i), soient m le nombre de tours dans la boucle RÉPÉTER j t 1 la valeur de j juste après «j k» dans le t e tour. Alors i = j 1 2j 2 4j 3 2m 1j m 2m 1 d où m 1 lgi puis, puisque m est entier, m 1 + lgi. Le pire cas correspond à celui où T est initialement en ordre croissant. Chaque appel à Percoler (T[1..i], i) nécessite alors exactement 1 + lgi tours de boucle. Cela nous donne pour le nombre total de tours en pire cas: n i=2 n (1 + lgi ) (1 + lgi) = n 1 + lg n! i=2 n lgi = lgn! i=2 d où un temps dans Θ(lg(n!)), ou encore dans Θ(n lgn) (Voir transparents chapitre 3, ancien problème 2.1.17 iii) Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 21

MONCEAUX EXERCICES Problème 5.20 Soit le vecteur T 1 2 3 4 5 6 7 8 9 10 11 12 Montrer le contenu de T après chacun des appels: Faire-Monceau (T), Modif-Monceau (T, 12, 10), Modif-Monceau (T, 1, 6), Modif-Monceau (T, 5, 8). Problème 5.21 Présentez un monceau T contenant n valeurs distinctes, tel que l exécution de la suite d instructions suivantes résulte en un monceau différent. m Maximum (T) Éliminer-Racine (T [1..n]) Ajouter-Nœud (T [1..n 1], m) Solution Avec 3 éléments, soit le monceau T = 3 2 1. Après m Maximum (T), on obtient m = 3 et 3 2 1. Après Éliminer-Racine (T), on obtient 2 1. Après Ajouter-Nœud (T[1..2], 3), on obtient 3 1 2. 22 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

MONCEAUX EXERCICES Autres exercices (faisables ou non) A) Donnez un algorithme qui retourne l'élément minimum dans un monceau? Quelle est la complexité de cet algorithme? B) Donnez un algorithme qui liste en ordre décroissant la valeur des nœuds d'un monceau T[1..n], en un temps dans l'ordre de n logn. C) Donnez un algorithme qui retourne un nœud d'un monceau T[1..n] dont la valeur est v, en un temps dans l'ordre de logn. D) Donnez un algorithme qui élimine un nœud quelconque d'un monceau Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 23

APPLICATION DES MONCEAUX: TRI DE WILLIAMS (HEAPSORT) Présentation de l algorithme L idée générale est de partir du fait que la racine d un monceau est son plus grand élément. De manière itérative, il suffit donc d éliminer la racine (tout en la conservant), et de rétablir la propriété du monceau avec les éléments restants: on obtient chaque fois à la racine l élément le plus grand suivant ceux déjà éliminés. En pratique, on conserve chaque nouvelle racine éliminée à la place devenue libre dans le vecteur (puisque chaque élimination d une racine réduit de 1 le nombre d éléments restants). Cela donne l,algorithme très simple suivant: PROCÉDURE Heapsort (T[1..n]) {T[1..n] est un tableau à trier} Faire-Monceau (T) POUR i n PAS 1 JUSQU À 2 FAIRE Échanger T[1] et T[i] Tamiser (T[1..i 1], 1) {Assert: T est trié} Noter que le même vecteur contient maintenant les éléments du monceau, donc du vecteur initial, dans l ordre croissant, sans utilisation d un vecteur auxiliaire. Exemple Exercice 1º Exécuter à la main, mais en détail, l algorithme pour le vecteur initial de la page 13 (ou 15). 2º Combien d échange de nœuds avez-vous effectués au total pour fabriquer le monceau? 3º Et pour exécuter la boucle POUR ci-dessus? 24 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

TRI DE WILLIAMS (HEAPSORT): ANALYSE D EFFICACITÉ Calcul en pire cas (ancien problème 2.2.3) D après la structure de l algorithme Heapsort, on obtient: d n pour la fabrication du monceau (d est une constante); c (une autre constante) pour la gestion de la boucle POUR, 1 pour l échange de T[1] et T[i], au plus lg(i 1) échanges pour Tamiser (hauteur de T[1..i 1]), d où au total: n d n + [c + 1 + lg(i 1)] n (c + d + 1) + lg (n 1)! i=2 Cela donne un temps dans O(lg n!) ou encore O(n lg n). Efficacité en moyenne On peut être plus précis et démontrer (mais c est plus difficile) que, en pire cas comme en moyenne (en supposant que toutes les permutations des objets à trier sont équiprobables), on a pour Heapsort: t(n) Θ(n lgn) Exercice (ancien problème 2.2.4) À nombre égal d éléments à trier, quelles sont la pire et la meilleure façons de placer ceux-ci au départ, pour ce qui est de ce temps d exécution? Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 25

MONCEAUX: VARIATIONS, AMÉLIORATIONS, LIMITES Monceaux k-aires Définition: comme pour les monceaux, mais arbre k-aire. Utilité: Si on doit percoler plus souvent que tamiser (arbre moins profond, mais au détriment de l efficacité de Tamiser) Si on doit souvent tamiser jusqu en bas une racine modifiée Si les instances à trier sont dans ce cas, on peut avoir intérêt à tamiser jusqu en bas une racine vide égale à - (une seule comparaison à faire au lieu de deux), puis percoler la varie valeur (une seule comparaison). Dans certaines applications, cette approche s est parfois révélée plus efficace que l algorithme Heapsort classique. Monceau inversé Pour certaines applications (p. ex. recherche très fréquente de plus petits éléments) Application utile Gestion de listes de priorités dynamiques Limite importante Pas de moyen de rechercher efficacement une valeur donnée dans un monceau (la propriété du monceau n aide pas vraiment). 26 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

5.9 STRUCTURES D'ENSEMBLES DISJOINTS Position du problème Soient N objets numérotés de 1 à N. On se propose de définir et de représenter une partition de ces objets en sous-ensembles ou classes. Chaque élément de la partition possède donc une étiquette ou représentant. Dans la situation initiale, il y a une classe par objet. Opérations de base Pour toute partition on définit deux opérations: a) Pour un objet donné x, trouver dans quelle classe il se trouve, et retourner l étiquette de cette classe (représentant de l objet x). b) Étant donné deux étiquettes distinctes, fusionner les deux classes correspondantes et associer une étiquette à la nouvelle classe obtenue. Représentation interne de cette structure de données et traitement correspondant? Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 27

5.9 STRUCTURES D'ENSEMBLES DISJOINTS SOLUTION A Dans cette solution, l'étiquette correspond à l'élément le plus petit de chaque classe. On peut utiliser un tableau Ensemble[1..N]: entier dans lequel on stocke l'étiquette propre à chaque objet (son représentant) dans la position correspondante du tableau. Exemple (N = 10) Soit l'ensemble E= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, et une partition de E: {1, 4}, {5, 9, 10}, {3, 6, 7, 8}, {2}. 1 2 3 4 5 6 7 8 9 10 1 2 3 1 5 3 3 3 5 5 FONCTION Trouver1(x). { Trouve l'étiquette de l'ensemble contenant l'objet x } Retourner Ensemble[x]; FIN Trouver1. PROCÉDURE Fusionner1(a, b). { Fusionne les classes de représentants a et b } NouveauReprésentant Min (a, b) Autre a + b - NouveauRepr {= Max (a, b)} POUR k Autre {ou k 1} JUSQU'À N FAIRE SI Ensemble[k] = Autre ALORS Ensemble[k] NouveauRepr. FIN Fusionner1. Note : M opérations consécutives de recherche et de fusion donnent dans le pire cas un temps dans l'ordre de M * N. 28 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

5.9 STRUCTURES D'ENSEMBLES DISJOINTS SOLUTION B On utilise le même tableau Ensemble[1..N]: entier mais la nouvelle convention est que chaque classe est représentée par un arbre de racine son représentant. Ainsi: Ensemble[i] = i indique que i est à la fois l étiquette et la racine de l arborescence contenant la classe de i. Ensemble[i] = j i indique que j est le père de i (mais non nécessairement le représentant) dans une arborescence. Avec le même exemple, on peut représenter les 4 classes par les quatre arbres suivants ou le vecteur équivalent: 1 5 3 4 9 10 6 7 2 8 1 2 3 4 5 6 7 8 9 10 1 2 3 1 5 3 3 6 5 5 Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 29

5.9 ENSEMBLES DISJOINTS SOLUTION B (SUITE) FONCTION Trouver2 (x) { Trouve l'étiquette de l'ensemble contenant l'objet x } i x TANTQUE Ensemble[i] i FAIRE i Ensemble[i] RETOURNER i. FIN Trouver2. PROCÉDURE Fusionner2(a, b). { Fusionne les ensembles portant les étiquettes a et b } SI a < b ALORS Ensemble[b] a SINON Ensemble[a] b. FIN Fusionner2. Exemple: fusionner les classes de représentants 3 et 5. 1 3 4 6 7 5 2 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 1 3 3 3 6 5 5 Il suffit de changer le contenu de Ensemble[5] de 5 en 3. 30 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

5.9 ENSEMBLES DISJOINTS Étude de Trouver2 et Fusionner2 (ancien problème 1.9.4) Montrer qu exécuter M opérations Trouver2 ou Fusionner2 demande un temps dans l'ordre de M*M en pire cas. Preuve - Situation initiale: N objets disposés en N classes. - Fusionner2 prend un temps constant. - Après k fusions, la hauteur d une arborescence peut atteindre k dans le pire cas. - Trouver2 prend un temps dans l ordre de k dans le pire cas. - Dans le pire cas, la suite d'opérations prend donc un temps dans l ordre de M k = M(M+1) k=1 2 c est-à-dire dans l ordre de M*M. Ainsi, le temps obtenu est dans l ordre de M*M, donc indépendant de la taille N de l ensemble total. Donc: La solution B semble meilleure que la solution A? Mais si M = N alors les 2 solutions A et B se comparent. Donc on n a pas gagné grand chose! C est parce que, dans le pire cas, les arborescences peuvent devenir très profondes. D où: Stratégie: limiter la hauteur des arborescences. Comment? Lors d'une fusion, choisir toujours la racine de l'arborescence la moins haute comme fils de l autre racine. Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 31

5.9 ENSEMBLES DISJOINTS THÉORÈME 5.9.1 (ancien problème 1.9.5) Prouvez par induction mathématique que, si cette tactique est adoptée, alors après une séquence quelconque d opérations de fusion à partir de la situation initiale, une arborescence contenant k nœuds aura une hauteur h lgk. Preuve - Pour k=1, c'est trivial car la hauteur est 0 = lg1. - Supposons que c est vrai pour toute arborescence de taille 1 à k 1 (k>1), et montrons que c'est vrai pour k. Soit donc une arborescence de k nœuds. Elle a été obtenue en fusionnant deux arborescences, disons de i et k i nœuds respectivement (1 i < k), et de hauteurs h 1 lgi et h 2 lg (k i). Si h 1 h 2 alors la hauteur h de l'arborescence résultante sera h = Max(h 1, h 2 ) = lg (Max (i, k i)) lgk. Si h 1 = h 2 alors au moins l'une des deux arborescences fusionnées (la plus petite) contenait au plus k 2 nœuds. Sa hauteur est donc au plus égale à lg ( k 2 ) = lgk 1 = lgk 1. Puisque h 1 = h 2, on a h = h 1 + 1 ( lgk 1) + 1 = lgk. C.Q.F.D. 32 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

5.9 ENSEMBLES DISJOINTS SOLUTION C Comme pour la solution B, mais en limitant la hauteur des arborescences Si i est une racine, au lieu d avoir Ensemble[i] = i, on aura Ensemble[i] = h où h 0 est la hauteur de l arborescence de racine i. Alternativement, on peut, comme dans le livre, stocker dans un vecteur Hauteur [x] la hauteur de tout nœud x dans son arbre (programmation moins économe mais plus prudente). FONCTION Trouver3(x) { Trouve l'étiquette de l'ensemble contenant l'objet x } i x TANTQUE Ensemble[i] > 0 FAIRE i Ensemble[i] { Ensemble[i] 0, donc i est le représentant } RETOURNER i. FIN Trouver3. PROCÉDURE Fusionner3 (a, b) { Fusionne les ensembles portant les étiquettes a et b } SI Ensemble[a] = Ensemble[b] ALORS { Même hauteur } Ensemble[a] Ensemble[a] 1 {Augmenter hauteur de a } Ensemble[b] a { Accrocher b à a } SINON si Ensemble[a] < Ensemble[b] { Hauteur de b plus courte } ALORS Ensemble[b] a { Accrocher b à a } SINON Ensemble[a] b. { Accrocher a à b } FIN Fusionner3. Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 33

5.9 ENSEMBLES DISJOINTS: SOLUTION C Étude de Trouver3 et Fusionner3 (anc. Problème 1.9.6) Prouvez que le temps nécessaire pour exécuter M opérations Trouver3 et Fusionner3 à partir de la situation initiale est dans l'ordre de M lgm en pire cas. Preuve - Fusionner3 prend un temps constant. - Après k fusions, Trouver3 prend un temps dans l ordre de lgk en pire cas. - La suite des opérations prend un temps dans l ordre de M k=1 lgk M lgm. C.Q.F.D. 34 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

5.9 ENSEMBLES DISJOINTS SOLUTION D Stratégie: Compression du chemin Une modification optimisante de la fonction Trouver3 consiste, en plus de remonter de x pour la trouver la racine, à faire le parcours une seconde fois afin d accrocher directement à la racine chaque nœud rencontré. Exemple: soit à chercher le représentant du nœud 4. 2 5 Autres nœuds 2 Autres nœuds 6 7 5 7 4 3 4 6 3 19 28 19 28 Avec les tableaux correspondants, cela donne: 1 2 3 4 5 6 7... 19...... 28...... -4 7 7 2 5 5...... 4...... 3...... -4 7 2 2 5 2...... 4...... 3...... Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 35

5.9 ENSEMBLES DISJOINTS: SOLUTION D (suite) Traduction de la stratégie de compression des chemins FONCTION Trouver4 (x) { Trouve l'étiquette de l'ensemble contenant l'objet x } {Boucle de recherche} r x TANT QUE Ensemble[r] > 0 FAIRE r Ensemble[r] {r est la racine de l'arborescence, et donc la réponse} {Boucle de compression} i x TANT QUE i r FAIRE j Ensemble[i] Ensemble[i] r i j RETOURNER r. FIN Trouver4. FONCTION Fusionner4 (x) Identique à Fusionner3 (x) Note: La hauteur de l'arborescence dont la racine est a, est inférieure ou égale à Ensemble[a] (et non pas forcément égale à Ensemble[a] ). Par exemple, dans le schéma précédent, on constate que (en supposant que les autres nœuds grisés n augmentent pas cette hauteur) Ensemble[2] = 4, alors que l arbre de racine 2 a pour hauteur 3 (et non pas 4). Définition On appelle structure d ensembles disjoints l association Tableau unique Ensemble défini comme ci-dessus + Procédures Trouver4 et Fusionner4. 36 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

5.9 ENSEMBLES DISJOINTS: SOLUTION D (suite) ***Analyse Cette analyse précise est très compliquée. Notons que, asymptotiquement, nous avons deux variables: le nombre total c d opérations Trouver4 et Fusionner4, le nombre N d objets sur lesquels portent ces opérations. Avec un univers de N objets dans la situation initiale, considérons une suite de n appels à Trouver4 et m N 1 appels à Fusionner4. Soit c = n + m. En utilisant deux fonctions A, dérivée de la fonction d Ackermann (qui croît très vite), α, inverse de la précédente (qui croît très lentement), et en supposant que toute consultation ou modification d un élément de vecteur se fait en un temps unitaire (opération élémentaire), Tarjan a montré que cette suite s exécute en pire cas en un temps dans Θ (c α(c, N)) A titre indicatif, notons que α(c, N) > 3 uniquement lorsque lg N > A(3,4) = 22....2 où l échelle d exposants à droite comprend 65536 exposants 2, ce qui est énorme. Ainsi, sauf pour des valeurs astronomiques de N, on peut dire que α(c, N) 3. Ainsi, le temps mis par cette suite d opération est essentiellement linéaire en c. Toutefois, aucun algorithme connu ne nous permet d exécuter cette suite en un temps qui soit vraiment linéaire en c. (voir détails dans le livre, pages 179-180). Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 37

5.9 ENSEMBLES DISJOINTS: VARIANTE: PROBLÈME 5.32 (ancien 1.9.7) a) Pour fusionner deux ensembles, une autre tactique consiste à faire en sorte que la racine de l arborescence contenant le plus petit nombre de nœuds devienne un fils de l autre racine. La racine d une arborescence peut alors contenir exactement le nombre de ses nœuds (la compression des chemins ne change pas ce nombre). PROCÉDURE Fusionner5 (a, b) { Assert: a et b sont négatifs (représentants de classes) } SI Ensemble[a] < Ensemble[b] ALORS { Accrocher a à b } Ensemble[b] Ensemble[a] + Ensemble[b] Ensemble[a] b SINON { Accrocher b à a } Ensemble[a] Ensemble[a] + Ensemble[b] Ensemble[b] a. FIN Fusionner5. b) Prouvez par induction mathématique que, en adoptant cette tactique, après une séquence quelconque d'opérations de fusion à partir de la situation initiale, une arborescence contenant k nœuds aura une hauteur h lgk. Base.k = 1 trivial. Étape d induction. Soit une arborescence de taille k ; elle a été obtenue par fusion de 2 arborescences de k 1 et k 2 nœuds (k 1 + k 2 = k), et de hauteurs h 1 lgk 1 et h 2 lgk 2. - Si k 1 < k 2 alors {on accroche l arbre 1 à l arbre 2} h = Max (h 2, h 1 +1) Mais h 2 lgk 2 lgk et h 1 lgk 1 lgk/2 = lgk 1. Donc h Max ( lgk, lgk 1 + 1) = lgk. - Si k 1 > k 2 même raisonnement (intervertir k 1 et k 2 ). - Si k 1 = k 2 alors {on accroche l arbre 2 à l arbre 1} h = Max (h 1, h 2 +1) Max ( lgk 1, lgk ) = lgk. C.Q.F.D. 38 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche

STRUCTURES D ENSEMBLES DISJOINTS: APPLICATION Méthode d'ajustement à l'aide de polygones Définition de l ajustement Chaque courbe peut être approximée par une suite d'arêtes consécutives, avec la précision désirée. But Déterminer un nombre minimum de sommets parmi (x i, y i ), i = 1, 2,..., n pour former cette suite d'arêtes consécutives, tout en respectant la précision demandée. Principes directeurs de la stratégie utilisée i) Former des groupes de points consécutifs sur la courbe. ii) Les points d'un groupe seront approximés par une arête. iii) Si les points d'un groupe ne sont pas approximativement colinéaires, alors le groupe est subdivisé. iv) Deux groupes seront fusionnés uniquement si le nouveau groupe contient seulement des points approximativement colinéaires. v) Critère d arrêt: lorsqu il est impossible de mettre à jour les groupes. vi) Étiquette d un groupe: le sommet qui correspond à l extrémité terminale de l arête approximant les points du groupe. vii) Initialement, chaque sommet (x i, y i ) forme un groupe. Analyse d Algorithmes 2001 Ch. 5 - STRUCTURATION DES DONNÉES 39

EN RÉSUMÉ... Rappel: structures de données du cours IFT-10541 Tableaux, piles et files, listes avec pointeurs, enregistrements (records), graphes généraux, tables associatives et techniques de hachage (hashing) Arbres et arborescences - Arborescence = arbre orienté (=> racine, feuilles, etc.) - Arbre flottant et arbre enraciné - Hauteur (height), Profondeur (depth), et Niveau (level) - Techniques de représentation d un nœud - Arbres (= arborescences) binaires - Arbres (= arborescences) de recherche (= fouille/search) Monceaux (heaps) Arborescence binaire essentiellement complète Propriété du monceau Opérations de base: modification de la valeur d un nœud: - Procédures Tamiser (Sift-down) et Percoler (Percolate) - Implantation efficace (chiffrée) de ces procédures Autres opérations: - Chercher/éliminer le plus grand élément du monceau - Ajouter un nœud à valeur donnée - Transformer en monceau un tableau non ordonné - Implantation efficace de Faire-Monceau (MakeHeap) Application: Tri de Williams (Heapsort) Structures d ensembles disjoints Position du problème: partition, classe, représentant Opérations de base: Trouver et Fusionner Implantations efficaces (chiffrées) de ces procédures et de leurs variantes (solutions A. B, C et D) Technique de compression du chemin 40 Ch. 5 - STRUCTURATION DES DONNÉES 2001 R. Lelouche