Vous êtes sur la page 1sur 5

Universit des Sciences et de la Technologie Houari Boumedine

Facult dElectronique et dInformatique


Dpartement dInformatique
LMD Master 1re Anne RSD 2009/10
Module Algorithmique Avance et Complexit
Corrig de lexamen
Exercice 1 (NP-compltude) :
On considre le problme de dcision 3-COLORIAGE de 3-coloriage dun graphe :
Description : un graphe
Question : Peut-on colorier les sommets du graphe avec trois couleurs (distinctes) de
telle sorte quil ny ait pas de nuds adjacents de mme couleur ? Deux nuds u et v
sont adjacents si et seulement si (u,v) ou (v,u) est arc du graphe
1. Donnez un algorithme polynomial de validation pour le problme 3-COLORIAGE.
Expliquez la polynomialit de lalgorithme.
Rponse :
Lalgorithme de validation est comme suit. Il est crit sous forme dune fonction boolenne
trois entres n, C et couleurs. La paire (n,C) donne le codage de linstance du problme :
Linstance est un graphe G=<V,E> (V={u1,,un} est lensemble des sommets de G, de
cardinal n, et E lensemble de ses arcs)
C est la matrice dadjacence de G, de taille n*n, boolenne
o C[i][j]=1 si et seulement si (ui,uj) est arc de G
Lentre couleurs est un certificat consistant en un tableau de taille n, dont les lments
appartiennent lensemble {Vert,Blanc,Rouge}. Le certificat couleurs associe chacun des
sommets de G une couleur (llment couleurs[i] est la couleur associe au sommet ui).
Lalgorithme retourne VRAI si et seulement si le certificat couleurs valide linstance, cest-dire si et seulement si il nexiste pas de nuds adjacents pour lesquels il associe la mme
couleurs.
Si un entier est reprsent sur p bits, la paire (n,C) peut tre vue comme un mot de {0,1}* de
longueur p*( +1) : les p premiers bits (0 ou 1) coderont le nombre n de sommets de
linstance, les p*n suivants coderont la 1re ligne de la matrice C, , les p*n derniers bits
coderont la toute dernire ligne de la matrice C. Mais on peut faire mieux : voir la paire (n,C)
comme un mot de {0,1}* de longueur p+ : C tant boolenne, on peut coder chacun de ses
lments avec un unique bit, et non avec p bits.

Page 1 sur 5

Boolen validation_3c(n,C,couleurs){
i=0 ;
while(k<n){
j=0;
while(j<n){
if(C[i][j]==1 && couleurs[i]==couleurs[j]) retourner FAUX
//Le certificat couleurs ne peut pas valider linstance://
//les sommets i et j sont adjacents et de mme couleur//
j++ ;
}
i++ ;
}
Retourner VRAI;
// Le certificat couleurs valide linstance : il nexiste pas de nuds//
//adjacents de mme couleur//

}
Lalgorithme parcourt les lments de la matrice C jusqu ventuellement satisfaire la
condition C[i][j]==1 et couleurs[i]==couleurs[j] (deux sommets adjacents auxquels le certificat associe
la mme couleur), auquel cas il retourne FAUX. Si lalgorithme parcourt tous les lments de la matrice
C sans jamais satisfaire une telle condition, il retourne VRAI. Le nombre T(n) doprations effectues
par lalgorithme, dans le pire des cas, sur une instance de taille (nombre de sommets) n est T(n)=
+ *n+ , ,
et
tant des constantes. Clairement, on a T(n)= ( ) ; en dautres termes,
T(n)=O( ) et =O(T(n)). La complexit de la validation est donc bien en ( ).

2. Ecrivez un algorithme donnant, pour toute instance de 3-COLORIAGE, une sortie


boolenne (OUI/NON) gale OUI si et seulement si lalgorithme de validation cidessus valide linstance ; cest--dire si et seulement si il existe un certificat validant
linstance.

Page 2 sur 5

