Université Paris 8 – UFR MITSIC Masters MFPI et BDFD – Automne 2015
COMPLEXITÉ ALGORITHMIQUE (B. Mariou) Contrôle no19 novembre 2015
la carte d’étudiant est obligatoire – aucun appareil électronique n’est autorisé
aucun document n’est autorisé – sont interdits : communication, sacs et vêtements sur la table.
Indiquez vos nom, prénom, numéro sur chaque copie. Durée : 2h30 Barème : 5 2 4 3 6
Questions de cours (réponses assez courtes)
1a) Quel est l’objet de la théorie de la complexité algorithmique ?
b) Qu’est-ce qu’un problème de décision ? Comment le présente-t-on ?
c) Qu’est-ce qu’une résolution par algorithme, pour un problème de décision ?
d) Comment est définie la complexité d’un algorithme, en temps dans le pire des cas ? (Explqiuez ce qu’on
compte, et comment on le compte.)
2Donnez une longueur intuitive pour les types de données suivants :
a) un graphe non orienté,
b) une suite de nombres entiers naturels,
c) un ensemble de clauses du calcul propositionnel,
d) un ensemble de clauses, toutes de degré 2.
3a) Qu’est-ce qu’un algorithme efficace ?
b) Pourquoi un algorithme de complexité exponentielle en temps est-il difficilement utilisable ?
c) Comment s’appelle la classe des problèmes faciles et comment est-elle définie ?
d) Pouvez-vous citer un problème de décision difficile ?
Exercices
4On considère l’algorithme efficace, vu en cours, qui résout le problème 2-COL en colorant les sommets
de proche en proche.
Pour le graphe Gproposé, décrivez le déroulement de l’exécution de cet algorithme (états successifs,
évolution des valeurs des différentes variables, réponse finale). On suppose que lorsqu’il faut choisir un sommet,
le choix se porte sur celui qui a le plus petit numéro.
Le graphe Ga 8 sommets, nommés 0, 1, 2, 3, 4, 5, 6, 7.
Ses arêtes sont : (0,1),(0,3),(0,4),(1,2),(1,5),(2,3),(2,6),(3,7),(4,5),(4,7),(5,6),(6,7).
5Appliquez l’algorithme efficace qui résout 2-SAT en utilsant un graphe orienté, pour décider si les
familles de clauses suivantes sont satisfaisables. (Dans le cas positif, on ne demande pas de citer une affectation
convenable des variables.)
a) {a¯
b, ¯ac, ¯a¯
d, ad, b¯c, ¯
bd, c ¯
d};b) {¯ab, a ¯
d, af, ¯a¯
f, b ¯
d, c¯e, ¯
de, ¯cd, d ¯
f}
Quelques commentaires sur les réponses au contrôle du 9 novembre 15.
1a L’objet de la théorie de la complexité est l’étude de la complexité (des performances)
des algorithmes et de la difficulté des problèmes (il y a une différence importante entre un
problème et les algorithmes qui le résolvent).
– L’amélioration, l’optimisation des algorithmes vient ensuite, ce n’est pas l’objet central de la théorie,
même si c’est ce qui a motivé cette étude. Le travail n’est pas, a priori, de produire des algorithmes mais
d’analyser ceux qu’on connaît.
– On ne parle pas d’efficacité des problèmes, ni de difficulté des algorithmes.
1b Il faut connnaître le cours, il y a une définition précise. Les éléments importants : il y a des paramètres
variables (d’où une multitude d’instances) et la réponse est boolèenne. La présentation (I, I+) est valable
aussi.
1c Une résolution algorithmique est une procédure/méthode/machine qui est générale,i.e.
valable pour toutes les instances, et qui fournit toujours la réponse correcte.
1d Il faut évoquer le temps de calcul pour une instance, et dire que la complexité s’évalue en prenant en
compte toutes les instances d’une taille donnée.
Il faut aussi préciser que le temps de calcul pour une instance est en fait le compte de certaines opérations,
considérées comme élémentaires : on compte les opérations nécessaires pour arriver à la fin du calcul.
2 Rappel - Pour évaluer la complexité d’un algorithme, il faut mesurer la taille des données
qui lui sont soumises. On peut effectuer cette mesure de façon très rigoureuse avec un codage
très précis, mais c’est fastidieux. Un méthode alternative, et qui ne fausse pas les résultats,
consiste à trouver une mesure issue des éléments caractéristiques des objets que sont les
données (ex : pour un graphe d’ordre n, alors n est une bonne estimation de la taille du graphe).
La question à se poser, pour déterminer si notre mesure est une longueur intuitive pour les
données, est : cette mesure me permet-elle de connaître la taille des objets ?
Par exemple, si on a une suite de nentiers, connaître nne suffit pas car on peut avoir des suites avec n
nombres de 3 chiffres chacun et des suites avec nnombres de 6 milliards de chiffres chacun, ce n’est pas
la même quantité de données ! De même, si on a seulement une borne sur la taille des nombres, on peut
avoir des suites de 4 nombres de cette taille, et des suites de 10 millions de nombres de cette taille. Il est
donc nécessaire de connaître à la fois n, le nombre de nombres dans la liste, et un borne sur la taille des
nombres dans la liste.
Inversement, si la suite comporte nnombres, considérer 2ncomme indicateur ne convient pas. C’est bien
un majorant mais il ne donne pas une idée fidèle de la longueur de la suite.
Une réponse sous forme d’une expression numérique (par exemple nlog(n)) sans explication et sans
précision de ce que représentent les variables (ndans l’exemple), n’a aucune valeur.
De façon générale, broder sur le sens courant des mots de la question (ici “longueur” et “intuitive”) alors
qu’on ne sait rien, et en particulier pas les définitions du cours, ne rapporte pas de point. Et cela agace le
correcteur.
2a 2b 2c 2d Les réponses ont été données en cours.
2c Il a été dit en cours qu’une longueur intuitive doit tenir compte de la quantité de clauses et du nombre
de variables qu’elles utilisent. On peut aussi penser à la longueur (degré) maximale des clauses.
Appelons Nle nombre de clauses, nle nombre de variables et mle degré maximal de ces clauses.
– Si on connaît n, on sait que m6ncar on peut éliminer les clauses qui comporte à la fois une variable et sa propre
négation (car ces clauses sont trivialement vraies), et donc chaque clause comporte au plus une occurrence, positive
ou négative, de chaque variable.
– Si on connaît met N, on sait que le nombre global de littéraux, toutes clauses comprises est au plus Nm et donc
il n’y a pas plus de Nm variables utilisées : n6N m.
– En revanche, si on connaît net m, on peut tout de même avoir un Ntrès grand. Dans le cas m=npar exemple,
une clause de degré nen nvariables, et pas trivialement vraie, comporte une occurrence de chacune des variables
mais qui peut-être positive ou négative ; il y a donc 2nclauses (non triviales) en nvariables et de degré n.
En conclusion, une longueur intuitive doit tenir compte de N, le nombre de clauses et d’une des deux informations
parmi n, le nombre de variables, et mle degré maximal des clauses.
2Master MFPI — Complexité algorithmique (Mariou) — Automne 2015
Du reste, Nn et Nm sont polynomialement liés puisque Nm 6Nn 6N.Nm =N2m.
3a La notion d’algorithme efficace est vue plusieurs fois dans le cours. On peut parler de fonction de com-
plexité en temps (déterministe), dans le pire des cas, bornée par un polynôme ou d’exécution
en temps (déterministe) polynomial.
Il ne suffit pas de dire que l’algorithme est rapide et ne consomme pas beaucoup de ressources.
Parler de l’espace mémoire est hors sujet, ce n’est pas le critère.
Il est un peu faux de dire que efficace signifie optimal car on peut avoir des algorithmes différents, efficaces
et qui accomplissent la même tâche ; ils ne seront pas tous considérés comme optimaux.
Il est inutile de parler de problème car la question concerne les algorithmes.
Un algorithme n’est pas qualifié de facile. Un algorithme ne se résout pas, il s’exécute.
Dire que le temps d’exécution est borné par un polynôme est un peu incomplet ou imprécis (temps d’exé-
cution pour quelles données ?).
3b Il ne suffit pas de dire que le temps de calcul augmente (ou tend vers l’infini) quand la taille des données
augmente ; car cela est vrai pour toutes les fonctions de complexité.
Dans le cas exponentiel, la croissance est très rapide, si on augmente un peu la taille des données, le temps
devient très grand, voire démesuré. Et l’algorithme est inexploitable en pratique car le temps d’attente de
la réponse est trop long.
Pour avoir des arguments et des mots précis pour répondre, il valait mieux avoir lu le cours, en particulier
la traduction de l’extrait de Garey & Johnson, à la fin du premier chapitre.
3c La classe s’appelle P, c’est la classe des problèmes résolubles en temps (déterministe) polynomial. Elle
est définie comme la réunion croissante des classes DT IM E(nk)(kIN). Sachant que DT IM E(f(n)) est
la classe des problèmes qui peuvent être résolus par une machine de Turing de complexité O(f(n)).
3d Dans la culture des informaticiens, des problèmes sont peut-être réputés pour être peu aisés à résoudre,
parce qu’on ne connaît que des algorithmes lents. Ce genre de problèmes existe en effet : SAT, 3-SAT,
4-SAT, 3-COL, 4-COL, problème du sac à dos, versions décision du problème du voyageur de commerce,
du problème du plus court chemin dans un graphe.
Mais un problème difficile est un problème pour lequel il n’existe pas d’algorithme efficace. Et pour aucun
des exemples cités, on n’a une preuve qu’il n’y a pas d’algorithme efficace pour le résoudre. Ce sont des
candidats pour être des problèmes difficiles mais on ne l’a pas prouvé.
Par conséquent, aucun problème de décision n’est connu pour être difficile
Attention aux hypothèses :
– un problème qui n’est pas résoluble par algorithme est appelé indécidable mais pas difficile,
– 2-SAT, 2-COL sont des problèmes de décision faciles,
– on connaît des problèmes pour lesquels on est sûr qu’il n’y aura jamais d’algorithme efficace, mais ce ne
sont pas des problèmes de décision, par exemple : étant donné un entier net nvariables propositionnelles,
donner la liste de toutes les clauses (non triviales) qui s’écrivent avec ces nvariables (il y en a 2n,cf 2c
ci-dessus).
4Représentation graphique du graphe.
Elle n’était pas demandée, ce n’est qu’une aide pour visualiser la
situation, mais on peut exécuter l’algorithme sans ce dessin, simple-
ment en se reportant à la liste des arêtes. Mais si le graphe est dessiné,
alors il vaut mieux éviter de placer les sommets sur une même ligne
de sorte que les arêtes sont moins bien lisibles. Et il est important de
dessiner des arêtes et pas des arcs car le graphe n’est pas orienté.
Exemple
0 ———————— 1
| |
| 3 — 2 |
| | | |
| 7 — 6 |
| |
4 ———————— 5
Vocabulaire.
Le problème 2-COL pose une question générale, sur chacun des graphes non orientés imaginables.
Pour certains la réponse est positive (instances positives), pour les autres la réponse est négative.
L’algorithme vu en cours, qui résout efficacement ce problème est une procédure générale, applicable à
tous les graphes non orientés.
L’exercice vous demande d’appliquer l’algorithme dans le cas d’une instance particulière, i.e. pour un
exemple particulier. Quelle que soit la réponse obtenue pour cette instance particulière, l’algorithme aura
Master MFPI — Complexité algorithmique (Mariou) — Automne 2015 3
rempli son rôle.
Mais on ne doit pas dire que l’on a “résolu le problème pour ce graphe”. Cela n’a pas de sens car une
résolution est une méthode générale qui s’applique à toutes les instances et trouver la réponse associée à
une instance particulière, ce n’est pas résoudre le problème.
Déroulement de l’algorithme pour le graphe proposé.
Le principe est de se donner un sommet au départ (on choisit grâce au numéro : le sommet 0), puis de
colorier de proche en proche.
Cela signifie qu’on colorie les voisins du sommet examiné (de la couleur opposé) et qu’on tient à jour une
liste des sommets coloriés mais pas encore examinés. Lorsqu’on examine un nouveau sommet, c’est parce
qu’il est sur notre liste, et on commence par vérifier qu’il n’a pas été colorié des deux couleurs.
examiné couleur(s) voisins liste L liste M bleus rouges
attribuée(s) (à examiner) (examinés)
initialisation – 0 0
0 bleu 1, 3, 4 1, 3, 4 0 1, 3, 4
1 rouge 0, 2, 5 3, 4, 2, 5 0, 1 2, 5
3 rouge 0, 2, 7 4, 2, 5, 7 0, 1, 3 7
4 rouge 0, 5, 7 2, 5, 7 0, 1, 3, 4
2 bleu 1, 3, 6 5, 7, 6 0, 1, 3, 4, 2 6
5 bleu 1, 4, 6 7,6 0, 1, 3, 4, 2, 5
7 bleu 3, 4, 6 6 0, 1, 3, 4, 2, 5, 7
6 2, 5, 7 0, 1, 3, 4, 2, 5, 7, 6
Attention, l’ordre donné par les numéros est à considérer lorsqu’on liste les voisins du sommet examinés
(par ex. les voisins de 0 sont 1, 3 et 4, dans cet ordre). Mais pour savoir dans quel ordre on examine
les sommets, il faut s’en tenir à la liste fabriqué au fur et à mesure. Car si on établit à l’avance l’ordre
d’examen des sommets, cela signifie qu’on ne tient pas compte de la coloration progressive (de proche en
proche) des sommets. En procédant de cette façon, on peut être conduit à des impossibilités abusives : si
on avait colorier de proche en proche, on aurait pu finir la coloration.
Exemple. Graphe 0 — 2 — 3 — 1. Si on examine dans l’ordre des numéros, on pourra attribuer la même couleur aux
sommets 0 et 1, ce qui conduira à une impasse. Tandis que de proche en proche, on colorie 0 d’une couleur, 2 de l’autre,
puis on examine 2 (et pas 1) et donc on colorie 3 de la seule couleur possible, puis on examine 3, et on colorie 1 de la seule
couleur possible, puis on examine 1.
5L’algorithme, vu en cours, qui résout efficacement le problème 2-SAT, associe à la famille de clauses
considérée un graphe orienté, construit selon des règles précises.
Il faut rappeler quels sont ses sommets et ses arcs, en expliquant comment on les obtient.
Une fois ce graphe fabriqué, on calcule ses composantes fortement connexes selon une méthode qu’il faut
un peu décrire. Cela donne :
5a Quatre variables propositionnelles a,b,c,ddonc huit sommets pour le graphe associé : a,¯a,b,¯
b,c,¯c,
d,¯
d. Et chaque clause du type αβfournit deux arcs ¯αβet ¯
βα. On a donc ici 14 arcs :
clause arcs clause arcs
a∨ ¬b¯a¯
b b a b ∨ ¬c¯
b¯c c b
¬ac a c¯c¯a¬bd b d¯
d¯
b
¬a∨ ¬d a ¯
d d ¯a c ∨ ¬d¯c¯
d d c
ad¯ad¯
da
liste (alphabétique) des arcs
de avers c,¯
dde ¯avers ¯
b,d
de bvers a,dde ¯
bvers ¯c
de cvers bde ¯cvers ¯a,¯
d
de dvers ¯a,cde ¯
dvers a,¯
b
Attention, par construction du graphe, on n’a jamais d’arc direct de uvers ¯uou l’inverse, mais il peut
exister un chemin orienté.
Calcul des composantes fortement connexes.
Pour le sommet a. On calcule, grâce aux arcs D(a), l’ensemble des sommets qu’on peut atteindre en partant
de a(i.e. les sommets utq il existe un chemin orienté de avers u) et l’ensemble des sommets d’où on peut
partir pour arriver à a(i.e. les sommets utq il existe un chemin orienté de uvers a).
4Master MFPI — Complexité algorithmique (Mariou) — Automne 2015
D(a):ac, ¯
db, ¯
b¯c, d ¯aA(a):ab, ¯
dc, ¯c¯
b, d ¯a.
L’intersection de ces deux ensembles est l’ensemble des sommets upour lesquels on a un chemin orienté de
avers uet un chemin orienté de uvers a. C’est donc la composante fortement connexe de a, notée cf c(a).
Ici, cfc(a)contient tous les sommets i.e. , c’est le graphe tout entier. (Autrement dit, le grapge est fortement
connexe : de n’importe quel sommet on peut se rendre à n’importe quel autre suivant un chemin orienté.)
En particulier, cfc(a)contient aet ¯a, ce qui est suffisant pour conclure, selon l’algorithme, que la famille
de clauses étudiées n’est pas satisfaisable.
Attention, comme vous avez pu représenter le graphe et l’analyser, vous avez pu constater qu’il y a un
circuit passant par aet ¯a(a¯
d¯
b¯c¯adcba). Mais cette observation ne remplace pas l’exécution de l’algorithme,
qui est demandé par l’énoncé, et qui est une procédure automatique et sans astuce, sans observation du
dessin.
5b Sommets : a,¯a,b,¯
b,c,¯c,d,¯
d,e,¯e,f,¯
f. Neuf clauses donc dix-huit arcs. Liste alphabétique :
de avers b,¯
fde ¯avers ¯
d,fde cvers dde ¯cvers ¯ede evers cde ¯evers ¯
d
de bvers de ¯
bvers ¯a,¯
dde dvers a,b,ede ¯
dvers ¯c,¯
fde fvers ¯a,dde ¯
fvers a
Composantes fortement connexes.
D(a):ab, ¯
fA(a):ad, ¯
fc, ¯
d, f ¯a, ¯
b, e, ¯e¯cd’où cf c(a) = {a, ¯
f}
Les propriétés de dualité, dues à la construction de notre graphe, entraînent que cfca) = {¯a, f}.
Par ailleurs, les composantes fortement connexes sont des classes d’équivalence et donc :
- ne sont jamais vides (on a toujours ucfc(u)),
- si vcfc(u)alors cfc(u) = cfc(v),
- si v /cfc(u)alors cfc(u)cfc(v) = .
On a donc, avec ce premier calcul de la composante fortement connexe de a, obtenu aussi celle de ¯
fmais
aussi celle de ¯aet celle de f.
Ce serait une erreur de raisonnement que de conclure maintenant que la famille de clauses est satisfaisable.
Car si aet ¯ane sont pas dans une même composante fortement connexe, cela n’indique rien pour bet ¯
b,
ni pour cet ¯c, . . .Il est donc indispensable de continuer à calculer les composantes fortement connexes.
D(b):bIl est inutile de calculer de A(b)car, d’après D(b), seul best dans sa composante fortement
connexe. Ainsi cfc(b) = {b}, et par conséquent cfc(¯
b) = {¯
b}.
D(c):cda, b, e ¯
fA(c):cedf¯a¯
bdonc
cfc(c) = {c, d, e}, et donc cfcc) = {¯c, ¯
d, ¯e}.
On a ainsi calculé toutes les composantes fortement connexes du graphe, puisque tous les sommets appa-
raissent dans celles qu’on a déjà calculées (autre argument : grâce à la dualité, il suffit de calculer les cfc
de a,b,c,d,e,fet on avait celle de aau premier calcul, d’où on déduisait celle de f, puis on a obtenu
celle de bgrâce au deuxième calcul, et enfin celle de c,det elors du troisième calcul.
Et dans aucun des cas, on n’a une variable et sa négation dans la même composante fortement connexe ;
donc, d’après l’algorithme, la famille de clauses de départ est satisafaisable.
Pour trouver une affectation des variables qui satisfait les clauses (ce qui n’était pas demandé), on regarde
les arcs entre les composantes fortement connexes. Posons A=cfc(a) = {a, ¯
f},¯
A=cfca),B=cfc(b) =
{b},¯
B=cfc(¯
b)et C=cfc(c) = {c, d, e}et ¯
C=cfcc). Les arcs entre les cfc sont les suivants :
ABarc (a, b)¯
ACarc (f, d)¯
B¯
Carc (¯
b, ¯
d)CBarc (d, b)
¯
A¯
Carc a, ¯
d)¯
B¯
Aarc (¯
b, ¯a)CAarc (d, a)¯
CAarc (¯
d, ¯
f)
La cfc ¯
Bne reçoit aucune flèche et on peut lui affecter la valeur 0, i.e. affecter la valeur 1 à la cfc B. Toutes
les flèches commençant par ¯
Bou finissant par Bseront satisfaites et on peut les oublier. Il nous reste :
¯
ACarc (f, d)¯
A¯
Carc a, ¯
d)CAarc (d, a)¯
CAarc (¯
d, ¯
f)
La cfc ¯
Ane reçoit pas de flèches. On lui affecte la valeur 0 i.e. 1 pour la cfc A. Toutes les flèches commencent
par ¯
Aou finissent par A, elles seront donc toutes satisfaites.
Cela signifie que les valeurs affectées aux cfc Cet ¯
Csont sans conséquence.
On doit donc avoir, pour satisfaire les clauses : v(a) = 1,v(f) = 0 car v(A) = 1
v(b) = 1 car v(B) = 1
et v(c) = v(d) = v(e), toutes 0, ou toutes 1.
Deux affectations conviennent donc (a, b, c, d, e, f) = (1,1,1,1,1,0) ou (1,1,0,0,0,0).
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !