Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cahier de TD/TP
dAlgorithmique Avance
Christine Porquet
re
ENSICAEN 1
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
Christine PORQUET
Files dattente
Buts :
Dure :
1 semaine
re
ENSICAEN 1
Christine PORQUET
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
File copie(File);
re
ENSICAEN 1
Christine PORQUET
Dure :
2 semaines
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
Christine PORQUET
Dure :
3,5 semaines
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
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.
re
ENSICAEN 1
Christine PORQUET
Dure :
2,5 semaines
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
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
Christine PORQUET
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
Christine PORQUET
Dure :
2 semaines
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
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
Christine PORQUET
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
contraintes
11
re
ENSICAEN 1
Christine PORQUET
3
E
4
6
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
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
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 :
13
re
ENSICAEN 1
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
Christine PORQUET
10 10
3 4
Omga
1
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
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
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
16
re
ENSICAEN 1
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