Vous êtes sur la page 1sur 5

Algorithmique Partiel no 1

Info-Sp  Epita
D.S. 312009.3 BW (4 jan 2011 - 10 :00)

Consignes ( lire) :
2 Vous devez rpondre sur les feuilles de rponses prvues cet eet.
 Aucune autre feuille ne sera ramasse (gardez vos brouillons pour vous).  Rpondez dans les espaces prvus, les rponses en dehors ne seront pas corriges : utilisez des brouillons !  Ne sparez pas les feuilles moins de pouvoir les r-agrafer pour les rendre.  Aucune rponse au crayon de papier ne sera corrige.

2 La prsentation est note en moins, c'est dire que vous tes not sur 20 et que les points de prsentation (2 au maximum) sont retirs de cette note. 2 Les algorithmes :
 Tout algorithme doit tre crit dans le langage  Tout code
Algo Algo

(pas de

C, Caml

ou autre).

non indent ne sera pas corrig.

 Tout ce dont vous avez besoin (types, routines) est indiqu en annexe (dernire page) !

2 Dure : 2h00

Algorithmique Partiel no 1  D.S. 312009.3 BW Exercice 1 (Graphes : Court cours  4 points )

Info-Sp Epita

1. Comment utiliser/modier le plus simplement possible l'algorithme de parcours en profondeur d'un graphe non orient pour dterminer si ce dernier est connexe ? 2. Peut-on appliquer cette mthode un graphe orient pour dterminer si celui-ci est fortement connexe ? Justier. 3. Si pref[i] retourne le Numro d'ordre prxe de rencontre du sommet i, dans la fort couvrante associe au parcours en profondeur d'un graphe orient G, les arcs x y tels que pref[y] est infrieur pref[x] dans la fort sont appels ? Comment peut-on les direncier ?

