Vous êtes sur la page 1sur 18

Anne 2015/2016

Cahier de TD/TP
dAlgorithmique Avance

Christine Porquet

ENSICAEN 1re anne


Spcialit Informatique

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Contenu

Contenu ......................................................................................... 1
Files dattente .............................................................................. 2
Parcours darbre binaire de recherche .................................. 4
Arbre n-aire de mots .................................................................... 5
Parcours de graphe en profondeur et en largeur................ 7
Marquage topologique dun graphe orient ........................... 9
Ordonnancement de tches : la mthode MPM ..................... 11

Les fichiers utiliser pour lensemble des TPs sont rcuprables sur la plateforme pdagogique,
cours Algorithmique avance , dans le dossier Fichiers pour les TPs .

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Files dattente
Buts :

Implantation des files dattente en reprsentation chane

Dure :

1 semaine

Rappel du cours : le type abstrait "file d'attente" = structures de donnes + fonctions


On appelle type abstrait l'association structure de donnes + fonctions permettant de dfinir toutes
les manipulations que l'on souhaite raliser sur ce type de donnes.
Les oprations que nous souhaitons raliser sont les oprations caractristiques des files d'attente:
- crer une file vide,
- tester si la file est vide,
- enfiler un lment (ie. l'ajouter en queue de file),
- dfiler (ie. supprimer l'lment se trouvant en tte de file),
- concatner 2 files (ie. les mettre bout bout),
- afficher le contenu de la file.
Chacune de ces oprations sera dfinie sous forme de fonction C. Toutes ses oprations doivent tre
O(1) (sauf bien sr laffichage qui est O(n)).
Vous avez le choix entre deux reprsentations chanes des files :
- file classique avec deux pointeurs tte et queue,

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

file circulaire avec un unique pointeur de queue.


F

10

20

enfiler 50

10

20

30

dfiler,
dfiler,
dfiler

dfiler

40

30

20

50

40

50

30

40

50

File vide

Travail raliser
Implmenter l'ensemble des fonctions de manipulations des files d'attente proposes. Leur bon
fonctionnement devra avoir t soigneusement test et valid. En effet, ces fonctions seront
rutilises dans les TPs suivants.
Facultatif

copie de file dattente :

destruction de file dattente :


void destruction(File *);
Il doit en rsulter une file vide dont toutes les cellules de liste ont t dsalloues.

File copie(File);

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Parcours darbre binaire de recherche


Buts :

Manipuler les arbres binaires de recherche


Rutiliser le type abstrait file dattente

Dure :

2 semaines

Fichier(s) utiliser/modifier : ABR_TP.c

Travail raliser
crire un programme permettant de gnrer / afficher / parcourir des arbres binaires de recherche.
Les fonctions de parcours programmer sont :
- les 3 fonctions rcursives classiques (prfixe/ infixe / suffixe) ;
- une fonction rcursive qui compte et retourne le nombre de feuilles de lABR ;
- une fonction rcursive avec affichage en ordre prfixe et suffixe et comptage du nombre de
de noeuds de lABR ;
- une fonction de parcours en largeur (utilisation du type abstrait file dattente ) avec
comptage du nombre de nuds de lABR.
Parcours_largeur (rac : pointeur sur la racine de lABR);
F = file_vide;
Enfiler(rac,F);
Tant que F est non vide faire
p = Dfiler(F); /* p, pointeur sur un noeud de lABR */
Afficher(contenu(p));
Si p a un fils gauche, Enfiler (gauche(p), F);
Si p a un fils droit, Enfiler (droit(p), F);

N.B. : Vous rutiliserez les fonctions sur les files dattente du premier TP. Attention, au lieu de
manipuler des files dentiers, il sagit maintenant manipuler des files de pointeurs sur des nuds
dABR.
Facultatif : bordure darbre
La bordure dun ABR est la liste de ses feuilles et peut se dfinir rcursivement comme la
concatnation des bordures des sous-arbres gauche et droit de larbre.
Ecrire une fonction qui construit et retourne la bordure dun ABR sous forme dune file et dont le
prototype est :
File bordure(ABR);

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Arbre n-aire de mots


Buts :

Etude et manipulation dun arbre n-aire dans la reprsentation fils-frre

Dure :

3,5 semaines

Fichiers(s) utiliser : dico.ang, dico.fr

Dans un dictionnaire de mots o figurent toutes les formes des mots, on a beaucoup de prfixes de
mots communs (en particulier pour les conjugaisons des verbes). Reprsenter un tel dictionnaire
sous forme d'arbre n-aire permet de ne stocker qu'une seule fois chaque prfixe de mot. La structure
retenue est une arborescence ordonne de mots dans laquelle chaque nud contient une lettre d'un
mot et deux pointeurs sur le fils gauche et le frre droit de cette lettre. Suivant le lien "frre", les
lettres sont ranges par ordre alphabtique. De plus, pour indiquer les fins de mots, on utilise le
caractre nul '\0'.
Exemple : L'ensemble de mots { ca, ce, ceci, cela, de, des, du } est reprsent par :

c
a
\0

d
e
\0

e
c

\0

\0

\0

u
s

\0

\0

Travail raliser

Dfinir une structure nud avec 3 champs : le caractre quil contient et les 2 pointeurs sur
le fils et le frre,

Ecrire des fonctions rcursives de recherche et d'insertion dun mot dans un arbre n-aire.

Ecrire une fonction de chargement darbre n-aire partir dun fichier texte contenant un
dictionnaire : on part d'un arbre vide et on insre (fonction insertion) successivement chaque
mot lu dans le fichier.

Une fois vos fonctions valides sur un tout petit dictionnaire, vous pourrez charger des donnes plus
consquentes : un dictionnaire franais (dico.fr) et un dictionnaire anglais (dico.ang).

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Facultatif

Facile
Evaluer la complexit mmoire de cette reprsentation. Il suffit de mettre en
place un compteur dallocation de nuds. Discutez du rsultat obtenu : Est-ce une mthode
conome en mmoire ? Comparez avec la taille du fichier.

Assez facile
Ecrire une fonction daffichage de lensemble des mots de larbre par ordre
alphabtique. Adaptez-l ensuite de manire en faire une fonction de sauvegarde de larbre
sur fichier texte.

Difficile
Ecrire une fonction de suppression dun mot de larbre. Attention : seules les
lettres de la fin du mot qui ne sont pas partages par dautres mots doivent tre supprimes.

Assez difficile
nuds.

Ecrire une fonction de destruction de larbre avec dsallocation de chacun des

Dbut du fichier dico.ang :


45369
a
aarhus
aaron
ababa
aback
abaft
abandon
abandoned
abandoning

Dbut du fichier dico.fr :


87050
a
a-t-elle
a-t-il
a-t-on
abaissa
abaissable
abaissai
abaissaient
abaissais

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Parcours de graphe en profondeur et en largeur


Buts :

Manipuler des graphes non orients non valus en reprsentation matrice


dadjacence
Rutiliser le type abstrait file dattente

Dure :

2,5 semaines

Fichier utiliser : genere_graphe_0.c

Reprsentation du graphe
Le graphe sera reprsent sous forme de sa matrice dadjacence (reprsentation baptise M_ADJ en
cours).
Format de stockage du graphe
Celle du cours, un fichier texte au format suivant :
6
0
1
2
3
4
5
1

7
1
2
3
4
5
0
4

Sur la premire ligne, le nombre de sommets et le nombre d'artes du graphe.


Sur les lignes suivantes, une arte par ligne, donne par ses sommets extrmits.
Les artes peuvent tre donnes dans n'importe quel ordre.

Travail raliser
crire un programme permettant de parcourir des graphes non orients non valus, connexes ou
non.
Les fonctions de parcours programmer sont :
- parcours en profondeur avec affichage des sommets en ordre prfixe et suffixe et comptage
du nombre de nuds de chaque composante connexe du graphe,
- parcours en largeur avec comptage du nombre de nuds de chaque composante connexe du
graphe.
Ces fonctions devront retourner un boolen indiquant si le graphe est connexe ou pas. En outre,
elles devront fournir des informations sur les composantes connexes du graphe (nombre de
composantes connexes / numro de la composante connexe laquelle appartient chaque sommet).
Pour le parcours en largeur, vous rutiliserez les fonctions sur les files dattente du premier TP.
Vous navez pas en modifier le code. Vous inclurez directement le fichier den-tte correspondant.
Programmer et valider votre algorithme sur divers graphes (connexes ou non, petits ou gros). Pour
gnrer des graphes au format demand, vous pouvez utiliser le gnrateur de graphe
genere_graphe_0.c.

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Facultatif : Bicoloriage de graphe


Dfinition
On dit qu'un graphe non orient G est bicoloriable s'il est possible de partager son ensemble S de
sommets en deux sous-ensembles disjoints, l'ensemble B des sommets coloris en bleu et
l'ensemble J des sommets coloris en jaune, de telle sorte qu'aucune arte de G ne relie deux
sommets de mme couleur (i.e. appartenant au mme sous-ensemble).
Principe
On sinspire du parcours en largeur : comme pour ce parcours, une file des sommets non encore
examins est utilise. Au dpart, on peut choisir n'importe quel sommet et le colorier, en bleu par
exemple; si un sommet est colori d'une couleur, il faudra alors colorier tous ses successeurs avec
l'autre couleur.

Ecrire une fonction qui dtermine si un graphe G non orient (connexe ou pas) est bicoloriable,
et si oui, ralise un coloriage de sommets de G en bleu/jaune (ou toute autre paire de couleurs
de votre choix). La fonction utilisera et retournera une variable boolenne possible, qui, si l'on
dtecte que deux sommets relis sont de mme couleur, passe faux .

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Marquage topologique dun graphe orient


Buts :

Manipuler des graphes orients non valus en reprsentation listes dadjacence


Rutiliser le type abstrait file dattente

Dure :

2 semaines

Fichier(s) utiliser/modifier : L_ADJ.c

Dfinition
Un marquage topologique consiste en une numrotation {Si} des sommets du graphe de faon
respecter la proprit suivante de prcdence entre les sommets :
{Si} est un marquage topologique du graphe G Sj successeur de Si i < j
Un algorithme de marquage topologique
Cet algorithme assez simple de marquage topologique ne sapplique qu un graphe ayant plusieurs
sommets sans prdcesseur. La proprit qui est la base de cet algorithme est la suivante : les
sommets ne possdant aucun prdcesseur doivent avoir les numros les plus bas disponibles.
Soit un graphe G possdant 9 sommets (illustr ci-dessous). Les sommets sans prdcesseur sont
reprs en fonc.

Dans le marquage topologique, ces deux sommets doivent donc tre numrots 0 et 1.
Une fois ces sommets numrots, on les retire virtuellement du graphe, ainsi que tous les arcs dont
ils sont l'origine. Dans ce graphe rduit, apparaissent trois nouveaux sommets sans prdcesseurs
(reprs en fonc).

On itre en les retirant virtuellement du graphe, ainsi que tous les arcs dont ils sont l'origine. On
sarrte quand le graphe est vide .

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Lordre dans lequel on a retir les sommets du graphe constitue un marquage topologique de celuici.
Travail raliser
Programmer lalgorithme de marquage topologique sur un graphe en reprsentation listes
dadjacence (baptise L_ADJ dans le cours).
Vous modifierez les dclarations du fichier L_ADJ.c pour y ajouter le nombre de prdcesseurs de
chaque sommet.
Une fois construit le graphe en mmoire, une fonction construira une file de sommets sans
prdcesseurs. Pour ce faire, vous rutiliserez les fonctions sur les files dattente du premier TP.
Vous navez pas en modifier le code. Vous inclurez directement le fichier den-tte correspondant.
Expliquons ce que signifie retirer virtuellement un sommet du graphe :
Cela consiste examiner tous les arcs qui partent de ce sommet pour dcrmenter le nombre
de prdcesseurs des sommets extrmits de ces arcs. Si ce nombre devient nul, le sommet
extrmit de larc est alors enfil dans la file des sommets sans prdcesseur.
Votre fonction devra retourner un boolen indiquant si le marquage topologique est possible ou
non.
Facultatif
Programmer le mme algorithme mais en utilisant la place la reprsentation liste de listes
(baptise LL_ADJ dans le cours) et en remplaant la file des sommets sans prdcesseurs par une
pile.
Vous modifierez les dclarations du fichier LL_ADJ.c pour y ajouter le nombre de prdcesseurs
de chaque sommet.
Une fois construit le graphe en mmoire, la liste des sommets sera brise pour devenir une pile
de sommets sans prdcesseurs. Pour ce faire, vous devez modifier uniquement les chanages des
nuds, sans les dsallouer.

10

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Ordonnancement de tches : la mthode MPM


Buts :

Manipuler des graphes orients non valus en reprsentation listes dadjacence

Dure :

2 semaines

Introduction
La ralisation de grands travaux ncessite la surveillance et la coordination des diffrentes tches
pour viter les pertes de temps souvent coteuses. Les problmes qui traitent de cette coordination
sont appels problmes d'ordonnancement .
Le problme que nous allons aborder ne traite que de contraintes de succession dans le temps : une
tche ne peut commencer que lorsque certaines autres sont termines.
La mthode de B. Roy (1960), appele galement mthode MPM permet notamment de connatre la
date au plus tt et la date au plus tard de la fin des travaux.
Prsentation de la mthode MPM sur un exemple
Cette mthode utilise un graphe appel potentiel tches . Voici sur un exemple les grandes lignes
de la mise en uvre de cette mthode.
Premire partie : date au plus tt et date de fin des travaux
On doit excuter 7 tches A, B, C, D, E, F, G soumises aux contraintes suivantes :
tche
A
B
C
D
E
F
G

dure des travaux


(en semaines)
6
3
6
2
4
3
1

contraintes

B doit tre acheve


B doit tre acheve
D et A doivent tre acheves
F, E, C doivent tre acheves

tape 1 : expression des contraintes :


On commence par reprsenter dans un graphe orient toutes les contraintes de prcdence : on
introduit un arc entre un sommet i et un sommet j si la tche i doit tre termine avant le dbut des
travaux de la tche j.

11

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

tape 2 : dure des tches :


On dcore les arcs de ce graphe en valuant les arcs avec la dure de la tche l'origine de l'arc :
par exemple: l'arc AF porte la valeur 6 puisque la tche A dure 6 (semaines).
6
A
F
3
B

3
E

4
6

Dune faon gnrale, dans ce qui suit,


la notation (i,j) dsignera l'arc ij.
la notation vij dsignera la valeur de l'arc (i,j).
Ce graphe permet de calculer la date au plus tt du dbut de chaque tche :
par exemple :
la tche A, qui n'a pas de prdcesseur dans le graphe, peut commencer l'instant 0.
la tche D, qui doit attendre que B soit termine, ne peut commencer qu'en semaine 3
puisque B commence en semaine 0 et dure 3 semaine: 3= 0 + 3;
la tche F, doit attendre que A et D soient termines
o A commence en semaine 0 et dure 6 semaines: fin des travaux de A: 0 +6 = 6
o D commence en semaine 3 et dure 2 semaines: fin des travaux de D: 3 + 2 = 5
Ainsi, les travaux de F ne peuvent commencer qu'en semaine 6.
On reprsente souvent cette situation de la faon suivante :
6
A
0

2
B

D'une faon gnrale, la notation dtotk dsignera la date de dbut des travaux de la tche k. On
constate que :
dtotk = Max(dtoti+vik), o i est une tche qui prcde k
tape 3 : date de fin des travaux : tche Omga
On constate que le graphe prcdent ne permet pas de calculer la date de la fin des travaux : en
effet, on connat la date de dbut de la tche G (=9), mais on ne connat pas la date de la fin des
travaux de G.
Pour uniformiser l'ensemble de la mthode, on cre une tche fictive (toujours appele Omga).
Omga indique la fin des travaux.
Omga a pour prdcesseur toutes les tches qui n'ont pas de successeur ! (ici, seule G
est concerne).

12

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Il suffit ensuite d'appliquer la mme mthode (gnrale, pour cette tche comme pour les autres) : la
date de fin des travaux est gale la date de dbut des travaux de Omga :
dtotOmga = date de fin des travaux
6
A
F
2
3
B
D
3
3
E

4
6

Omega

tape 4 : par souci d'uniformisation : tche Alpha


Par symtrie avec la tche Omga, on cre une tche Alpha qui indique le dbut des travaux
(tAlpha=0). Cette tche de dure 0 prcde toutes les tches qui n'ont pas de prdcesseur dans le
graphe prcdent: (ici, il s'agit de A, B, et C)
6

3
B

Alpha

0
C

Omega

Bilan : Calcul de la date au plus tt de chacune des tches et la date de la fin des travaux :

Effectuer un marquage topologique du graphe (y compris les


sommets Alpha et Omga).

La date au plus tt dAlpha est gale 0

Prendre lun aprs lautre chaque sommet du graphe dans


lordre topologique et calculer sa date au plus tt selon la
formule : dtotk = Max(dtoti+vik), o i est une tche qui prcde k

Deuxime partie : date au plus tard, marge et tches critiques


La date au plus tard d'une tche est la date o une tche peut dmarrer (avec ventuellement un
certain retard qu'on dtermine ici) sans retarder la date de fin des travaux.

13

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

En menant la mthode jusqu' terme dans l'exemple prcdent, on s'aperoit que la date au plus tt
du dbut de la tche Omga aura lieu la semaine 10 : 10 correspond donc la dure totale des
travaux.
Si on veut que l'ensemble des travaux ne prenne aucun retard, il faut que la tche Omga se termine
au plus tard la semaine 10 (qui est la fin suppose des travaux). Ce que l'on reprsente de la faon
suivante :
Omga
10 10
date
au plus tt

date
au plus tard

La tche G durant 1 semaine, elle ne peut pas commencer aprs la semaine 10 (si on souhaite que la
dure totale des travaux soit de 10 semaines). On complte le diagramme de la faon suivante :

Omga

10 10

date
au plus tard

De mme pour F :
F
6 6

Omga

10 10
1

G
9

La tche D dure 2 semaines, elle peut donc commencer en semaine 4 (c'est dire 6 2), sans
remettre en cause la fin de la tche F.
F
2

6 6

Omga
10 10

3 4

G
9

On voit ici que la tche D dispose d'une marge de 1 semaine : la tche D peut commencer avec
une semaine de retard sans remettre en cause la dure globale des travaux. Par contre, la tche F ne
peut prendre aucun retard, on dit qu'elle est critique .

14

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Pour la tche E, la date au plus tard est 5.


F
6 6

10 10

3 4

Omga
1

De la tche B, dpendent les travaux de D et de E.


D
3

3 4

B
?
3

E
5

Pour que la tche D commence au plus tard la semaine 4, il faut que la tche B commence au plus
tard la semaine (4 3) c'est dire la semaine 1.
Pour que la tche E commence au plus tard la semaine 5, il faut que la tche B commence au plus
tard la semaine (5 3) c'est dire la semaine 2.
La premire condition est la plus contraignante : Min [(4 3), (5 3)] = (4 3). Il faut donc que la
tche B commence au plus tard la semaine 1.
D'une faon gnrale, la notation dtardk dsignera la date au plus tard de la tche k. On constate
que :
dtardk = Min(dtardi vki), o i est une tche qui suit k

Bilan : Calcul de la date au plus tard de chacune des tches :

La date au plus tard dOmga est gale sa date au plus tt.

Prendre lun aprs lautre chaque sommet du graphe dans


lordre topologique inverse et calculer sa date au plus tard
selon la formule : dtardk = Min(dtardi vki), o i est une tche qui suit k

Travail raliser
Programmer la mthode MPM sur le graphe de lexemple, ainsi que sur un autre graphe de votre
choix. En sortie, votre programme doit fournir les dates au plus tt, dates au plus tard et marges de
toutes les tches, ainsi que la liste des tches critiques et bien videmment, la date de fin des
travaux.
Vous utiliserez la reprsentation L_ADJ. Notez que le graphe est non valu car la dure des tches
est associe aux sommets et pas aux arcs. Notez galement que vous avez besoin des listes de
successeurs et des listes de prdcesseurs.

15

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

Vous avez libre choix du format du fichier. Notez qu partir de ce fichier (appelons-le mpm.txt),
vous devez :
1. raliser le marquage topologique suivant la mthode du TP prcdent.
2. mettre en uvre la mthode MPM.

Facultatif
Il est beaucoup plus professionnel que les tches fictives Alpha et Omga soient ajoutes
automatiquement dans le graphe. Lutilisateur du programme na en effet pas prendre en charge
les artifices utiliss dans les algorithmes (cf. exemples 2 & 3).
Exemple 1 :
9
1
6
7
2
2
4
5
3
0
0
0
1
2
3
4
5
6
7
0
8
#
#
#
#
#
#
#

11
6
7
8
4
5
6
7
7
1
2
3
6 A
3 B
6 C
2 D
4 E
3 F
1 G
0 Alpha
0 Omga
On a choisi de mettre des commentaires la fin du fichier pour ne pas avoir
les traiter lors de la lecture des donnes.
Format choisi : sur la premire ligne, nombre de sommes, nombres darcs
puis les 11 arcs traduisant les prcdences, fournis dans nimporte quel
ordre : origine, extrmit
enfin les infos associes aux 9 sommets :
numro du sommet dure de la tche, nom de la tche

Exemple 2 :
#
#
9
1
2
3
4
5
6
7
8

nom du fichier : btp.txt


Un chantier de construction d'un btiment
sommets reprsentant les tches
1 pose_portes_et_fentres_extrieur
2 pose_tuiles
3 montage_mur
1 fondation
1 carrelage
3 lectricit
2 charpente
2 plomberie

16

re

ENSICAEN 1

anne Spcialit Informatique

Christine PORQUET

9 2 cloisons_et_pltre
13 arcs traduisant les prcdences
4 3
3 7
3 1
7 2
1 8
1 6
2 8
2 6
6 9
6 5
5 9
8 5
8 9

Exemple 3 :
# nom du fichier : recette.txt
# La recette des ptes la Carbonara
14 sommets reprsentant les tches
1 20 Acheter les ingrdients
2 4 Porter leau bullition
3 2 Couper le jambon en ds
4 2 Eplucher lail
5 4 Faire chauffer la pole
6 2 Emincer lail
7 8 Mettre les ptes cuire
8 1 Faire fondre le beurre
9 1 Egoutter les ptes
10 5 Ajouter le jambon et lail
11 1 Poser un jaune duf sur les ptes
12 2 Ajouter la crme
13 1 Mlanger le tout
14 1 Servir aussitt
16 arcs traduisant les prcdences
1 2
1 3
1 4
1 5
2 7
7 9
9 11
11 13
3 10
4 6
6 10
5 8
8 10
10 12
12 13
13 14

17