Vous êtes sur la page 1sur 4

Travaux dirigs Algorithme 3

Questions
1. Montrer que tout arbre binaire de recherche n nuds peut tre transform en nimporte quel autre arbre binaire de recherche n nuds, laide de O(n) rotations. 2. Montrer que le chemin simple le plus long reliant un noeud x dun arbre rouge-noir une feuille a une longueur qui est au plus gale deux fois celle du plus court chemin simple reliant le noeud x une feuille. 3. Dessiner larbre binaire de recherche complet de hauteur 3 contenant les cls {1, 2, . . . , 15}. Ajouter les feuilles NIL et colorier les noeuds de trois manires diffrentes, de telle faon que les hauteurs noires des arbres rouge-noir rsultants soient 2, 3 et 4. 4. Montrer que, dans tout arbre binaire de recherche n noeuds, il existe exactement n 1 rotations possibles. 5. Ecrire une version rcursive de recupererRang, 6. crire une procdure rcursive RECHERCHER-RANG-CL(T, k) qui prend en entre un arbre de rangs T et une cl k, et qui retourne le rang de k dans lensemble dynamique reprsent par T. On supposera que les cls de T sont distinctes. 7. tant donn un lment x dans un arbre de rangs n nuds, et un entier naturel i, comment peut-on dterminer le ime successeur de x dans lordre linaire de larbre avec un temps O(log n) ? 8. Peut-on utiliser un champ supplmentaire dans les nuds dun arbre rouge-noir pour grer efficacement la profondeur des nuds. Dire pourquoi. 9. Soit X un oprateur binaire associatif, et soit a un champ gr dans chaque nud dun arbre rouge-noir. Supposons quon veuille inclure dans chaque nud x un champ supplmentaire c tel que c[x] = a[x1] X a[x2] X X a[xm], o x1, x2, . . . , xm est la liste infixe des noeuds du sousarbre enracin en x. Montrer que les champs c peuvent tre correctement mis jour en O(1) aprs une rotation. Modifier lgrement votre dmonstration pour montrer que les champs taille des arbres de rangs peuvent tre grs en temps O(1) par rotation. 10. Montrer comment grer un ensemble dynamique Q de nombres pouvant supporter lopration DISTANCE-MIN, qui donne la longueur de la diffrence entre les deux nombres les plus proches dans Q. Par exemple, si Q = {1, 5, 9, 15, 18, 22}, alors DISTANCE-MIN(Q) retourne 18 - 15 = 3, puisque 15 et 18 sont les nombres les plus proches dans Q. Rendre les oprations INSRER, SUPPRIMER, RECHERCHER et DISTANCE-MIN les plus efficaces possibles, et analyser leur temps dexcution. 11. Montrer que, si un graphe orient ou non contient un chemin entre deux sommets u et v, alors il contient un chemin lmentaire entre u et v. Montrer que, si un graphe orient contient un circuit, alors il contient un circuit lmentaire. 12. Montrer quun graphe quelconque G = (S, A) non orient et connexe satisfait |A| |S| 1. 13. Montrer que larc (u, v) est a. Un arc de liaison ou un arc avant si et seulement si d[u] < d[v] < f [v] < f [u], b. Un arc arrire si et seulement si d[v] < d[u] < f [u] < f [v], et c. Un arc transverse si et seulement si d[v] < f [v] < d[u] < f [u]. 14. Rcrire PP, en utilisant une pile pour supprimer la rcursivit.

15. Modifier le pseudo code du parcours en profondeur de manire quil imprime tous les arcs du graphe orient G avec leur type. Donner les modifications ventuelles quil faudrait effectuer si G tait non orient 16. Expliquer comment un sommet u dun graphe orient peut se retrouver dans une arborescence de parcours en profondeur contenant seulement u, mme si u a la fois des arcs entrants et des arcs sortants dans G. 17. Montrer quun parcours en profondeur dun graphe non orient G peut servir identifier les composantes connexes de G, et que la fort de parcours en profondeur contient autant darborescences que G possde de composantes connexes. Plus prcisment, montrer comment modifier le parcours en profondeur pour que chaque sommet v soit affect dune tiquette entire cc[v] comprise entre 1 et k, o k est le nombre de composantes connexes de G, telle que cc[u] = cc[v] si et seulement si u et v appartiennent la mme composante connexe. 18. Un graphe orient G = (S, A) est simplement connexe si u v implique quil existe au plus un chemin simple de u v pour tous les sommets u, v S. Donner un algorithme efficace capable de dterminer si un graphe (orient ou non) est simplement connexe. 19. Donner lordre dans lequel TRI-TOPOLOGIQUE trie les sommets quand on lexcute sur le graphe orient sans circuit

