ARBRES
exercices
Ex 1 Dans cet exercice, on consid`ere des graphes dont l’ensemble des sommets est S={0,1, . . . , n1}.
On suppose de plus que n3.
1. Soit G= (S, A) un arbre. Montrer que Gposs`ede un sommet de degr´e 1 et que le graphe obtenu
en supprimant un tel sommet et l’arˆete associ´ee est encore un arbre.
2. A un arbre G= (S, A) on peut alors associer un n2 uplet d’´el´ements de [|0, n 1|] par
l’algorithme suivant
On part d’un uplet L vide
Pour k de 1 `a n-2, faire
Noter i le plus petit sommet de degr´e 1
Ajouter au uplet L le voisin de i
Supprimer i de G
Renvoyer L
Donner le 6-uplet associ´e `a l’arbre
4
k
6
k0
k7
k1
k
2
k5
k3
k
AAA
3. Justifier l’injectivit´e de l’application qui `a l’arbre associe le n2-uplet.
4. Justifier la bijectivit´e en donnant un algorithme permettant de reconstruire l’arbre `a partir du
n2-uplet (on ne demande pas de preuve). Appliquer au uplet (1,1,0,2,2,0,3,3).
5. Impl´ementer les deux algorithmes pr´ec´edents en Caml. On repr´esentera les graphes par une
matrice d’adjacence et les uplets par des tableaux.
6. D´eterminer le nombre des arbres dont l’ensemble des sommets est S.
Ex 2 Soit G= (S, A) un graphe connexe. Pour construire un arbre couvrant ce graphe, on peut partir
d’un graphe sans arˆete. On choisit arbitrairement un sommet. On ajoute alors une arˆete issue de ce
sommet (il en existe une). On a alors deux sommets “couverts”. On ajoute alors une arˆete entre un
sommet couvert et un autre non couvert (il en existe une par connexit´e). On poursuit le processus
jusqu’`a couvrir tous les sommets. On a alors ajout´e n1 arˆetes et on a un sous-graphe qui est un
arbre.
On choisit de repr´esenter les graphes en Caml grˆace au type suivant :
type arete == int*int ;;
type graphe = {N : int ; A : arete list} ;;
Le champ Nnous donne le nombre des sommets. Le champ Adonne la liste des arˆetes, une arˆete ´etant
ici un couple (x, y) avec x<y.
Ecrire une fonction arbrecouvrant : graphe graphe mettant en oeuvre l’algorithme pr´ec´edent.
1
Ex 3 On veut compter le nombre Cnd’arbres diff´erents de sommets 0, . . . , n 1 (on parle ici d’arbres
non orient´es ; le calcul a ´et´e effectu´e d’une autre mani`ere en exercice 1). Pour cela, on va transiter par
des arbres orient´es (et donc aussi enracin´es). Pour construire un tel arbre orient´e, on doit choisir n1
arˆetes orient´ees. On appelle construction un n1 uplet d’arˆetes orient´ees donnant un arbre. Notez que
deux constructions peuvent donner le mˆeme arbre et que tout n1 uplet n’est pas une construction
(le choix des arˆetes pouvant ne pas mener `a un arbre orient´e). On note Dnle nombre de constructions
dans le cas de nsommets (on compte donc le nombre de uplets et pas le nombre d’arbres orienes).
1. Dans un premier compte, on choisit l’un des Cnarbres non orient´es. Choisir une racine oriente
chaque arˆete et il reste `a choisir l’ordre de ces arˆetes dans le uplet. En utilisant ce raisonnement,
montrer que Dn=n!Cn.
2. Dans un second temps, on part du graphe vide et on ajoute une arˆete orient´ee puis une seconde
puis une troisi`eme etc. Initialement, on a ncomposantes connexes formant une forˆet de narbres
r´eduits `a leurs racines. L’ajout de chaque arˆete orient´ee fusionne deux composantes. Quel est
le nombre de choix possibles pour la k-i`eme arˆete (lors de ce choix, on a nk+ 1 composantes
connexes form´ees d’arbres orient´es et on doit en fusionner deux en gardant des arbres orient´es) ?
En d´eduire la valeur de Dn.
3. Conclure que Cn=nn2.
Ex 4 Ecrire une fonction arbreDFS : graphe int graphe qui `a partir d’un graphe non orient´e
et d’un num´ero de sommet renvoie l’arbre orient´e de parcours en profondeur `a partir du sommet ar-
gument. On repr´esente ici les graphes par le tableau des listes d’adjacence.
Ex 5 Ecrire une fonction compteF : arbre int renvoyant le nombre de feuilles d’un arbre.
Ex 6 On choisit ici la d´efinition des arbres binaires sans l’arbre vide. Dans un arbre binaire t,
on note i(t) la somme des profondeurs des noeuds internes et e(t) celle des profondeurs des feuilles.
D´emontrer que dans un arbre binaire t`a n(t) noeuds internes on a
e(t) = i(t)+2n(t)
Ex 7 Si aest un arbre non vide, on appelle d´es´equilibre de ala diff´erence des hauteurs du fils gauche
et du fils droit de a(d(a) = h(g)h(d)). On d´efinit r´ecursivement les arbres AVL par
- l’arbre vide est un arbre AVL
-a=Noeud(g, c, d) est un arbre AVL si get dsont des arbres AVL et si d(a)∈ {−1,0,+1}.
1. Montrer qu’un arbre AVL est ´equilibr´e.
2. Ecrire une fonction testant si un arbre poss`ede la propri´et´e AVL. On ne devra parcourir qu’une
unique fois chaque noeud de l’arbre.
Ex 8 On appelle arbre 0-1 un arbre binaire dont les ´etiquettes valent 0 ou 1 et qui v´erifie les conditions
suivantes :
- la racine (si l’arbre est non vide) est d’´etiquette 0 ;
- le parent d’un noeud d’´etiquette 1 est d’´etiquette 0 ;
- pour chaque noeud, tout les chemins de ce noeud `a une feuille contiennent le mˆeme nombre de
noeuds d’´etiquette 0.
1. Montrer que le squelette d’arbre ci-dessous peut ˆetre ´etiquet´e afin de devenir un arbre 0-1.
2



 

HHHHHHH

 



@@@
AAA

 

@@@

 

AAA

 



AAA
AAA
2. Donner un exemple de squelette d’arbre ne pouvant ˆetre ´etiquet´e en un arbre 0-1.
3. Si aest un arbre 0-1, on note z(a) le nombre de noeuds d’´etiquette 0 sur le chemin de la racine
`a une feuille (ce nombre ne d´epend pas de la feuille). Montrer que
z(a)h(a)+12z(a) et |a| ≥ 2z(a)1
En d´eduire que les arbres 0-1 sont ´equilibr´es.
4. Ecrire une fonction testant en temps lin´eaire en fonction du nombre de noeuds si un arbre
d’´etiquettes dans {0,1}est un arbre 0-1.
Ex 9 Ecrire une fonction prenant en argument un arbre binaire et renvoyant la liste des ´etiquettes de
l’arbre dans l’ordre pr´efixe (par exemple). On essayera d’´ecrire une fonction n’utilisant que l’op´erateur ::
de consage et pas celui de concat´enation @.
Ex 10 Impl´ementer l’algorithme d’affichage des noeuds d’un arbre dans un parcours en largeur (on
supposera les ´etiquettes enti`eres). On repr´esentera une file `a l’aide de deux listes (selon le cours de
premi`ere ann´ee) ; on ´ecrira donc une fonction auxiliaire r´ecursive qui prendra en argument ces deux
listes.
Ex 11 Comment, `a l’aide d’un parcours en profondeur, v´erifier la structure d’ABR ?
Ex 12 Ecrire une fonction efficace de cr´eation d’un abr `a partir d’un tableau tri´e. Justifier les choix
faits (en quoi est-ce efficace ?) et donner la complexit´e de la fonction.
Ex 13 On peut utiliser une technique d’insertion dans un abr autre que celle d’insertion aux feuilles
vue en cours. La m´ethode consiste `a ins´erer l’´etiquette x`a la racine du nouvel arbre. Pour cela, on
d´ecoupe l’arbre initial en deux arbres dont les ´etiquettes sont respectivement plus petites et plus
grandes que xet `a rassembler ces arbres sous une nouvelle racine.
a. Ecrire une fonction Caml mettant en oeuvre cette m´ethode (on convient de ne pas ajouter x
s’il est d´ej`a pr´esent).
b. Quelle est la complexit´e de la fonction pr´ec´edente.
3
Ex 14 Proposer une structure permettant de g´erer des tas dont les ´el´ements ne sont plus forc´ement
des entiers.
Ex 15
1. Ecrire une fonction arbre to vect prenant en argument un arbre parfait (pas forc´ement un
APO) et renvoyant un tableau repr´esentant cet arbre.
2. Ecrire la fonction r´eciproque vect to arbre.
Ex 16 Ecrire une fonction d’insertion d’un ´el´ement dans un tas (insere : int tas unit).
Ex 17 Ecrire une fonction supprime : tas int qui prend en argument un tas non vide et en
supprime l’´el´ement `a la racine et renvoie l’´el´ement supprim´e.
Ex 18 Ecrire une fonction tri : int list int list qui prend en argument une liste et en
renvoie une version tri´ee. On utilisera un tas comme file de priorit´e et la strat´egie de tri d´ecrite dans
le cours. On commencera sans doute par une fonction cr´eant un tas `a partir d’une liste. Pr´eciser la
complexit´e de cette fonction.
4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !