La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Arbres binaires complets Arbre binaire plein : Chaque nœud possède 0 ou 2 enfants. Arbre binaire complet: Si la hauteur de larbre est d, alors les d-1.

Présentations similaires


Présentation au sujet: "Arbres binaires complets Arbre binaire plein : Chaque nœud possède 0 ou 2 enfants. Arbre binaire complet: Si la hauteur de larbre est d, alors les d-1."— Transcription de la présentation:

1 Arbres binaires complets Arbre binaire plein : Chaque nœud possède 0 ou 2 enfants. Arbre binaire complet: Si la hauteur de larbre est d, alors les d-1 premiers niveaux sont complets. Les nœuds du dernier niveau sont tous à gauche.

2 Théorème des arbres pleins (1) Theorème: Le nombre de feuilles dans un arbre binaire plein est un de plus que le nombre de nœuds internes. Preuve (par induction mathématique): Base: Avec un seul nœud interne, on a deux feuilles. Hypothèse dinduction: Supposons que tous les arbres binaires pleins avec n-1 nœuds internes possèdent n feuilles.

3 Théorème des arbres pleins (2) Pas dinduction: Étant donné un arbre binaire plein avec n nœuds internes, on choisit un nœud interne I avec 2 enfants. On enlève les enfants de I pour obtenir un arbre T. Par hypothèse dinduction, T est un arbre binaire plein avec n feuilles. Si on replace les deux enfants de I, le nombre de nœuds internes augmente de 1 et le nombre de feuilles augmente de 1.

4 Arbre binaire complets (1) Frère droite Frère gauche Fils de droite Fils de gauche Parent Position

5 Arbre binaire complets(2) Parent (r) = (r-1)/2 si r 0 Leftchild(r) = 2r+1 si 2r+1 < n Rightchild(r) = 2r+2 si 2r+2 < n Leftsibling(r) = r-1 si r>0 est pair Rightsibling(r) = r+1 si r n est impair

6 Monceau (heap) Monceau (ou tas): Arbre binaire complet possédant la propriété suivante: Monceau-min: La valeur dun nœud est plus petite que la valeur de ses enfants. Monceau-max: La valeur dun nœud est plus grande que la valeur de ses enfants. Les valeurs sont partiellement ordonnées. Représentation:Tableau.

7 Monceau: TDA template class maxheap{ private: Elem* Heap; int size; int n; void siftdown(int); public: maxheap(Elem* h, int num, int max); int heapsize() const; bool isLeaf(int pos) const; int leftchild(int pos) const; int rightchild(int pos) const; int parent(int pos) const; bool insert(const Elem&); bool removemax(Elem&); bool remove(int, Elem&); void buildHeap(); };

8 Insérer un élémement template bool maxheap ::insert(const Elem& val) { if (n >= size) return false; int curr = n++; Heap[curr] = val; while ( (curr!=0) && (Heap[curr] >= Heap[parent(curr)] ) { swap(Heap, curr, parent(curr)); curr = parent(curr); } return true; }

9 Enlever la valeur maximum template bool maxheap ::removemax(Elem& it) { if (n == 0) return false; swap(Heap, 0, --n); if (n != 0) siftdown(0); it = Heap[n]; return true; }

10 Siftdown (1) template void maxheap ::siftdown(int pos) { while (!isLeaf(pos)) { int j = leftchild(pos); int rc = rightchild(pos); if ((rc

11 Construire le monceau (a) (4-2) (4-1) (2-1) (5-2) (5-4) (6-3) (6-5) (7-5) (7-6) (b) (5-2), (7-3), (7-1), (6-1)

12 Siftdown (2)

13 Coût pour construire un monceau Pour construire le monceau rapidement: –On commence au bas de larbre. –On appelle siftdown pour chaque noeud. –Inutile dappeler siftdown pour les feuilles. log n (i - 1) n/2 i = (n). i=1 car

14 Tri par monceau (1) template void heapsort(Elem A[], int n) { Elem mval; maxheap H(A, n, n); for (int i=0; i

15 Tri par monceau (2) template void sort(Elem* array, int n) { heapsort (array, n); } Temps: (n log n)


Télécharger ppt "Arbres binaires complets Arbre binaire plein : Chaque nœud possède 0 ou 2 enfants. Arbre binaire complet: Si la hauteur de larbre est d, alors les d-1."

Présentations similaires


Annonces Google