20. Donner un algorithme temps linaire qui prend en entre un graphe orient sans circuit G = (S, A) et deux sommets s et t, puis qui retourne le nombre de chemins allant de s t dans G. Par exemple, dans le graphe orient sans circuit de la figure de lexercice prcdent, il existe exactement quatre chemins permettant de relier le sommet p au sommet v : pov, poryv, posryv et psryv. 21. Donner un algorithme qui dtermine si un graphe non orient G = (S, A) donn contient ou non un cycle. Lalgorithme devra sexcuter en O(S), indpendamment de |A|. 22. En quoi le nombre de composantes fortement connexes dun graphe peut-il tre modifi par lajout dun nouvel arc ? 23. Le professeur Kung-Fou affirme que lalgorithme des composantes fortement connexes peut tre simplifi si lon utilise le graphe initial (au lieu du transpos) lors du second parcours en profondeur et si lon traite les sommets par ordre croissant des dates de fin de traitement. Le professeur a-t-il raison ? 24. Un graphe orient G = (S, A) est dit semi-connexe si, pour toutes les paires de sommets u, v S, on a un chemin allant de u v ou de v u. Donner un algorithme efficace qui dtermine si G est ou non semi-connexe. Prouver sa validit et analyser son temps dexcution.

25. Montrer que, si tous les poids darte dun graphe sont positifs, alors un sous ensemble dartes qui relie tous les sommets et qui a un poids total minimal est forcment un arbre. Donner un exemple montrant que cette conclusion nest plus valable si lon autorise des poids ngatifs. 26. Soit un graphe orient G = (S, A) pour lequel chaque arc (u, v) A possde une valeur r(u, v) relle vrifiant 0 r(u, v) 1. Cette valeur reprsente la fiabilit du canal de communication entre le sommet u et le sommet v. On interprte r(u, v) comme tant la probabilit pour que le canal entre u et v ne soit pas interrompu, et on suppose que ces probabilit sont indpendantes. Donner un algorithme efficace permettant de trouver le chemin le plus fiable entre deux sommets donns. 27. Soit un graphe orient pondr G = (S, A) dans lequel les arcs qui partent du sommet origine s peuvent avoir des poids ngatifs, tous les autres poids darc sont positifs et il ny a pas de circuit de longueur strictement ngative. Montrer que lalgorithme de Dijkstra trouve bien les plus courts chemins issus de s.

Problme : Ensembles dynamiques persistants


Au cours dun algorithme, on a parfois besoin de conserver danciennes versions dun ensemble dynamique quand celui-ci est modifi. Un tel ensemble est dit persistant. Une faon dimplmenter un ensemble persistant est de copier lensemble tout entier chaque fois quil est modifi, mais cette approche peut ralentir un programme et galement consommer beaucoup despace. On peut parfois faire beaucoup mieux. Considrons un ensemble persistant S avec les oprations INSRER, SUPPRIMER et RECHERCHER, quon implmente laide des arbres binaires de recherche reprsents sur la figure. On conserve une nouvelle racine pour chaque version de lensemble. Pour insrer la cl 5 dans lensemble, on cre un nouveau noeud de cl 5. Ce noeud devient lenfant gauche dun nouveau noeud de cl 7, puisquon ne peut pas modifier le noeud de cl 7 existant. De mme, le nouveau noeud de cl 7 devient lenfant gauche dun nouveau noeud de cl 8 dont lenfant droit est lancien noeud de cl 10. Le nouveau noeud de cl 8 devient, son tour, lenfant droit dun nouvelle racine r de cl 4 dont lenfant gauche est lancien noeud de cl 3. On ne recopie ainsi quune partie de larbre et lon partage certains noeuds avec larbre initial. On suppose que chaque noeud de larbre contient les champs cl, gauche et droite mais aucun champ parent a) Pour un arbre binaire de recherche persistant gnral, identifier les noeuds qui ont besoin dtre modifis pour insrer une cl k ou supprimer un noeud y. b) crire une procdure ARBRE-PERSISTANT-INSRER qui, tant donn un arbre persistant T et une cl k insrer, retourne un nouvel arbre persistant T qui rsulte de linsertion de k dans T. c) Si la hauteur de larbre binaire de recherche persistant T est h, quels sont les besoins en temps et en espace de votre implmentation de ARBRE-PERSISTANTINSRER ? (Lespace ncessaire est proportionnel au nombre de nouveaux nuds allous.) d) Supposons quon ait inclus le champ parent dans chaque noeud. Dans ce cas, ARBREPERSISTANT-INSRER doit effectuer des recopies supplmentaires. Dmontrer que les besoins en temps et en espace de ARBRE-PERSISTANT-INSRER sont alors V(n), o n est le nombre de noeuds dans larbre.

e) Montrer comment utiliser des arbres rouge-noir pour garantir que le temps dexcution et lespace ncessaire, dans le cas le plus dfavorable, sont O(lg n) par insertion ou suppression.