UMLV ã Arbres de recherche AVL

Slides:



Advertisements
Présentations similaires
Structures de données IFT-2000 Abder Alikacem Semaine 11 Gestion des arbres binaires de tri et de recherche. Les arbres cousus. Les arbres n-aires Département.
Advertisements

201 UMLV  Type « dictionnaire » sous-ensembles finis de E (ordonné) avec les opérations : Ens_vide :  Ens Ajouter : Ens x Elément  Ens Enlever.
MIGO ET COMPLEXITE1 ARBRES EQUILIBRES Définition : On dit qu’un arbre binaire est H équilibré si en tout nœud de l’arbre, les hauteurs des sous-arbres.
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
Arbres AVL - Hauteur d’un arbre AVL - Insertion et restructuration
Informatique 2A Langage C 3 ème séance.
Tutoriel : faire le montage des enregistrement audio des p’tit déj’ Contact Ce tutoriel est conçu pour le logiciel libre Audacity, téléchargeable gratuitement.
Université de Nantes CHORD Vincent Trève. Introduction ● Problématique – Comment accéder efficacement aux données réparties sur un système pair à pair?
MAINTENANCE AUTOMOBILE T.P. DISTRIBUTION Objectif Pédagogique Opérationnel: - Effectuer le remplacement d’une courroie de distribution Support : Citroën.
11 Alternative : syntaxe CSharp la structure conditionnelle : –si condition alors instruction1 sinon instruction2 fin si –En C# : if (condition) { instruction1.
DIAGRAMME DE DEPLOIEMENT Exposé de: MBALLA MEKONGO Michèle MBOUNA FEUZE William SIEYADJEU Alex Lionel CHOPGWE Leonard NDUMATE Landry TIDJON Lionel.
Algorithmes en C Phelma 2015.
Plateforme CountrySTAT Aperçu global de la préparation des tableaux dans la nouvelle plateforme CountrySTAT FORMATION DES POINTS FOCAUX SUR LE SYSTEME.
PROJET JAVA Automatisation d’une rame de métro
Ajouter le code dans une page html
L’Instruction de Test Alternatif
La loi d’Ohm Le courant, la tension, et la résistance
Polymorphisme : règles
Algorithmique & Langage C
Plan Introduction Parcours de Graphe Optimisation et Graphes
VI. Tri par tas (Heap sort)
Le tableau de financement
Section 4.1 : La cinématique de rotation
Programmation Impérative II
Piles.
Équations - Inéquations
Algorithmique & Langage C IUT GEII S1 Notes de cours (deuxième partie)
Concepts de base de la programmation
Alignement sagittal cervical dans les scolioses idiopathiques traitées par instrumentation postérieure et cintrage in situ Yann Philippe Charles G. Sfeir,
Soixantième Anniversaire de la Recherche Forestière en Tunisie
1.2 dénombrement cours 2.
PROGRAMMATION ET ENSEIGNEMENT
La cotation fonctionnelle Chapitre A : Tolérances dimensionnelles
Formation sur les bases de données relationnelles.
Développement d’applications interactives
Exercice : le jeu. Vous devez concevoir l’algorithme permettant de jouer avec votre calculatrice : elle détermine au hasard un nombre caché entier entre.
SDRP & MA Problème du rendez vous : un algorithme probabiliste et une analyse probabiliste 09/11/2018.
Apprendre le clavier Révision : les touches Mode d’emploi
Efficacité des algorithmes
NUMERATION et REPRESENTATION DES NOMBRES
7 Contraintes d’intégrité en SQL
AIDE A LA PROMOTION SUR PAYS TIERS
VIRAGE À GRANDE INCLINAISON
Prénom : Date : Les multiplications 1 Calcul
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Le code de Huffman: est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman.
Module 5 : Gestion de l'accès aux ressources à l'aide de groupes
Chapitre 8 : Organisation et gestion de données
Reconnaissance de formes: lettres/chiffres
Travaux Pratiques de physique
Régimes triphasés Nikola TESLA.
H. Wertz -- Exécution Symbolique
Chapitre 8 : Multiplication
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
Nombres premiers : ce sont des nombres entiers positifs, qui ne sont divisibles que par 1 et eux- mêmes. Exemples : 24 est divisible par 2, par 3, par.
GYMNASTIQUE ARTISTIQUE FEMININE Programme Fédéral A
Audrey Gervereau, Métis, stage M2
Arbre binaire.
Équilibre de marché 1.
UMLV ã Plus courts chemins Toutes paires d'états
Programmation – Mathématiques
Evaluation de Maths 1 1 CM1 1 Ecris ces nombres en chiffres:
1- Écrire un nombre Écris les nombres dans lesquels tu entends 1
1- Connaitre le vocabulaire des opérations.
Quelques propriétés de l’air et ses constituants
1- Connaitre le vocabulaire des opérations.
DICTIONNAIRES (MAPS).
ELABORATION DU PLU-I DINAN AGGLOMÉRATION
Gestion des destinataires (recipients)
Transcription de la présentation:

5 6 2 4 1 3 7 UMLV ã Arbres de recherche AVL Implémentation d‘ensembles avec opérations : MIN (A), MAX (A) AJOUTER (x, A) ENLEVER (x, A) ELEMENT (x, A) A arbre (binaire de recherche) AVL (équilibré en hauteur) 1/ en tout noeud p de A (si A non vide) : |h(Ad(p)) - h(Ag(p))| £ 1 2/ A vide ou A = ( r, Ag, Ad ), Ag, Ad sont des arbres AVL et |h(Ad) - h(Ag)| £ 1 bal(p) = bal(A(p)) = h(Ad(p)) - h(Ag(p)) 1’/ en tout nœud p de A (si A non vide), bal(p) = -1, 0 ou + 1 O(log(|A|) pire des cas 5 6 2 4 1 3 7

Implémentation des AVL UMLV ã Implémentation des AVL struct NOEUD { element elt ; deuxbits bal ; /* compris entre –1 et +1 */ /* -2 et +2 dans la suite */ struct NOEUD * g, * d ; } noeud ; noeud * arbre ; (arbre,entier) AJOUTER (element x, arbre A) ; /* rend l’arbre modifié et la différence de hauteur : 0 ou +1 */ (arbre,entier) ENLEVER (element x, arbre A) ; /* rend l’arbre modifié et la différence de hauteur : -1 ou 0 */ (arbre,entier) OTERMIN (arbre A) ;

F’k-2 = Fk-2 avec étiquettes augmentées de Fk+1 UMLV ã Hauteur des arbres AVL A arbre AVL à n nœuds log2(n+1)-1 £ h(A) £ 1,45 log2(n+2) ARBRES de FIBONACCI [ nœuds identifiés à leurs étiquettes, 1, 2, … ] Fo = () = arbre vide h(Fo) = -1 F1 = (1, (), ()) h(F1) = 0 Fk = (Fk+1, Fk-1, F’k-2) si k>1 h(Fk) = k-1 F’k-2 = Fk-2 avec étiquettes augmentées de Fk+1 [nombres de Fibonacci : F0 = 0, F1 = 1, F2 = 1, F3 = 2, F4 = 3, … ]

UMLV ã AVL de Fibonacci F1 1 F2 2 1 F3 3 4 2 1 F4 5 7 3 4 2 1 6 [ F0 = 0, F1 = 1, F2 = 1, F3 = 2, F4 = 3, F5 = 5, F6 = 8, F7 = 13, … ]

Tout arbre AVL de hauteur k-1 possède au moins - Fk+2 -1 nœuds UMLV ã Propriétés L'arbre de Fibonacci Fk - est un arbre AVL - est étiqueté par 1, 2, ..., Fk+2-1 - a pour hauteur k-1 Tout arbre AVL de hauteur k-1 possède au moins - Fk+2 -1 nœuds Conséquence : pour A AVL avec n nœuds et hauteur k-1 n  Fk+2 - 1 > k+2/5 – 2 h(A) = k - 1 < 1,45 log2(n+2) – 0,33

équilibrage nécessaire UMLV ã bal=0 2 3 5 13 10 6 12 7 4 9 1 Ajout dans un AVL bal=1 2 3 5 13 10 6 12 7 4 9 8 +1 bal=1 2 3 5 13 10 6 12 7 4 9 +8 +11 bal=2 2 3 5 13 10 6 12 7 4 9 11 équilibrage nécessaire

Equilibrage (après AJOUT) UMLV ã Equilibrage (après AJOUT) A B x bal=1 Équilibrage par rotation gauche bal=2 A x deux cas A B x bal=-1 Équilibrage par double rotation gauche 1

A = (r, Ag, Ad) avec Ag, Ad sont AVL - bal(A) = 2 - bal (Ad) = 1 UMLV ã Rotation gauche A = (r, Ag, Ad) avec Ag, Ad sont AVL - bal(A) = 2 - bal (Ad) = 1 2 A B ROTG 1 La rotation préserve l'ordre symétrique Note : elle diminue la hauteur

Rotation gauche (suite) UMLV ã Rotation gauche (suite) A = (r, Ag, Ad) avec Ag, Ad sont AVL - bal(A) = 2 - bal (Ad) = 0 A B ROTG 2 1 -1 La rotation préserve l'ordre symétrique Note : elle ne diminue pas la hauteur

a = A->bal; b = B->bal; UMLV ã arbre ROTG(arbre A) { arbre B; int a,b; B = A->d; a = A->bal; b = B->bal; A->d = B->g; B->g = A; /* rotation */ A->bal = a-max(b,0)-1; B->bal = min(a-2,a+b-2,b-1); return B; } Exercices : - vérifier les calculs de bal - écrire la rotation droite ROTD

a = A->bal; b = B->bal; UMLV ã arbre ROTD(arbre A) { arbre B; int a,b; B = A->g; a = A->bal; b = B->bal; A->g = B->d; B->d = A; /* rotation */ A->bal = a-min(b,0)+1; B->bal = max(a+2,a+b+2,b+1); return B; } Exercice : - vérifier les calculs de bal

Double rotation gauche UMLV ã Double rotation gauche A = (r, Ag, Ad) avec Ag, Ad sont AVL - bal(A) = 2 - bal (Ad) = -1 2 A C B A C B -1 DROTG La rotation préserve l'ordre symétrique Note : elle diminue la hauteur

Double rotation gauche (suite) UMLV ã Double rotation gauche (suite) A C B C A B DROTG(A) ROTG(A) ROTD(B) A C arbre DROTG(arbre A) { A->d = ROTD(A->d); return ROTG(A); } B

Double rotation gauche (suite) UMLV ã Double rotation gauche (suite) DROTG 2 -1 A C B 1 DROTG 2 -1 A C B 1

UMLV ã Exemples de rotations Ajouts successifs de 4, 3, 1, 6, 7, 5, 2 dans l’arbre vide 4 3 4 [ROTD(4)] 4 1 3 4 6 1 3 [ROTG(4)] 6 7 5 3 2 1 4 6 7 5 3 1 4 6 7 4 1 3 [DROTD(3)] [DROTG(3)]

arbre EQUILIBRER(arbre A) { if (A->bal == 2) UMLV ã Équilibrage arbre EQUILIBRER(arbre A) { if (A->bal == 2) if (A->d->bal >= 0) return ROTG(A); else { A->d = ROTD(A->d); } else if (A->bal == -2) if (A->g->bal <= 0) return ROTD(A); else { A->g = ROTG(A->g); else return A; Entrée A arbre tel que Ag, Ad sont AVL -2 £ bal(A) £ 2 Sortie A arbre AVL [-1 £ bal(A) £ 1]

Variation de hauteur après AJOUT UMLV ã Variation de hauteur après AJOUT A x Équilibre (bal) variation avant après de hauteur -1 0 0 0 1 +1 1 0 0 corrélation ! Conclusion : variation = 0 ssi bal = 0 après ajout A x A x ROT

UMLV ã (arbre,int) AJOUTER(element x, arbre A) { if (A == NULL) { créer un nœud A; A->g = NULL; A->d = NULL; A->elt = x; A->bal = 0; return (A,1); } else if (x == A->elt) return (A,0); else if (x > A->elt) (A->d,h) = AJOUTER(x,A->d); else (A->g,h) = AJOUTER(x,A->g); h = -h; if (h == 0) A->bal = A->bal + h; A = EQUILIBRER(A); if (A->bal == 0) return (A,0); else return (A,1); }

Temps d’une rotation : constant UMLV ã Temps d’un ajout Temps d’une rotation : constant Note : AJOUTER exécute au plus une rotation car une rotation dans cette situation rétablit la hauteur initiale de l’arbre auquel elle est appliquée A arbre AVL à n nœuds Temps total d’un ajout : O(h(A)) = O(log n) car une seule branche de l’arbre est examinée

Variation de hauteur après RETRAIT UMLV ã Variation de hauteur après RETRAIT A x Équilibre (bal) variation avant après de hauteur -1 0 -1 0 1 0 1 0 -1 ou -1 0 corrélation ! Conclusion : variation = -1 ssi bal = 0 après retrait A x A x ROT

UMLV ã (arbre,int) ENLEVER(element x, arbre A) { if (A == NULL) return (A,0); else if (x > A->elt) (A->d,h) = ENLEVER(x,A->d); else if (x < A->elt) (A->g,h) = ENLEVER(x,A->g); h = -h; else if (A->g == NULL) { /* free */ return (A->d,-1); } else if (A->d == NULL) { /* free */ return (A->g,-1); } else { A->elt = min(A->d); (A->d,h) = OTERMIN(A->d); } . . . .

UMLV ã . . . . if (h == 0) return (A,0); else { A->bal = A->bal + h; A = EQUILIBRER(A); if (A->bal == 0) return (A,-1); else }

Entrée A arbre AVL non vide UMLV ã (arbre,int) OTERMIN(arbre A) { if (A->g == NULL) { min = A->elt; /* free */ return (A->d,-1); } else (A->g,h) = OTERMIN(A->g); h = -h; if (h == 0) return (A,0); else { A->bal = A->bal + h; A = EQUILIBRER(A); if (A->bal == 0) return (A,-1); else } Entrée A arbre AVL non vide

Note : ENLEVER et OTERMIN peuvent exécuter UMLV ã Temps d’un retrait Note : ENLEVER et OTERMIN peuvent exécuter une rotation sur chaque ancêtre du nœud supprimé Exemple : suppression du maximum dans un arbre de Fibonacci A arbre AVL à n nœuds Temps total d’une suppression : O(h(A)) = O(log n) car ENLEVER et OTERMIN examinent une seule branche de l’arbre (et temps d’une rotation constant)