Rponse :
main();{
Lecture de linstance de 3-coloriage (le nombre n de sommets et la matrice C dadjacence)
cond=0 ;
max= ;
//il y a
coloriages (certificats) possibles//
i=0;
while( !cond && i<max){
for(j=0 ;j<n ;j++)couleurs[j]=0 ;
//Mise zro du tableau couleurs//
dividende=i ;
j=n-1 ;
while(dividende !=0){
couleurs[j]=dividende%3 ;
dividende=dividende/3 ;
j-- ;
}
//criture de i dans le systme de numration de base 3 (3 chiffres, 0, 1 et 2)//
//rsultat dans le certificat couleurs : 0 (Vert), 1 (Blanc), 2 (Rouge)//
if(validation_3c(n,C,couleurs))cond=1 ;
//si le certificat valide linstance, on ne parcourt pas les certificats restants //
else i++ ;
//si le certificat courant ne valide pas linstance, on passe au suivant//
}
if(cond)printf(oui);
else printf(non);
}
3. Lexistence dun algorithme polynomial de validation pour un problme de dcision
suffit-elle pour dire que le problme est NP-complet ? Expliquez.
Rponse :
Lexistence dun algorithme polynomial de validation pour un problme de dcision ne permet
pas de dire que le problme est NP-complet. Elle permet de dire que le problme est dans la
classe NP.
Pour montrer que le problme est NP-complet, il faut, en plus de lappartenance la classe NP
(existence dun algorithme polynomial de validation), montrer que tout autre problme NP peut
se ramener ce problme via une rduction polynomiale ; ou, de faon quivalente, quil existe
un problme NP-complet pouvant se ramener ce problme via une rduction polynomiale.

Exercice 2 (Arbres binaires de recherche) :


Donnez un algorithme permettant linsertion dun nouvel lment dans un arbre binaire de
recherche, de telle sorte que larbre rsultant soit un arbre binaire de recherche.

Page 3 sur 5

Rponse :
insrer(r,x){
Si rNIL{
Pre=r ;
Si(x->clr->cl) alors insrer(r->sag,x) sinon insrer(r->sad,x) finsi
}
Sinon
Si(x->clpre->cl) alors Pre->sag=x sinon Pre->sad=x finsi
main(){

Pre=u0 ;
//u0 est un pointeur sur la racine de larbre binaire de recherche//
//x est llment insrer//
//u0 et x sont de mme type : pointeurs sur un enregistrement trois champs (sag, cl, sad) //
//x, aprs son insertion, sera feuille du nouvel arbre binaire de recherche//
x->sag=NIL ;
x->sad=NIL ;
//Une feuille na pas de fils gauche et na pas de fils droit//
insrer(u0,x) ;

}
Exercice 3 (Structures de donnes) : Une file est une structure de donnes mettant en uvre le
principe premier entr premier sorti (FIFO : First In First Out). On considre ici le cas dune file
implmente avec un tableau.
1. Une file doit tre initialise. Expliquez comment.
Rponse :
La file est implmente avec un tableau F. On initialise la taille n de F 100, par exemple ; la
tte tte(F) de F NIL (initialement, la file est vide) ; et la queue queue(F) de F 1 (quand la
file est vide, linsertion dun lment se fera la position 1). De plus, on suppose que les
lments de la file sont indics de 1 100 :
n=100 ;
tte(F)=NIL ;
queue(F)=1 ;
2. Ecrivez les diffrentes fonctions et procdures permettant la gestion dune file.
Rponse :
FILE-VIDE(F){
si tte(F)=NIL
alors retourner VRAI
sinon retourner FAUX
}

Page 4 sur 5

INSERTION(F,x){
si [tte(F)NIL et queue(F)=tte(F)]
alors erreur (dbordement positif)
sinon{
F[queue(F)]=x
queue(F)=[queue(F)+1](modulo n)
si[tte(F)=NIL] alors tte(F)=1
}
}
SUPPRESSION(F){
si FILE-VIDE(F)
alors erreur (dbordement ngatif)
sinon{
temp=F(tte(F));
tte(F)=[tte(F)+1](modulo n);
si[tte(F)=queue(F)]{
tte(F)=NIL ;
queue(F)=1;
}
retourner temp;
}
}

Page 5 sur 5