Exercice 2 (Graphes : dessiner c'est gagner  4 points )


Soit le graphe G=<S,A> orient avec :

S={1,2,3,4,5,6,7,8,9,10} et A={(1,2),(1,6),(1,7),(2,3),(2,6),(3,1),(3,5),(4,3),(4,8),(4,9),(4,10),(5,1),(7,6), (8,5),(8,10),(10,9)}


1. Reprsenter graphiquement le graphe correspondant G. 2. Donner le tableau DemiDegrIntrieur tel que i [1, Card(S)], DemiDegrIntrieur[i] soit gal au demi-degr intrieur de i dans G. 3. Reprsenter (dessiner) la fort couvrante associe au parcours en profondeur du graphe G. Ajouter aussi les autres arcs en les qualiant l'aide d'une lgende explicite. On considrera le sommet 1 comme base du parcours, les sommets devant tre choisis en ordre numrique croissant.

Algorithmique Partiel no 1  D.S. 312009.3 BW Exercice 3 (ARN : question d'quilibre  5 points ) Rappels :

Info-Sp Epita

Un arbre bicolore (arbre rouge-noir ) est un arbre binaire de recherche dont les nuds portent une information supplmentaire : ils sont rouges ou noirs (ou blancs sur un tableau noir !). C'est une reprsentation des arbres 2-3-4. L'arbre est "quilibr" condition que les proprits suivantes soient respectes :  Un nud rouge ne peut pas avoir de ls rouge.  La couleur de la racine est noire.  Le nombre de nuds noirs sur tous les chemins de la racine aux feuilles est le mme (hauteur noire = hauteur arbre 2-3-4).
On dsire vrier si un arbre bicolore est bien quilibr. Il faut donc vrier que les nuds rouges et noirs respectent bien les proprits rappeles ci-dessus. L'algorithme crire ici devra vrier :  Qu'il n'y a pas deux nuds rouges qui se suivent : pour cela la fonction retournera un entier gal 0 ou 1 selon que la racine de l'arbre parcouru est rouge ou pas.  Que les hauteurs noires en chaque branche sont identiques : pour cela, la fonction prendra un paramtre global hauteur qui contiendra la hauteur de l'arbre parcouru. Dans la cas o l'arbre n'est pas quilibr, la fonction retournera un entier ngatif. La vrication que la racine est noire sera faite par la fonction d'appel, donne ci-dessous.

algorithme fonction est_arn : booleen parametres locaux


t_arn A

variables

debut retourne (A = nul) ou (non A.rouge et (test_arn (A, hauteur) <> -1)) n algorithme fonction est_arn
Complter la fonction rcursive test_arn (t_arn A) (vous pouvez ajouter des variables si cela vous semble ncessaire). Le type t_arn est rappel en annexe.

entier

hauteur

Algorithmique Partiel no 1  D.S. 312009.3 BW Exercice 4 (Poids cumul d'un arbre couvrant  7 points )

Info-Sp Epita

2 1. 4 1. 1. 10. 5 1. 4. 2. 3 5. 1. 1

2.

6 4.

2. 8

7 1.

Figure

1  Graphe orient et valu

Dans cet exercice nous travaillerons avec des graphes orients et valus en reprsentation dynamique. On dnit le poids cumul d'un sommet dans un arbre couvrant (issu d'un parcours profondeur) comme la somme des poids des ls de sommet dans l'arbre plus le cot des arcs couvrant joignant ces sommets, c'est dire : p[s] = i (cout(s, si ) + p[si ]) o si est un ls du sommet s dans l'arbre couvrant. On se propose d'crire un algorithme qui construit l'arbre couvrant du parcours profondeur d'un graphe et calcule le poids cumul des sommets de cet arbre. Par exemple, pour le graphe de la gure 1 en partant du sommet 2 (en rencontrant les sommets dans l'odre croissant) on obtiendra le vecteur de poids (prsent ici avec le vecteur de pres reprsentant l'arbre couvrant) suivant : pere poids 0


-1 17.

2 16.

3 6.

"

4 5.

5 3.

6 1.

7 0.

&

Remarque : les feuilles de l'arbre couvrant ont un poids de zro et les sommets non atteints par le parcours ont un poids de +.
Pour la suite, on considre que le principe d'un parcours profondeur est acquis (vous n'avez pas dcrire le principe du parcours, seulement ce qui est spcique l'algorithme.) 1. crire la fonction cumul(ps,pere,poids) qui eectue le parcours profondeur depuis le sommet point par ps et remplit le vecteur pere reprsentant l'arbre couvrant ainsi que le vecteur (rel) poids contenant les poids des sommets atteints par le parcours. La fonction renverra le poids cumul du sommet ps. 2. crire la fonction (appel de l'algorithme prcdant) poids_cumul(s,g,pere,poids) qui lance le parcours en profondeur sur le sommet s dans le graphe g.

Algorithmique Partiel no 1  D.S. 312009.3 BW

Info-Sp Epita

Annexes
Reprsentation des arbres bicolores

types /* dclaration du type t_element */


t_arn = t_noeud_arn t_noeud_arn = enregistrement t_element cle booleen rouge t_arn fg, fd n enregistrement t_noeud_arn

Reprsentation dynamique des graphes


types
t_listsom = s_som t_listadj = s_ladj s_som = enregistrement entier som t_listadj succ t_listadj pred t_listsom suiv n enregistrement s_som s_ladj = enregistrement t_listsom vsom reel cout t_listadj suiv n enregistrement s_ladj t_graphe_d = enregistrement entier ordre booleen orient t_listsom lsom n enregistrement t_graphe_d

Autres types utiles


constantes types
Max = /* une valeur susante !*/ t_vect_entiers = Max entier t_vect_booleens = Max booleen t_vect_reels = Max reel

Routines autorises
Files
Toutes les oprations sur les les peuvent tre utilises condition de prciser le type des lments.

file_vide (): t_file : initialise la le est_vide (t_file f ) : booleen : indique si f est vide enfiler (t_elt_file e, t_file f ): t_file : enle e dans f defiler (t_file f ): t_elt_file : dle et retourne le premier lment de f

Autres
Les fonctions max, min, abs, ainsi que les valeurs et sont aussi autorises. De mme pour la fonction recherche (entier s, t_graphe_d G) qui retourne le pointeur sur le sommet s dans G (de type t_listsom).