Partage d'information

lundi 9 novembre 2015

Algorithmes et structures des données 1

By on 04:52:00


Algorithmes et structures des données




Les structures arborescentes

Un arbre est un ensemble d’éléments appelés nœuds ou sommets organisés de manière hiérarchique à partir d’un nœud distingué appelé racine. On repère les nœuds de l’arbre en leur donnant des noms différents.

Arbres binaires

Un arbre binaire est soit vide, noté Ø, soit de la forme < r, B1, B2 > où r est la racine et où B1 et B2 sont des arbres binaires.


 


On définit intuitivement les notions de sous-arbre, de sous-arbre gauche, de fils gauche, de lien gauche et réciproquement à droite. On définit encore les notions de père, de frère, d’ascendant et de descendant. Les nœuds d’un arbre binaire ont au plus deux fils. Un nœud interne ou double a 2 fils. Un point simple à gauche a seulement un fils à gauche, et réciproquement à droite. Un nœud externe ou feuille n’a pas de fils. De façon généralisé, on qualifie de nœud interne, tout nœud qui n’est pas externe. On appelle les branches de l’arbre tout chemin (suite consécutive de nœuds) allant de la racine à une feuille. Il y a autant de branches que de feuilles. Le bord gauche est le chemin issu de la racine en suivant les liens gauches, et réciproquement à droite.

Les caractéristiques d’un arbre sont :
-          la taille de l’arbre est le nombre total de nœuds.
-          la hauteur ou niveau d’un nœud x est le nombre de lien sur l’unique chemin allant de la racine à x, notée h(x).
-          la hauteur ou profondeur de l’arbre A, .
-          la longueur de cheminement de l’arbre A,   avec LCE la longueur de cheminement extérieure  et LCI la longueur de cheminement intérieure .
-          la profondeur moyenne externe de A est .

On donne la signature du type abstrait arbre binaire :

                sorte arbre
                utilise nœud
                opérations
                               Ø : à arbre
                               < – , – , – > : nœud x arbre x arbre à arbre
                               racine : arbre à nœud
                               gauche : arbre à arbre
                               droit : arbre à arbre.

Proposition : Soit un arbre binaire de taille n, de profondeur p et possédant f  feuilles. Si on examine les cas extrêmes, on obtient que  ; par ailleurs  d’où .

Représentation des arbres en machines : On utilise la structure récursive des arbres.
1)       Dans cette première représentation, le chaînage est symbolisé par des pointeurs.

type arbre = adresse de nœud ;
type nœud =                structure
                       val : élément ;
                       g, d : arbre ;
                       fin ;

L’arbre est déterminé par l’adresse de la racine. On gère la mémoire dynamiquement pour les opérations de suppression / insertion.

2)       Dans la représentation contiguë, on simule les chaînages par des indices dans un tableau.

type arbre = tableau de 1 à N de
                                       structure
                                       val : élément ;
                                       g, d : entier ;
                                       fin ;

On utilise l’indice 0 pour indiquer qu’il n’y a pas de fils. L’arbre est déterminé par une variable entière contenant l’indice de la racine. On va gérer les cases libres pour des insertions / suppressions. On chaîne les cases libres comme une pile, en utilisant le chaînage g et on utilise une variable entière libre pour indiquer l’indice du « sommet de pile ».

Arbres binaires complets

Un arbre binaire est complet si tous les nœuds qui ne sont pas des feuilles ont 2 fils.

Propositions : Un arbre binaire complet ayant n nœuds internes possède en tout n+1 feuilles. La démonstration se fait simplement par récurrence. Par ailleurs, on montre qu’il existe une bijection entre l’ensemble des arbres binaires de tailles n, Bn, et l’ensemble des arbres binaires complets de taille 2n+1, BC2n+1. Principe : on ajoute des feuilles de sorte que tout nœud de l’arbre ait deux fils. De plus on établit que .

Arbres binaires parfaits, ordre hiérarchique

On dit qu’un arbre binaire est parfait si toutes ses feuilles sont situées sur les deux derniers niveau, l’avant dernier étant complet, et les feuilles du dernier sont le plus à gauche possible. Attention ! un arbre binaire parfait n’est pas forcément complet, mais il a toujours au plus un nœud simple (le père de la feuille la plus à droite).

On peut représenter un arbre binaire parfait de taille n de manière compacte par un tableau à n cases. Ceci se fait en numérotant les nœuds de 1 à n en partant de la racine, niveau par niveau de gauche à droite (ordre hièrarchique). On a les relation générales suivantes :
-          le père du nœud d’indice i est à l’indice i / 2 (division entière) ;
-          le fils gauche d’un nœud i est, s’il existe, à l’indice 2i ;
-          le fils droit d’un nœud i est, s’il existe, à l’indice 2i+1 ;
-          les feuilles sont aux indices > n / 2.

Parcours en profondeur d’un arbre binaire

On considère l’opération de parcours qui consiste à examiner systématiquement dans un certain ordre tous les nœuds de l’arbres pour effectuer un traitement de données.  Le parcours en profondeur à gauche consiste à partir de la racine et à tourner autour de l’arbre en allant toujours le plus à gauche possible.

Procédure Parcours(A : arbre) ;

                début
                Si A = Ø
Alors T0
                               Sinon
                               début
                                               T;
                                               Parcours(g(A)) ;
                               T;
                                               Parcours(d(A)) ;
                                               T;
                               fin ;
                fin ;

Chaque nœud est visité trois fois. à chaque visite correspond un traitement Ti et un ordre de parcours. T1 s’effectue avant la descente gauche et décrit l’ordre préfixe ou pré-ordre. T2 s’effectue après la remontée gauche et avant la remontée droite, l’ordre associé est l’ordre infixe ou symétrique. Le traitement T3 est réalisé après la remontée droite ; les nœuds sont parcourus dans l’ordre suffixe ou post-fixe. On ajoute un traitement particulier T0 pour les nœuds vides.

Arbres généraux

Un arbre général, ou simplement arbre, est une structure arborescente où le nombre de fils n’est plus limité à 2.
Un arbre A = < r, A1, A2, …, An > est la donnée d’une racine r et d’une suite éventuellement vide de sous-arbres disjoints. Cette suite est une forêt. Un arbre est obtenu en rajoutant un nœud racine à la forêt.

On donne la signature des arbres généraux :

                sorte arbre, forêt
                utilise nœud
                opérations
                               cons : nœud x forêt à arbre
                               racine : arbre à nœud
                               sous-arbre : arbre à forêt
                               Ø : à forêt
                               ième : forêt x entier à arbre
                               longueur : forêt à entier
                               insérer : forêt x entier x arbre à forêt

Il n’y a plus de notion de fils gauche ou de fils droit. On parle du  ième fils d’un nœud.

Dans un parcours à gauche, chaque nœud est rencontré une fois de plus que son nombre de fils.

Procédure Parcours(A : arbre) ;
                début
                Si sous-arbre(A) = Ø
                               Alors T0
                               Sinon
                                               début
                                               i ß 1 ;
                                               Répéter
                                                               T;
                                                               Parcours(ième(sous-arbre(A), i)) ;
                                                               i++ ;
                                               Jusqu’à ce que i > longueur(sous-arbre(A)) ;
                                               T;
                                               fin ;
                fin ;

L’ordre préfixe sur les nœuds est obtenu en ne faisant qu’intervenir que T1. L’ordre suffixe est obtenu en ne faisant intervenir que Ti à l’extérieur de la boucle. Il n’y a pas d’ordre infixe.

Représentation des arbres : On représente un arbre général par des listes chaînées dynamiques.

type arbre = adresse de nœud ;
type nœud =                structure
                       val : élément ;
                       premier_fils, frère : arbre ;
                       fin ;
Propositions : Le nombre d’arbres généraux de taille n+1 est . Par ailleurs, il existe des bijections entre les forêts de taille n, les arbres généraux de taille n+1, et les arbres binaires de taille n, avec des propriétés intéressantes sur les parcours.

0 commentaires:

Enregistrer un commentaire