Professional Documents
Culture Documents
Conception D Algorithmes PDF
Conception D Algorithmes PDF
Le 15 fvrier 2016
un moment o celles et ceux qui, depuis longtemps, militent pour que linformatique
soit enseigne au mme titre que dautres disciplines scientifiques se voient rejointes par
un nombre croissant de scientifiques de sciences humaines, de personnalits politiques, de
journalistes, il devient utile de rediscuter la faon daborder lenseignement de la discipline
informatique.
Cet enseignement doit permettre lappropriation de sa culture, et partir des bons
points dentre, lexploration des mandres de sa complexit depuis les sujets les plus
classiques jusquaux applications les plus innovantes.
En effet, si lon assiste une convergence assez gnrale vers lide quil faut que lenfant,
ladolescente et ladolescent daujourdhui, citoyenne et citoyen de demain, ait acquis les
comptences et les connaissances suffisantes pour ne pas subir le monde numrique, la faon
de le former fait beaucoup moins lunanimit.
Parmi les ides reues rpandues, celle que la gnration Y, celle des enfants du nu-
mrique, na pas grand-chose apprendre, a fait long feu. Elle tait sans doute lie au
regard attendri de personnes admiratives devant un bambin qui se saisit dune tablette,
ou dun adolescent capable dutiliser ses deux pouces pour taper un message sur son tl-
phone portable. Maintenant, ladulte doit comprendre que de pareilles performances sont
purement motrices et ne doivent pas faire croire que la nouvelle gnration est nativement
dote de capacits dont la sienne est dpourvue.
Une deuxime ide reue tient au lieu commun a-t-on besoin de savoir comment
fonctionne un moteur pour pouvoir conduire une voiture ? . Elle se justifiait par un
modle ancien, dpass, celui o il y avait dun ct les informaticiens, de lautre le reste
de lhumanit, et dans lequel un tre humain navait qu faire appel un informaticien
quand il avait besoin de rsoudre un problme informatique. Aujourdhui, sans doute parce
que dans la rsolution de tout problme - ou presque - il y a une part dinformatique, les
limites de cette sparation binaire de lhumanit volent en clats.
Une troisime ide reue consiste penser quune simple ducation aux usages est
suffisante pour la grande majorit des jeunes, quelques-uns pouvant cependant tre for-
ms linformatique parce quils deviendront informaticiennes ou informaticiens. On peut
cependant penser quavec la quantit croissante dusages, leur enseignement direct nest
plus rentable : sil pouvait tre plus raisonnable il y a quelques annes denseigner lusage
dune suite bureautique que denseigner linformatique, il faut aujourdhui, si lon en reste
aux usages qui savrent indispensables y inclure galement le travail coopratif avec les
outils du cloud, les questions de scurit, dintgrit des donnes, de rseau, linterrogation
de bases de donnes, lorganisation de ses archives, les bonnes pratiques sur lInternet. . .
IV CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Cest tout simplement devenu plus compliqu denseigner les usages que denseigner lin-
formatique !
Vers 2014, avec larrive de la notion de culture-code, on voit un accs universel la
socit numrique : il suffirait de sinitier la programmation. On en vante les aspects
ludiques, le levier en termes de crativit et on lui donne aussi comme vertu de pouvoir
pallier des manques ducatifs.
Or, la raison pour laquelle de nombreux informaticiens ont volontiers accompagn la
fivre du code nest pas quil importait de savoir construire des pages web ou des applica-
tions pour tlphones portables ! Le code nest pas une fin en soi mais une cl au monde
numrique. La cl ouvre la route un changement de paradigme. Ce nest pas un outil
supplmentaire quon nous offre, cest une autre faon daborder les choses.
Avant dattaquer ce point, et dexpliquer - enfin - en quoi ce livre est trs utile, introdui-
sons cette question de changement de paradigme avec un exemple emprunt Seymour
Papert. Il sagit de rsoudre la multiplication suivante :
XLIV ? XVII
5 Essais successifs 49
5.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6 PSEP 79
6.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7 Algorithmes gloutons 87
7.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Notations 243
Bibliographie 249
Index 253
Prsentation
Ce quest cet ouvrage,
Le sujet de cet ouvrage est lalgorithmique et son but est de lenseigner. Selon nous,
cette discipline peut se dfinir comme lart et la science dcrire un algorithme pour
rsoudre un problme donn, de prfrence en un temps minimal . Cet ouvrage vise par
consquent enseigner des mthodologies de conception dalgorithmes efficaces. Il cherche
le faire essentiellement par lexemple.
Il est construit selon une double rgle.
Les chapitres couvrent un ensemble de mthodes qui sappliquent des structures
de donnes diverses. Par consquent, un chapitre correspond une mthodologie de
construction dalgorithme, non pas une structure de donnes. Par exemple, le cha-
pitre programmation dynamique comporte des problmes rsolus dans les tableaux,
dautres dans les arbres, les graphes, les squences, etc.
Un chapitre est le plus souvent constitu dune prsentation informelle par un exemple,
puis de la technique permettant dcrire un algorithme selon cette mthode. Ensuite,
au moins un problme complet est trait en dtail. La suite du chapitre est constitue
de problmes, noncs et corrigs. Les problmes un peu complexes sont abords de
faon progressive afin de mettre en vidence laspect constructif de la solution propo-
se. Les corrigs sont dtaills afin de rendre le plus explicite possible les points cls
du raisonnement suivi.
souvent, les problmes proposs dans certaines notes de cours ou certains ouvrages sont
rsolus sans que la preuve de la solution soit apparente. Cela donne parfois limpression
que cette solution sort du chapeau du magicien (cest--dire de lastuce du professeur) et
encourage lide exagre quune bonne intuition peut remplacer une dmonstration. Nous
pensons que la dduction et linduction sont deux modes de raisonnement ncessaires dans
la construction dun algorithme.
Plan
Comme nous lavons dit, cet ouvrage a t organis pour prsenter successivement diff-
rentes mthodologies de construction dalgorithmes. Cependant, il commence par un cha-
pitre intitul Mathmatiques et informatique : notions utiles , dans lequel sont rappeles
un certain nombre de bases mathmatiques (essentiellement les principes de dmonstra-
tion, en particulier par rcurrence) et de structures de donnes (ensembles, graphes, arbres,
files) et o une vingtaine dexercices sont proposs. Le chapitre 2 Complexit dun al-
gorithme , dans la mme intention de consolider les connaissances de base, rappelle les
notions essentielles de ce domaine et donne quelques exercices.
Dans le chapitre 3, Spcification, invariants, itration sont exposs les principes
de la construction rationnelle de boucle, accompagns dune quinzaine dexercices dont
quelques-uns sont assez difficiles. Le chapitre suivant, intitul Diminuer pour rsoudre,
rcursivit traite de la construction dalgorithmes rcursifs, illustre par une petite di-
zaine dexercices. Il montre en particulier comment les mthodes de dmonstration par
rcurrence sappliquent pour certifier lexactitude de procdures rcursives rsolvant un
problme de taille donne n, en faisant appel la rsolution de problmes identiques de
taille (n 1).
On aborde dans le chapitre 5 la mthodologie des Essais successifs . Les techniques
dnumration rcursives des solutions un problme combinatoire sont dcrites et des
patrons de programmes sont donns. Les principes dlagage de larbre des solutions
sont dcrits, qui sont illustrs par une vingtaine dexercices. Le chapitre suivant reste dans
PRSENTATION XI
le mme sujet, mais traite les mthodes PSEP (Sparation et valuation progressive, ou
branch and bound) qui sont, elles, itratives. Quatre exercices sont donns pour concrtiser
cette mthode.
Le chapitre 7 est consacr aux Algorithmes gloutons , qui cherchent rsoudre des
problmes analogues ceux des chapitres prcdents, en neffectuant aucun retour en
arrire ; il est important de faire la preuve quils rsolvent le problme pos. On y prsente
donc les faons usuelles pour dmontrer quun tel algorithme est exact. Une quinzaine
dexercices sont proposs pour illustrer cette technique.
Dans le chapitre 8, on sintresse une approche particulirement fconde de conception
dalgorithmes : Diviser pour Rgner . Une classification des algorithmes de ce type est
propose et leur construction est illustre par une trentaine dexercices, dont certains sont
difficiles.
Enfin, le chapitre 9 dcrit la mthodologie de Programmation dynamique qui est
galement trs fconde pour construire une solution optimale un problme combinatoire.
La richesse de cette technique est telle que nous proposons plus dune trentaine dexercices,
donnant lieu une grande varit de constructions algorithmiques dont plusieurs ont un
intrt pratique avr. L aussi, certains problmes proposs sont difficiles.
Nous avons essay de choisir des exercices couvrant autant que possible la varit de
chaque domaine abord. Nous avons aussi cherch ne pas proposer deux problmes trop
proches, tout en illustrant sur quelques problmes lapplicabilit de plusieurs mthodolo-
gies. Au total, cet ouvrage traite prs de cent cinquante exercices : pour chacun lnonc a
t rdig avec autant de prcision que possible et les questions sont organises pour aider
le lecteur construire la solution. Le corrig, quant lui se veut mthodique, rigoureux
et complet.
Conventions de lecture
On trouvera dans la section Notations page 243 les conventions que nous utilisons
pour les formules mathmatiques et surtout pour les algorithmes. Il sera videmment
indispensable au lecteur de sy rfrer en cas de doute sur la signification de tel ou tel
symbole.
Chaque exercice est doublement cot, pour son intrt intrinsque et pour sa difficult.
Il y a quatre niveaux croissants dintrt nots
et quatre niveaux
croissants de difficult nots
. La notion dintrt dun problme est
assez subjective. Nous avons opt pour un croisement de divers critres, dont le principal
est la qualit avec laquelle ce problme illustre la mthodologie laquelle il appartient.
Pour la difficult, la cotation tient naturellement compte de la faon dont lenonc a t
rdig : un problme intrinsquement difficile peut tre adouci par une srie de questions
prparatoires gradues.
Tout au long de lnonc et du corrig de chaque exercice, une note marginale rappelle
les numros de lexercice et de la question en cours. La note ci-contre indique par exemple 42 - Q 3
que lon commence la question 3 de lexercice 42. Sa rponse est signale par la mme
note, avec R la place de Q.
XII CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Ce livre a t compos en LATEX par les auteurs avec les logiciels libres TeXstudio, Texmaker, TeX-
nicCenter, TeXShop et MiKTeX. Les figures ont t faites avec PGF/TikZ. Le code comporte environ
2.400.000 signes.
CHAPITRE 1
Mathmatiques et informatique :
quelques notions utiles
Who can does ; who cannot do,
teaches ; who cannot teach,
teaches teachers.
(Paul Erdos)
1.1 Exercices
1.1.1 Dmonstrations
Exercice 1. lment neutre unique
x (x S u x = x).
Question 2. Dmontrer par labsurde cette proprit en relchant la proprit de com- 1-Q2
mutativit de loprateur .
Soit E un ensemble fini muni dune relation dordre partiel note et F un sous-ensemble
strict non vide de E. On appelle antcdent strict de x un lment y diffrent de x tel que
y x. Un lment m de F est dit minimum si m ne possde aucun antcdent strict
dans F.
2-Q1 Question 1. Montrer par labsurde que F possde au moins un lment minimum.
2-Q2 Question 2. Montrer par rcurrence que F possde au moins un lment minimum.
2-Q3 Question 3. On considre lensemble E constitu des couples dentiers naturels et la re-
lation dordre partiel dfinie par :
(a, b) (c, d) =
b a 6 c et b 6 d.
n (n N1 n! > 2n1 ).
si une mthode est plus commode que lautre, lobservation faite nayant pas
vertu tre gnralise.
Question 2. Dmontrer laide de ce schma que toute somme n de six centimes ou plus 4-Q2
peut tre obtenue avec des pices de deux et de sept centimes.
Question 4. Quel est le nombre maximum de pices de sept centimes utilises en sap- 4-Q4
puyant sur chacun de ces schmas ?
Question 5. Selon vous, laquelle de ces deux preuves est-elle la plus simple tablir ? 4-Q5
Dans cet exercice, on dmontre par rcurrence simple que la forme close de la
relation de rcurrence propose pour les nombres de Catalan est correcte. On
tablit galement une majoration de la valeur du ne nombre de Catalan.
On sest intress aux nombres de Catalan dfinis notamment par la relation de rcur-
rence (voir page ??) :
Cat(1) = 1
4n 6
Cat(n) = Cat(n 1) n > 1.
n
Question 1. Montrer par rcurrence simple que cette relation de rcurrence admet comme 5-Q1
forme close pour tout entier n positif (voir page ??) :
(2n 2)!
Cat(n) = .
(n 1)! n!
4 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
5-Q2 Question 2. Montrer par rcurrence simple que pour tout entier n positif, on a :
4n1
Cat(n) 6 .
n
Cet exercice vise attirer lattention sur le respect des hypothses pour effectuer
une dmonstration par rcurrence correcte. Deux exemples sont successivement
proposs, dans lesquels la proposition P dmontrer est lvidence fausse. Le
raisonnement avanc conduisant la dmontrer, il est intressant de mettre en
vidence lerreur commise.
Premier cas
On envisage de dmontrer par rcurrence la proprit P1 suivante :
La rcurrence se fait sur le maximum des deux nombres a et b, not max(a, b).
Base Si max(a, b) = 0, alors il est clair que a = b = 0.
Rcurrence Supposons la proprit P1 vraie quand le maximum de a et b est p. Lhypothse
de rcurrence est donc :
si max(a, b) = p alors a = b = p.
On doit montrer qualors P1 est vraie quand le maximum de a et b est (p + 1).
Soit (a, b) un couple tel que max(a, b) = p + 1. Le maximum de (a 1) et de
(b 1) est donc p. Par hypothse de rcurrence, on a : a 1 = b 1 = p, do :
a 1 + 1 = b 1 + 1 = p + 1, soit finalement a = b = p + 1.
Conclusion La proprit P1 est vraie pour tout couple dentiers naturels.
Second cas
On se propose de dmontrer par rcurrence la proprit P2 suivante :
n points quelconques du plan sont toujours aligns.
La rcurrence se fait sur le nombre n de points.
Base Pour n = 2, la proposition P2 est vraie, puisque deux points sont toujours aligns.
Rcurrence Supposons la proprit P2 vraie pour p points (hypothse de rcurrence). Mon-
trons qualors les (p + 1) points nomms A1 , A2 , A3 , . . . , Ap+1 sont aligns. Daprs
lhypothse de rcurrence, les p premiers points A1 , A2 , A3 , . . . , Ap sont aligns sur
une droite (d1 ) et les p derniers points A2 , A3 , . . . , Ap+1 sont aligns sur une droite
(d2 ). Les deux droites (d1 ) et (d2 ) ont en commun les deux points A2 et A3 et sont
CHAPITRE 1. MATHMATIQUES ET INFORMATIQUE : NOTIONS UTILES 5
Dans la ligne du prcdent, cet exercice vise mettre en vidence une erreur
dans un raisonnement par rcurrence. Cependant, ici, la formule dmontrer
est juste et on en demande une dmonstration directe convenable.
On se propose de dmontrer par rcurrence simple que, pour n entier suprieur ou gal
1, on a : s r q p
n = 1 + (n 1) 1 + n 1 + (n + 1) 1 + (n + 2) . . .
Pour commencer, on admettra que cette expression a un sens, cest--dire quelle converge
quand n augmente indfiniment (ce qui est vrai, comme on le constatera ultrieurement).
La dmonstration par rcurrence forte se fait alors ainsi :
Base Pour n = 1, la partie droite de la formule devient :
q p
1 + 0 1 + 1(. . .) = 1
Rcurrence On a :
s r q p
(n 1) = 1 + (n 2) 1 + (n 1) 1 + n 1 + (n + 1) . . .
r lvation au carr
q p
(n 1)2 = 1 + (n 2) 1 + (n 1) 1 + n 1 + (n + 1) . . .
r identit remarquable
q p
n2 2n + 1 = 1 + (n 2) 1 + (n 1) 1 + n 1 + (n + 1) . . .
r arithmtique
q p
n(n 2) = (n 2) 1 + (n 1) 1 + n 1 + (n + 1) . . .
division des deux membres par n 2
6 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
r
n(n 2)
q p
= 1 + (n 1) 1 + n 1 + (n + 1) . . .
n2
r arithmtique
q p
n= 1 + (n 1) 1 + n 1 + (n + 1) . . . .
Exercice 9. De 7 77 et plus si . . .
Cet exercice est consacr la dmonstration par rcurrence dune proprit des
lments dune suite dentiers donne demble sous sa forme close.
9-Q1 Question 1. Montrer par rcurrence simple que si A(n, p) est (resp. nest pas) divisible
par 7, alors A(n + 1, p) lest aussi (resp. ne lest pas non plus).
CHAPITRE 1. MATHMATIQUES ET INFORMATIQUE : NOTIONS UTILES 7
Question 2. Que dire de la divisibilit par 7 des nombres des suites A(n, 0), A(n, 1), 9-Q2
A(n, 2) et A(n, 3) ?
A(1) = 1
n2 3n + 1
A(n) = A(n 1) + n > 2.
(n 1)2 n2
Question 1. Montrer par rcurrence simple que la forme close des nombres A(n) est 10 - Q 1
(n2 n + 1)/n2 pour tout n > 1. Quen dduire quant la nature de ces nombres ?
Question 2. Montrer que pour tout n > 2, A(n) est dans lintervalle ouvert A(2) .. A(1). 10 - Q 2
Dans cet exercice, on cherche construire toute suite infinie de nombres binaires
qui est gale celle obtenue en ne prenant quun terme sur trois, mais aussi
celle obtenue en ne gardant que les deux termes sur trois restants. On carte les
deux suites triviales composes exclusivement de 0 ou de 1.
Soit une suite binaire S = hs1 , s2 , . . . , sn , . . .i autre que celle (triviale) compose unique-
ment de 0 (resp. 1). On note S/3 la suite construite en prenant un lment sur trois dans
S de la faon suivante : S/3 = hs3 , s6 , . . . , s3n , . . .i. On note S S/3 la suite qui reste de S
quand on a enlev S/3, ce qui donne : S S/3 = hs1 , s2 , s4 , s5 , s7 , s8 , . . ., s3n2 , s3n1 ,
s3n+1 , s3n+2 , . . .i. Par exemple, pour S = h0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, . . .i, on a :
Cet exercice met en lumire le fait que mme si lon connait la forme close dune
rcurrence, celle-ci peut ne pas tre transposable dans un algorithme.
On rappelle que la suite de Fibonacci est dfinie (voir page ??) par la rcurrence :
F(1) = 1
F(2) = 1
F(n) = F(n 1) + F(n 2) n>2
Remarque Dans lexercice 103, page 135, plusieurs autres faons deffectuer ce calcul sont
examines.
Cet exercice complte lexemple donn page ??. Son objectif est de construire une
variante de lalgorithme de calcul du nombre darbres binaires ayant n nuds
fonde sur une forme close, donc a priori plus efficace.
On a tabli que le nombre darbres binaires possdant n nuds est donn par la rcur-
rence :
nbab(0) = 1
X
n1
nbab(n) = nbab(i) nbab(n i 1) n > 1.
i=0
Lintrt de cet exercice est double. Dune part, on y tudie une faon pratique de
calculer la valeur des lments dune rcurrence deux indices. Dautre part, on
en tablit une forme close qui, pour tre prouve, requiert de valider un nouveau
schma de dmonstration par rcurrence deux indices.
a(0, j) = j + 1 j>0
a(i, 0) = 2 a(i 1, 0) + a(i 1, 1) i>0
a(i, j) = a(i 1, j 1) + 2 a(i 1, j) + a(i 1, j + 1) i > 0 et j > 0.
Question 1. Calculer a(3, 2). Proposer une structure tabulaire et dcrire la progression 14 - Q 1
pour calculer plus gnralement la valeur de llment a(i, j) (i, j > 0).
Question 2. crire le programme itratif de calcul de a(n, m) pour n et m entiers donns. 14 - Q 2
Question 3. Proposer une forme close pour a(i, j) et la dmontrer par rcurrence. Quel 14 - Q 3
intrt cette expression prsente-t-elle dun point de vue algorithmique ?
1.1.2 Dnombrements
Exercice 15. Dplacements dun cavalier sous contrainte
On considre les diffrents parcours dun cavalier voluant sous contrainte entre
deux coins extrmes dune grille et on les dnombre grce une rcurrence.
On sintresse aux parcours dun cavalier sur une grille ayant n > 4 lignes et m > 3
colonnes. On veut connatre le nombre de faons diffrentes dont il dispose pour se rendre
de la case (1, 1) la case darrive (n, m). On adopte la convention de reprsentation
cartsienne (la case (i, j) a pour abscisse i et pour ordonne j) et on impose que le cavalier ne
puisse se dplacer quen augmentant labscisse (le premier indice), comme sur la figure 1.1.
Question 1. Soit nparc(i, j) le nombre de parcours diffrents partant de la case (1, 1) et 15 - Q 1
menant la case (i, j). tablir la relation de rcurrence complte du calcul de nparc(i, j).
10 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
7
ZnZ0Z0Z0Z
6
0Z0M0Z0Z0
5
Z0M0Z0M0Z
4
0Z0Z0Z0M0
3
Z0Z0ZnZ0Z
2
0Z0Z0Z0M0
1
Z0Z0Z0M0Z
1 2 3 4 5 6 7 8 9
Fig. 1.1 Le cavalier situ en (2, 7) (resp. (6, 3)), trac en noir, peut aller en deux
(resp. quatre) positions, traces en blanc.
Lobjectif essentiel de cet exercice est dtablir la rcurrence des nombres de Stir-
ling.
On note S(p, n) le nombre de partitions p blocs dun ensemble n lments. Les valeurs
S(p, n) sont appeles nombres de Stirling. Par exemple, {{a, c}, {b, d}} et {{b}, {a, c, d}} sont
deux des sept partitions deux blocs de lensemble quatre lments {a, b, c, d}.
16 - Q 1 Question 1. Donner toutes les partitions un, deux, trois et quatre blocs de cet ensemble
quatre lments (un bloc ne peut pas tre vide).
16 - Q 3 Question 3. Proposer une progression du calcul de S(p, n), puis lalgorithme itratif cor-
respondant.
Cet exercice vise dune part tablir une rcurrence, dautre part en effectuer
le calcul algorithmique en vitant lvaluation de certaines cellules.
On considre un escalier de m marches que lon veut gravir avec des sauts de a1 ou a2
ou . . . ou an marches. Le problme est de trouver le nombre nbf(s, m) de faons diffrentes
de gravir exactement les m marches en s sauts.
Par exemple, si m = 12 marches et si les sauts possibles sont a1 = 2, a2 = 3 et a3 = 5
marches, on peut gravir exactement les 12 marches de lescalier par (entre autres) les suites
de sauts :
(2, 2, 2, 2, 2, 2), (2, 3, 2, 3, 2), (2, 2, 2, 3, 3),
(3, 3, 3, 3), (2, 2, 3, 5), (3, 2, 5, 2), (2, 2, 5, 3).
Question 5. On remarque dans lexemple prcdent que certaines zones du tableau asso- 17 - Q 5
ci nbf valent 0. Expliquer pourquoi et proposer une amlioration de lalgorithme.
Cet exercice introduit le jeu patagon, auquel on joue seul pour amasser un mon-
tant maximal. On cherche dnombrer les faons de jouer dites raisonnables,
qui respectent la rgle du jeu et sont susceptibles de conduire au gain maximal.
Lexercice 144, page 237, sintresse dterminer la (une) faon de jouer per-
mettant datteindre le gain maximal.
Dans le jeu patagon, le joueur est devant n objets, disposs en ligne. Chaque objet
a une certaine valeur qui est visible. Le joueur peut prendre autant dobjets quil veut
en cherchant naturellement amasser une valeur totale aussi grande que possible. Il y a
cependant une contrainte (et une seule) : le joueur na pas le droit de prendre deux objets
placs lun ct de lautre dans la configuration initiale.
Question 1. Avec la ligne dobjets suivante, o un objet est reprsent par sa valeur, quel 18 - Q 1
sera le meilleur choix ?
23 41 40 21 42 24
12 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
18 - Q 3 Question 3. Certaines faons de jouer sont coup sr moins bonnes que dautres. Par
exemple, jouer [0, 1, 0, 1, 0, 0] (qui rapporte 62) est moins bon que [0, 1, 0, 1, 0, 1]. On appelle
raisonnable une faon de jouer qui, tout en respectant la rgle, ne laisse pas dobjets quil
aurait t possible de prendre. Cest ainsi que jouer [0, 1, 0, 1, 0, 1] est raisonnable, tandis
que jouer [0, 1, 0, 0, 0, 1] ou [0, 1, 0, 1, 0, 0] ne lest pas. Comment caractriser les faons
raisonnables de jouer ?
Montrer que :
nfr0 (1) = 0, nfr1 (1) = 1, nfr0 (2) = 1, nfr1 (2) = 1, nfr0 (3) = 1, nfr1 (3) = 1
et que pour n > 3 :
nfr0 (n) = nfr1 (n 1)
nfr1 (n) = nfr1 (n 2) + nfr1 (n 3).
18 - Q 6 Question 6. Donner les valeurs de nfr0 (n), nfr1 (n) et nfr(n) pour n allant de 1 15.
Quelle relation indpendante de nfr0 a-t-on entre nfr et nfr1 ? Aurait-on pu ltablir avant ?
Question 2. Proposer une structure tabulaire associe au calcul de nfg ainsi quune vo- 19 - Q 2
lution de son remplissage.
Question 3. En dduire un algorithme itratif de calcul du nombre de faons diffrentes 19 - Q 3
permettant datteindre lun des deux tats gagnants du jeu.
Question 4. Appliquer cet algorithme au calcul de la valeur nfg(4, 2). 19 - Q 4
Question 5. Montrer que tout lment nfg(i, j), tel que |i j| est multiple de 3, prend la 19 - Q 5
valeur 0 ( lexclusion de nfg(0, 0), qui na pas de sens).
14 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
20 - Q 1 Question 1. Raisonnons dabord pour former non pas un euro, mais toute somme allant
de un neuf centimes. Pour former un centime, il y a une seule solution. Pour deux
centimes, on peut prendre une pice de deux centimes, ou une pice de un centime et il
reste former un centime. Pour former la somme s de trois ou quatre centimes, on prend
une pice de un centime et il reste former la somme (s 1), ou on prend une pice de
deux centimes et il reste former la somme (s 2). Pour former cinq centimes, on prend
une pice de cinq centimes, ou une pice de un centime et il reste former quatre centimes,
ou une pice de deux centimes et il reste former trois centimes. Enfin, pour former la
somme s de six neuf centimes, on prend une pice de cinq centimes et il reste former
la somme (s 5), ou une pice de un centime et il reste former la somme (s 1), ou une
pice de deux centimes et il reste former la somme (s 2). On en dduit la rcurrence :
nbf(1) = 1
nbf(2) = 1 + nbf(1)
nbf(i) = nbf(i 1) + nbf(i 2) 36i64
nbf(5) = 1 + nbf(4) + nbf(3)
nbf(i) = nbf(i 5) + nbf(i 2) + nbf(i 1) 6 6 i 6 9.
20 - Q 3 Question 3. Vrifier quil y a deux faons de former trois centimes avec lensemble des
pices jaunes.
20 - Q 5 Question 5. Quel est le nombre de faons diffrentes de former un euro avec les pices
jaunes ?
(Alan Perlis)
2.1 Exercices
Exercice 22. propos de quelques fonctions de rfrence
Dire si les affirmations suivantes sont vraies, pour toute fonction f de N dans R+ :
1. 2n+1 O(2n )
2. (n + 1)! O(n!)
3. f(n) O(n) (f(n))2 O(n2 )
4. f(n) O(n) 2f(n) O(2n )
5. nn O(2n ).
23 - Q 1 Question 1. Montrer que si g(n) O(f1 (n)) et h(n) O(f2 (n)) alors g(n) + h(n)
O(f2 (n)).
23 - Q 2 Question 2. Montrer que si g(n) (f1 (n)) et h(n) (f2 (n)) alors g(n) + h(n)
(f2 (n)).
Le but principal de cet exercice est dattirer lattention sur le fait que lon ne peut
pas tirer de conclusion htive lors de la manipulation des ordres de grandeur.
Il est frquent que la fonction de complexit dun algorithme soit donne par
un polynme. Dans cet exercice, on montre quune version simplifie suffit pour
exprimer lordre de grandeur de complexit dun tel algorithme.
f(n, k) = 1k + 2k + + nk (nk+1 ).
CHAPITRE 2. COMPLEXIT DUN ALGORITHME 19
Dans lexercice 23, page 17, on a vu une proprit de la somme de deux fonctions
de complexit. Ltendre une somme multiple est lgitime, encore faut-il prendre
garde distinguer image dune fonction et somme de fonctions.
X
n
i = (1 + 2 + + n) O(n2 ).
i=1
X
n
n (n + 1)
i= .
i=1
2
Or :
X
n
i O(1 + 2 + + n)
i=1
et
O(1 + 2 + + n) = O(max({1, 2, . . . , n})) = O(n).
Donc :
n (n + 1)
O(n).
2
O est lerreur ?
1. constantes
2. x N1 et x = . . . et n N1 et n = . . .
3. variables
4. T 1 .. n + 1 N1 et T = . . . et i N1
5. dbut
6. i 1 ; T [n + 1] x ;
7. tant que T [i] 6= x faire
8. ii+1
9. fin tant que ;
10. crire(i)
11. fin
27 - Q 2 Question 2. On fait lhypothse probabiliste selon laquelle : i) les entiers du tableau sont
tirs qui-probablement sans remise entre 1 et N, avec N > n, et ii) x est tir qui-
probablement entre 1 et N. Quelle est la complexit en moyenne de lalgorithme ?
Cet exercice, qui traite dun problme plus courant que sa prsentation peut le lais-
ser supposer, montre comment deux stratgies a priori analogues peuvent produire
des algorithmes de complexits diffrentes. On cherche ultimement une solution
de complexit linaire, mais aussi une borne sur la constante de proportionnalit,
ce qui nest pas usuel.
Vous tes devant une rivire, dans un pais brouillard. Vous savez quil y a un gu dans
les parages, mais vous ignorez sil est gauche ou droite, et quelle distance. Avec ce
brouillard, vous verrez lentre du gu seulement quand vous serez juste devant. Comment
faire pour traverser la rivire ?
Il faut explorer successivement droite, gauche, droite, etc. en augmentant chaque
fois la distance. Commencer par la gauche ou par la droite na pas dimportance, mais il
faut traiter les deux cts de manire quilibre et augmenter la distance rgulirement
afin dviter de faire trop de chemin du ct o le passage ne se trouve pas.
Une premire mthode consiste faire un pas droite, revenir au point de dpart, un
pas gauche, revenir au point de dpart, deux pas droite, revenir au point de dpart,
deux pas gauche, revenir au point de dpart, trois pas droite, et ainsi de suite jusquau
succs selon le schma ci-aprs :
CHAPITRE 2. COMPLEXIT DUN ALGORITHME 21
soit au total 465 pas, plus de 30 fois les 15 pas strictement ncessaires.
De faon gnrale, appelons n la distance en pas entre le point de dpart et le gu,
cest--dire le nombre minimal de pas ncessaires pour atteindre le gu.
Question 1. Donner le nombre de pas effectus avec la mthode propose si le gu est 28 - Q 1
situ n pas gauche (resp. droite) du point de dpart. Quelle est la classe de complexit
de cette mthode en termes de nombre de pas ?
Question 2. On souhaite trouver une mthode fondamentalement plus rapide (au sens 28 - Q 2
de la classe de complexit) permettant de garantir que le gu est trouv en moins de 10 n
pas. Le dfaut de la prcdente rside dans une progression trop prudente . Augmenter
dun pas chaque fois (progression arithmtique) cote finalement cher et on envisage de
doubler le nombre de pas chaque passage (progression gomtrique), ce que traduit le
schma ci-dessous :
16 8 4 2 1 1 2 4 8 16
Donner le nombre de pas effectus selon que le gu se trouve neuf (resp. 15) pas gauche
ou droite du point de dpart. Conclure.
Question 3. La seconde mthode a permis de faire mieux que la premire, mais elle reste 28 - Q 3
un peu rustique . La modifier pour atteindre lobjectif vis, savoir un nombre de pas
infrieur 10 n.
CHAPITRE 3
(M. Kundera)
3.1 Exercices
Exercice 29. Les haricots de Gries
Cet exercice met en vidence le fait quil est possible de raisonner sur un algo-
rithme (ou un programme) donn en identifiant son invariant.
Une bote de conserve contient une certain nombre B de haricots blancs et un certain
nombre R de haricots rouges (B + R > 1). On dispose dune rserve de haricots rouges
suffisante pour raliser lopration suivante tant que cest possible :
On prend deux haricots au hasard dans la bote
si ils sont de la mme couleur alors
on les jette ; on remet un haricot rouge dans la bote
sinon
on jette le haricot rouge ; on replace le haricot blanc dans la bote
fin si
Question 2. Que peut-on dire de la couleur du dernier haricot restant dans la bote ? 29 - Q 2
Question 1. Proposer les lments dune boucle unique rpondant cette spcification, 32 - Q 1
en appliquant lhypothse du travail ralis en partie.
Question 2. En dduire le programme associ et prciser sa complexit en termes de 32 - Q 2
comparaisons.
Si lon suppose le travail ralis en partie, on est dans la situation reprsente ci-dessous :
1 i N
T
tri
Le tableau T [i .. N] nest pas vide puisque dans le contexte dexcution de cette boucle, on
a : i 1 .. N + 1 et i 6= N + 1. On est donc certain dy trouver une valeur minimale.
La postcondition peut se schmatiser par :
1 i m N
T
Soit T [1 .. N] (N > 0), une chane de caractres donne. T est un palindrome si le mot (ou
phrase sans espace) quelle reprsente scrit de la mme faon de gauche droite et de
droite gauche.
Question 1. Montrer que, si T reprsente un palindrome, on a la proprit : 34 - Q 1
j ((1 6 j 6 N) (T [j] = T [N + 1 j])).
Question 2. Prciser pourquoi et comment on peut rsoudre ce problme en adaptant le 34 - Q 2
patron prsent en section ??, page ??.
Question 3. crire le programme qui dtermine si T reprsente ou non un palindrome. 34 - Q 3
1 p q N
<V =V >V q>p
Toutes les modifications de T vont seffectuer par des changes entre des valeurs de T au
moyen de la procdure changer(i, j) o i et j dsignent lindice dun lment de T . Par
consquent, comme dans lexercice 33 page 25, on peut abandonner le premier conjoint de
28 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
(P et (p = 2N)) ou (Q et (i = 2N + 1)).
Premire tentative
Cette formulation suggre un invariant et une condition darrt :
1. Invariant Les deux premiers conjoints sont faciles tablir, on les conserve pour consti-
tuer linvariant :
(lg est la longueur de la plus longue succession de zros contenue dans le
sous-tableau T [1 .. i 1]) et (i 1 .. N + 1).
Sous forme graphique, on obtient :
1 i N
T 0 0
lg
longue chane de zros conscutifs sachevant en i. Mais on remarquera que tous les
lments de T [1 .. i 1] ont dj t examins et quil serait dommage de les examiner
nouveau (mme en partie). On va supposer cette longueur p dj connue, ce qui
conduit un nouvel invariant, issu du prcdent par renforcement, en lui adjoignant
cette hypothse. Le prix payer est la reconstruction de la boucle sur la base du
nouvel invariant.
Seconde tentative
On effectue la construction fonde sur la suggestion prcdente.
39 - Q 1 Question 1. Expliciter le nouvel invariant.
39 - Q 2 Question 2. En prenant comme condition darrt (i = N + 1), poursuivre la construction
de la boucle (progression, initialisation et expression de terminaison).
39 - Q 3 Question 3. crire le programme. Donner sa complexit en nombre de comparaisons.
39 - Q 4 Question 4. Proposer et justifier une autre condition darrt susceptible damliorer lef-
ficacit de la boucle.
Cet exercice sur la recherche dun lment majoritaire dans un sac est galement
abord dans le chapitre Diviser pour Rgner (voir exercice 104, page 137).
La solution dveloppe ici fait appel une technique originale. En effet, on ex-
ploite frquemment lheuristique prouve qui consiste renforcer la postcondition
afin dobtenir une bonne efficacit temporelle. Ici, au contraire, on va affaiblir
la postcondition afin dobtenir un algorithme simple (mais ne fournissant quune
solution possible devant tre confirme ). La solution obtenue est concise, ef-
ficace et lgante.
x est alors appel lment majoritaire de S (il est unique). Le problme pos est celui de
la recherche dun lment majoritaire dans S. On cherche construire un programme dont
la spcification est :
Prcondition : (S est un sac de N valeurs) et (N > 1).
Postcondition : x contient la valeur de llment majoritaire de S sil existe, 1 sinon.
La dtermination dun candidat ayant obtenu la majorit absolue lors dun scrutin
ou la conception dalgorithmes tolrants aux fautes sont des applications possibles de ce
problme.
CHAPITRE 3. SPCIFICATION, INVARIANTS, ITRATION 33
Un algorithme naf
Il est ais de spcifier un algorithme naf, au mieux en (n) et au pire en (n2 ) r-
solvant ce problme, en considrant la comparaison entre lments de S comme opration
lmentaire. On prend un lment quelconque de S et on compte son nombre doccurrences
dans S. Sil nest pas majoritaire, on prend un autre lment de S, et ainsi de suite jusqu
trouver un lment majoritaire ou avoir trait les lments de la moiti de S sans en avoir
trouv.
Invariant Soit S le sac de valeurs pour lequel on recherche un ventuel lment majoritaire
et sa partition multiensembliste (hypothse du travail ralis en partie) compose de :
R le sac des valeurs restant traiter ,
P un sac des paires de valeurs tel que, pour toute paire, les deux valeurs sont
diffrentes,
C un sac dnomm sac des clibataires dont tous les lments ont la
mme valeur.
S
P R
(1, 3) 5 2
(4, 1)
5 1
(1, 3)
C
Proprit 1 :
|S| = 2 |P| + |C| + |R|.
Proprit 2 :
Si les sacs R et C sont vides, alors S nest pas majoritaire.
Proprit 3 :
Si le sac R est vide mais C ne lest pas (appelons c la valeur prsente dans C) alors :
1. si S possde un lment majoritaire, cest la valeur c,
2. si S ne possde pas dlment majoritaire, on ne peut rien affirmer propos de c
(pas mme que c est llment qui possde la plus grande multiplicit dans S).
Dans un groupe de N personnes, une star est une personne que tout le monde connat et
qui ne connat personne. On considre un groupe de N (N > 1) personnes et on cherche
une star dans le groupe, sil y en a une. Par convention, un groupe dune seule personne
a cette personne pour star. La seule opration autorise, note Connat(i, j) est de choisir
CHAPITRE 3. SPCIFICATION, INVARIANTS, ITRATION 35
On a vu en section ?? quil est lgal que, cherchant rsoudre le problme spcifi par
{P} prog {Q}, on rsolve le problme spcifi par {P0 } prog0 {Q} avec P P0 . En dautres
termes, on affaiblit la prcondition et on peut sinterroger sur limpact de cette dmarche
au plan des performances. Deux exemples sont traits pour clairer cette question.
Postcondition : (T est tri par ordre croissant) et (S est le sac des valeurs contenues dans T ).
Deux stratgies soffrent alors : i) on dveloppe un algorithme spcifique tenant compte du
fait que T est tri par ordre dcroissant, ou ii) on affaiblit la prcondition en supprimant
le conjoint qui prcise que le tableau est tri.
42 - Q 4 Question 4. Dvelopper la solution spcifique fonde sur une boucle dont on donnera les
constituants.
42 - Q 5 Question 5. Que dire de limpact du choix en termes de complexit ?
42 - Q 6 Question 6. On considre maintenant le programme spcifi par :
Prcondition : (T est un tableau dentiers naturels constant de N lments) et (il existe au
moins un zro dans le tableau T ) et (lcart entre deux lments conscutifs de T est
dau moins 1).
Postcondition : La variable i dsigne le zro de plus petit indice de T .
Commenter laffaiblissement de la prcondition en :
Prcondition : (T est un tableau dentiers naturels constant de N lments) et (il existe au
moins un zro dans le tableau T ).
On considre un polygone quelconque dordre N fini (N > 2) dont les sommets sont
tiquets de 1 N dans le sens des aiguilles dune montre. On recherche lune quelconque
des cordes qui partage le primtre p du polygone le plus exactement possible , cest-
-dire telle que la valeur absolue de la diffrence entre la somme des longueurs des cts
dlimits par la corde soit minimale. La complexit est value en nombre de sommets
visits.
d[3] = 1.6
1.3
3 d[4] = 1.6
7
.9
d[5] = 1.1
d[6] = 1.3
2
1.8
2. d[7] = 1.8
2 d[8] = 0.7
.7 8
.6 9 d[9] = 0.6
1
Dfinition 1 (Arc) :
Cas de base :
38 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
y
(i, i + 1) = (i) i 1 .. N 1
(N, 1)
y
= (N).
Cas inductif :
y
(i, j)
y y
= (i, i + 1) (i + 1, j) j 6= i + 1 et i 6= N
(N, j) = (N, 1) (1, j))
y y y
j 6= 1.
Le problme
Lobjectif de lexercice est de trouver une corde globalement optimale (le problme
possde au moins une solution). Une mthode consiste valuer la formule 3.1 et retenir
lun des couples de sommets qui la satisfait. Lalgorithme correspondant est en (N2 ). Il
est galement possible dexploiter lidentit suivante afin dviter des calculs inutiles (p
est le primtre du polygone) :
k(i, j)k k(j, i)k = 2 k(i, j)k p .
y y y
(3.2)
2
Les couples de sommets (j, k) qui satisfont la formule (3.1) sont galement ceux qui vri-
fient :
CHAPITRE 3. SPCIFICATION, INVARIANTS, ITRATION 39
y y
k(j, k)k k(k, j)k
k(u, v)k p .
y
min
=
2 u 1 .. N et
2
v 1 .. N et
u 6= v
Mais, puisque |a b| = |b a|, pour visiter tous les arcs, la variable v na pas besoin
de parcourir la totalit de lensemble 1 .. N {u}. Il suffit quelle prenne ses valeurs dans
lintervalle u + 1 .. N {1}, do :
y y
k(j, k)k k(k, j)k
k(u, v)k p .
y
min
=
2 u 1 .. N et
2
v u + 1 .. N {1}
y
Si (j, k) est une corde localement optimale issue de j, la valeur k(j, k)k p/2 est
note j . Les longueurs des arcs intervenant dans le calcul peuvent tre rassembles dans
la matrice triangulaire suivante (appele triangle des longueurs dans la suite) :
y y y
k(1, 2)k k(1, 3)k ......... k(1, 1)k
y y
k(2, 3)k ......... k(2, 1)k
..
.
y y
k(i, i + 1)k ..... k(i, 1)k
.. ..
. .
.. ..
. .
.. ..
. .
y
k(N, 1)k
y
On notera que le coin suprieur droit du triangle donne la valeur du primtre p = k(1, 1)k
du polygone. Dans le cas du polygone de la figure 3.1 page 37, p = 11.8, et ce triangle
sinstancie de la manire suivante :
2 3 4 5 6 7 8 9 1
1 2.2 3.1 4.7 6.3 7.4 8.7 10.5 11.2 11.8
2 0.9 2.5 4.1 5.2 6.5 8.3 9.0 9.6
3 1.6 3.2 4.3 5.6 7.4 8.1 8.7
4 1.6 2.7 4.0 5.8 6.5 7.1
5 1.1 2.4 4.2 4.9 5.5
6 1.3 3.1 3.8 4.4
7 1.8 2.5 3.1
8 0.7 1.3
9 0.6
Cependant, ce type de triangle contient (N(N + 1))/2 lments et les valuer tous conduit
nouveau une solution en (N2 ). Ce rsultat peut tre amlior sur la base des quatre
observations suivantes :
40 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
1. Pour un sommet j donn, il existe soit une, soit deux cordes optimales locales.
2. Si la corde (j, k) est la premire 1 corde optimale locale issue de j, alors aucune des
cordes (j + 1, j + 2), (j + 1, j + 3),. . . ,(j + 1, k 1) nest globalement aussi bonne que
(j, k).
3. Soit (j, k) la premire corde optimale locale issue de j. Si elle existe, la corde (j + 1, k)
peut tre meilleure que (j, k).
4. Lorsque, pour le sommet j, on a dcouvert une corde localement optimale (j, k),
il est inutile dvaluer loptimalit de (j, k + 1),. . . , (j, N + 1) (principe classique de
larrt au plus tt ).
Il convient de noter que, pour ce qui concerne lobservation 3, dautres cordes issues du
sommet j + 1 peuvent surclasser la corde (j + 1, k).
43 - Q 1 Question 1. Dmontrer lidentit 3.2, page 38.
43 - Q 2 Question 2. Dans quel cas existe-t-il deux cordes optimales locales issues dun mme
sommet j ? Proposer un exemple.
43 - Q 3 Question 3. Dmontrer la proposition relative la seconde observation ci-dessus.
43 - Q 4 Question 4. Dmontrer la proposition relative la troisime observation ci-dessus.
43 - Q 5 Question 5. Dans lexemple de la figure 3.1, page 37, quels sont les arcs dont la longueur
intervient dans le calcul ? Quelle corde globalement optimale est-elle dcouverte ?
43 - Q 6 Question 6. Considrons lexemple suivant :
5
1 2
3 3
3
Fournir, sous la forme dun triangle des longueurs, les arcs dont la longueur intervient
dans le calcul. Que constate-t-on ?
43 - Q 7 Question 7. On dcide de construire une solution algorithmique sur la base dune seule
boucle. Proposer un invariant pour cette boucle.
43 - Q 8 Question 8. Complter la construction de la boucle (condition darrt, progression, ini-
tialisation, terminaison) et produire le code de cette solution. Quelle est sa complexit (en
nombre de sommets visits) ?
1. la premire rencontre en effectuant le parcours selon le sens des aiguilles dune montre.
CHAPITRE 4
(F. Cavanna)
4.1 Exercices
Exercice 44. Double appel rcursif
Cet exercice porte sur la rcursivit. Son intrt rside dans la faon dont on
prouve la terminaison de la procdure rcursive considre.
Question 2. Montrer par induction (rcurrence simple sur k N) que, pour tout n de 44 - Q 2
lintervalle (90 11k) .. (100 11k), lappel Calc(n) retourne la valeur 91.
Question 3. Que dire de la terminaison de cette fonction ? 44 - Q 3
Cet exercice a pour but principal dillustrer le bien-fond dune mise en uvre
non rcursive du calcul dune grandeur dfinie par une relation de rcurrence.
On note F(n) le terme courant de la suite de Fibonacci dfinie pour n strictement positif.
Par dfinition :
F(1) = 1
F(2) = 1
42 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
45 - Q 1 Question 1. crire une fonction rcursive FiboR(n) calque sur la dfinition rcurrente
pour calculer F(n).
45 - Q 2 Question 2. Donner le nombre total dadditions effectues pour n = 6.
45 - Q 3 Question 3. Calculer le nombre dadditions engendres par lappel FiboR(n).
CHAPITRE 4. DIMINUER POUR RSOUDRE, RCURSIVIT 43
On veut dterminer si un point est inclus (au sens large) dans un polygone convexe de
n (n > 3) cts. On se place dans un repre orthonorm xOy du plan.
Question 1. tant donns deux points A et B de coordonnes (xA , yA ) et (xB , yB ), donner 46 - Q 1
le principe dune fonction boolenne den-tte :
MmeCt(xA , yA , xB , yB , xC , yC , xD , yD ) rsultat B
DansTriangle(xA , yA , xB , yB , xC , yC , xP , yP ) rsultat B
dcidant si le point P de coordonnes (xP , yP ) est inclus (au sens large) dans le triangle
(ABC). Quelle est sa complexit en nombre de conditions values ?
Question 3. Dduire une fonction de type Diminuer pour rsoudre den-tte : 46 - Q 3
DansPolygone(n, xP , yP ) rsultat B
Lintrt principal de cet exercice rside dans llaboration du trac raliser, qui
demande en particulier lidentification de son point de dpart.
On veut tracer le dessin de la figure 4.1, page 44, dans lequel le motif de base est
constitu de deux carrs imbriqus. On dispose des deux primitives habituelles placer (x, y)
et tracer (x, y) de lexemple 1 page ??, et le dessin doit tre effectu sous les contraintes
suivantes :
44 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
1. constantes
2. m N1 et m = . . . et x0 R et x0 = . . . et y0 R et y0 = . . . et
3. c0 R+ et c0 = . . .
4. dbut
5. placer (x0 , y0 ) ;
6. DessDbCarrImb(m, x0 , y0 , c0 )
7. fin
Cet exercice vise lui aussi effectuer le trac dun dessin. Il met en vidence
la construction dune solution optimale passant par une premire approche qui
ne lest pas, mais qui met le pied ltrier . La solution finale utilise deux
procdures de type Diminuer pour rsoudre .
appele grand triangle invers . Chaque triangle lmentaire est rectangle isocle (avec
langle droit en bas), de hauteur issue de langle droit d ; sa base (horizontale) a donc pour
longueur 2d. Le schma ci-dessus reprsente six couches de tels triangles. La couche
du bas comporte un triangle, celle de dessus deux, et ainsi de suite jusqu six. Comme
on le voit, un assemblage de n couches forme un grand triangle semblable au triangle
lmentaire, mais de cts n fois plus grands. Une telle figure est dite de taille n. Pour
un triangle lmentaire, si le sommet associ langle droit a pour coordonnes (x, y), les
deux autres sommets ont pour coordonnes (x d, y + d) et (x + d, y + d). On dispose ici
aussi des primitives placer (x, y) et tracer (x, y) dfinies dans lexemple 1 page ??. On veut
que le trac dmarre et termine au sommet associ langle droit auquel on assigne les
coordonnes (x0 , y0 ).
Remarque Le nombre minimum de triangles de taille 1 quil faut tracer pour obtenir un
triangle de taille n est n(n + 1)/2.
Question 1. Dans un premier temps, proposer le principe dune solution de type Dimi- 48 - Q 1
nuer pour rsoudre , avec la seule contrainte de ne pas lever la plume en cours de trac.
Prciser le modle de rsolution par diminution utilis.
Question 2. Donner le code de la procdure correspondante dont lappel est fait par la 48 - Q 2
squence :
1. constantes
2. m N1 et m = . . . et x0 R et x0 = . . . et y0 R et y0 = . . . et
3. d0 R+ et d0 = . . .
4. dbut
5. placer (x0 , y0 ) ;
6. Triangle1 (m, x0 , y0 , d0 )
7. fin
46 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Cet exercice met en vidence une famille dchiquiers qui peuvent tre parcourus
par un cavalier de faon exhaustive et simple, en visitant chaque case une seule
fois. Il est rapprocher de lexercice 53 page 53 du chapitre 5.
pour autant quil ne sorte pas de lchiquier. Dans cet exercice, i dsigne lindice de ligne
et j lindice de colonne.
49 - Q 1 Question 1. Proposer un parcours exhaustif dun chiquier de ct c = 5 (m = 1) en
partant de la case (1, 1).
49 - Q 2 Question 2. Gnraliser ce parcours au cas dun chiquier de ct c = 4m + 1 (m > 1),
toujours en partant de la case (1, 1).
Indication. On pourra mettre en vidence le parcours exhaustif de la couronne extrieure
de largeur 2 bordant lchiquier.
49 - Q 3 Question 3. Spcifier le modle de rsolution par diminution utilis.
CHAPITRE 4. DIMINUER POUR RSOUDRE, RCURSIVIT 47
o o
o o
o o
o o
Cet exercice met en lumire deux problmes de tracs de courbes dans lesquels la
construction de la solution dborde du cadre strict dun procd Diminuer pour
rsoudre . En fait, le trac de ces deux familles de courbes est fond sur quatre
procdures trs semblables dans leur structure, chacune de type Diminuer pour
rsoudre croises.
Question 1. En partant de ces courbes, donner lexpression de A(i + 1), B(i + 1), C(i + 1) 50 - Q 1
et D(i + 1) en fonction de A(i), B(i), C(i), D(i) et des quatre tracs lmentaires trait
vers la gauche not g, trait vers la droite not d, trait vers le haut not h, trait
vers le bas not b, tous quatre de longueur fixe.
Les W-courbes
On considre les courbes dfinies comme suit :
et pour i > 1 :
Remarque On peut montrer que la courbe W(n) sinscrit dans un carr de ct (2n+1 1).
Complment Le lecteur intress pourra tudier le trac des courbes de Sierpinski (voir
par exemple http://aesculier.fr/fichiersMaple/sierpinski2D/sierpinski2D.html),
qui fait lui aussi appel au mcanisme Diminuer pour rsoudre .
CHAPITRE 5
Essais successifs
Though patience be a tired mare,
yet she will plod.
(William Shakespeare)
5.1 Exercices
Jouez-vous aux checs ? Savez-vous comment mettre huit reines sur un chiquier de sorte
quelles ne se menacent pas mutuellement ? Rappelons quune reine, au jeu dchecs, met
en prise toute autre pice situe sur la mme colonne, la mme ligne ou lune de ses deux
diagonales ( condition quelle ne soit pas masque par une pice intermdiaire). On peut
poser ce problme de manire plus gnrale : comment mettre n reines (n > 4) 1 sur un
chiquier de taille n n de sorte quaucune ne soit attaque par une autre ? Par exemple,
le schma suivant fournit une solution pour n = 8 (partie (a)) et pour n = 4 (partie (b)) :
1. Pour n = 1, il existe une seule solution, pour n = 2 ainsi que pour n = 3, il nexiste pas de
solution, et pour n > 4 il existe plusieurs solutions.
50 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
8
0ZqZ0Z0Z
7
Z0Z0ZqZ0
6
0Z0l0Z0Z 4
0l0Z
5
ZqZ0Z0Z0 3
Z0Zq
4
0Z0Z0Z0l 2
qZ0Z
3
Z0Z0l0Z0 1
Z0l0
2
0Z0Z0ZqZ 1 2 3 4
1
l0Z0Z0Z0
1 2 3 4 5 6 7 8
(a) (b)
51 - Q 1 Question 1. Soit un chiquier de taille n n et deux reines R1 et R2 situes sur les cases
respectives (l1 , c1 ) et (l2 , c2 ). quelle condition ncessaire et suffisante R1 et R2 sont-elles
situes sur une mme diagonale montante (sud-ouest nord-est) ? Sur une mme diagonale
descendante (nord-ouest sud-est) ?
51 - Q 2 Question 2. Identifier les lagages possibles et tracer une portion significative de larbre
de rcursion pour le cas n = 4.
51 - Q 3 Question 3. Pour cette version, on suppose disponibles les quatre fonctions boolennes
LigneLibre(l, c), ColonneLibre(l, c), DiagMontLibre(l, c) et DiagDescLibre(l, c) (l et c
reprsentent respectivement le numro de ligne et le numro de colonne de la case o lon
envisage de poser une reine), qui dlivrent vrai si et seulement si la portion de ligne, de
colonne ou de diagonale mentionne dans le schma suivant ne contient pas de reines.
CHAPITRE 5. ESSAIS SUCCESSIFS 51
c
n
1
1 n
La procdure NReines1(l, c) tente de placer une reine dans la case (l, c) sachant que la
partie de lchiquier dlimite par les lignes allant de 1 l 1 constitue une solution
partielle. crire cette procdure en prcisant comment sinstancie chacune des oprations
gnriques du patron TT.
Question 4. Les appels des quatre fonctions boolennes mentionnes ci-dessus conduisent 51 - Q 4
des calculs redondants, quil est possible dviter en remplaant ces fonctions par des
tableaux de boolens. Comment ? Fournir la procdure NReines2 qui tient compte de
cette remarque.
Exercice 52. Les sentinelles
Frre jumeau du problme des n reines (voir exercice 51), quil est conseill de
raliser au pralable, le prsent exercice sen dmarque sur deux points. Dune
52 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
part, le vecteur dnumration ne reprsente pas cette fois pas une bijection, mais
une injection partielle, et dautre part il sagit de rechercher une solution optimale
et non toutes les solutions.
Deux versions sont tudies. La premire est la transposition directe des algo-
rithmes prsents dans lintroduction du chapitre : la seule structure de donnes
est la structure dnumration. Dans la seconde, par application de la stratgie
classique du renforcement de linvariant de rcursivit, on adjoint au vecteur
dnumration une structure de donnes ad hoc destine amliorer lefficacit
de lalgorithme.
8
0l0Z0Z0Z 8
0Z0Z0Z0Z
7
Z0Z0l0Z0 7
Z0Z0Z0Z0
6
0ZqZ0Z0Z 6
0Z0Z0Z0Z
5
Z0Z0Z0Z0 5
Z0ZqZ0Z0
4
0Z0Z0ZqZ 4
0l0Z0Z0Z
3
Z0Z0Z0Z0 3
Z0Z0l0Z0
2
0Z0l0Z0Z 2
0ZqZ0Z0Z
1
l0Z0Z0Z0 1
l0Z0Z0Z0
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
(a) (b)
La configuration (b) est meilleure que la (a) du point de vue du critre doptimalit
considr (le nombre de reines prsentes sur lchiquier), mais on ne sait pas si elle est
optimale. En fait, elle lest car il nexiste pas de configuration quatre reines contrlant
toutes les cases de lchiquier. Le lecteur pourra vrifier exprimentalement cette affirma-
tion lissue de lexercice.
52 - Q 1 Question 1. Pour un chiquier nn, donner un minorant au nombre de reines ncessaires
pour rsoudre le problme.
Dans lexercice des n reines (voir exercice 51, page 49), nous avons tudi deux solu-
tions, la premire fonde sur une matrice dnumration (voir questions 2 et 3, page 50),
CHAPITRE 5. ESSAIS SUCCESSIFS 53
dont lefficacit est perfectible, et la seconde, fonde sur un vecteur dnumration repr-
sentant une fonction totale injective (voir question 6, page 51), qui amliore sensiblement
la premire solution, comme le montrent les rsultats de la question ?? page ??. Ici, nous
cartons demble la premire solution pour ne retenir que lhomologue de la seconde so-
lution. Cependant, compte tenu de la nature du problme et outre le fait quil sagit de
rechercher la meilleure solution, le patron instancier est OPI (voir figure ??, page ??). En
effet, puisquil peut exister des lignes prives de reines (voir figure 5.1, page 52), certaines
cellules du vecteur dnumration X peuvent ne pas dsigner de colonne. X reprsente donc
une fonction partielle. Elles est injective puisquil ne peut y avoir plus dune reine par co-
lonne. Deux variantes sont tudies : la premire nutilise comme structure de donnes
que la structure dnumration X et la solution optimale Y, la seconde adjoint X, des
fins defficacit, des structures de donnes redondantes par rapport X.
Question 2. Dterminer les lagages possibles. Construire une partie de larbre de rcur- 52 - Q 2
sion incluant au moins une situation dlagage et une situation de succs, pour un chiquier
5 5.
Question 3. On sinspire du patron OPI (figure ??, page ??) pour dfinir la procdure 52 - Q 3
Sentinelles1. Prciser comment sinstancient les oprations gnriques auxiliaires de OPI.
Fournir le code, ainsi quun exemple dappel de la procdure Sentinelles1. La contrainte
que lon simpose pour cette solution (voir ci-dessus) a comme consquence que le couple
doprations Faire et Dfaire est sans objet ici.
Question 4. La solution prcdente conduit refaire plusieurs fois les mmes calculs 52 - Q 4
(comme le dnombrement des cellules libres ds lajout dune nouvelle reine). Nous sou-
haitons raffiner cette solution en adjoignant X les lments suivants.
Le tableau Prise, dfini sur 1..n1..n et valeur dans 0..n, qui pour une configuration
donne de X, comptabilise, pour chaque case de lchiquier, le nombre de fois o elle est
en prise. Si la position (l, c) est occupe par une reine, Prise[l, c] = 1.
La variable entire NbReinesPlaces qui, pour une configuration donne de X, fournit
le nombre de reines sur lchiquier.
La variable entire NbCasesLibres qui, pour une configuration donne de X, fournit le
nombre de cases qui ne sont pas contrles par au moins une reine.
Mises jour de manire incrmentale, ces structures permettent dviter des calculs in-
utiles.
Rpertorier et spcifier les oprations ncessaires la gestion du tableau Prise, puis dfinir
la procdure Sentinelles2, instance du patron OPI. Fournir son code.
Encore un problme sur le thme des chiquiers. Cette fois, le rsultat ne consiste
pas obtenir une configuration particulire mais dterminer un ordre de place-
ment de pices. Cet exercice tudie deux variantes du clbre tour du cavalier ,
qui vise faire parcourir toutes les cases dun chiquier un cavalier avant de
54 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
revenir son point de dpart (voir lexercice 49, page 46. La premire partie de
lexercice recherche toutes les solutions pour aller dune case d une case a. Une
valuation (trs grossire) de la complexit est galement demande. La seconde
partie porte sur la recherche dune solution optimale.
Rappel du dplacement du cavalier au jeu dchec : si le cavalier est sur la case (i, j), il
peut aller sur les huit cases ci-dessous :
(i 2, j 1) (i 2, j + 1) (i 1, j 2) (i 1, j + 2)
(5.1)
(i + 1, j 2) (i + 1, j + 2) (i + 2, j 1) (i + 2, j + 1),
Exemple Le schma (b) de la figure 5.2 montre deux parcours pour aller de la case (4, 4)
la case (4, 3), lun de longueur 5, lautre de longueur 3.
Une premire solution qui nest pas dveloppe ici consiste calculer pralablement
le graphe des dplacements possibles du cavalier, depuis toute case de lchiquier. Ainsi,
pour n = 4, on obtiendrait le graphe de la figure 5.3.
Le problme devient alors un problme de recherche de tous les chemins lmentaires
dun sommet un autre sommet dans un graphe. Les mthodes classiques de recherche de
tous les chemins lmentaires peuvent alors sappliquer. Le principe sur lequel nous fondons
notre solution est diffrent. Il consiste calculer, au fur et mesure des besoins, les cases
porte du cavalier depuis sa position courante. Une spcification possible du problme
consiste considrer que le parcours ralis est reprsent par une matrice dnumration
X dfinie sur le domaine 1 .. n 1 .. n et valeurs sur 1 .. n 1 .. n. La cellule X[l, c] contient
un couple qui dsigne la case succdant la case (l, c) dans le parcours. Une telle matrice
reprsente une fonction partielle puisque toutes les cases ne sont pas forcement atteintes.
De plus, elle est injective, puisquune case extrmit apparat au plus une fois. Deux
contraintes propres doivent tre mentionnes : lidentit nappartient pas la fermeture
transitive (voir dfinition ??, page ??) de X (afin dexclure les circuits), mais le couple (d, a)
(case de dpart et darrive) appartient bien, lui, la fermeture transitive. Un raffinement
possible de cette structure dnumration consiste placer sur un chiquier nn le numro
2. Cest--dire les parcours sans circuit (voir chapitre 1 et lexercice 54, page 57).
CHAPITRE 5. ESSAIS SUCCESSIFS 55
8
0Z0Z0Z0Z 8
0Z0Z0Z0Z
7
Z0Z0Z0Z0 7
Z0Z0Z0Z0
6
0ZNZNZ0Z 6
0ZNZNZ0Z
5
ZNZ0ZNZ0 5
M0Z0Z0Z0
4
0Z0M0Z0Z 4
0Z0M0M0Z
3
ZNZ0ZNZ0 3
ZNZNZ0Z0
2
0ZNZNZ0Z 2
0Z0Z0Z0Z
1
Z0Z0Z0Z0 1
Z0M0Z0Z0
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
(a) (b)
Fig. 5.2 Dplacement des cavaliers aux checs. (a) : tous les dplacements possibles
dun cavalier. (b) : deux parcours dun cavalier entre les positions (4, 4) et (4, 3).
4
0Z0Z
3
Z0Z0
2
0Z0Z
1
Z0Z0
a b c d
Fig. 5.3 Graphe de tous les dplacements dun cavalier sur un chiquier 4 4
56 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
du coup effectu par le cavalier lors de son trajet. Par exemple, sur un chiquier 4 4 pour
aller de a1 b1, une possibilit serait davoir le trajet suivant :
4
0Z0Z
3
Z0Z0
2
2
0Z0Z3
Z0Z0
1 1 4
a b c d
La structure dnumration reprsente encore une fonction partielle (car certaines cases
napparaissent pas dans le trajet), injective (car une tape donne est associe une seule
case) de 1 .. n 1 .. n dans 1 .. n2 . Cest a priori un candidat possible pour la fonction
dnumration recherche. Cependant, compte tenu de notre exprience sur ce type de
structure (voir exercice 51, page 49), nous cartons cette solution. En raison du caractre
injectif de cette fonction, il est possible de prendre la fonction rciproque, qui est donc aussi
une fonction partielle injective, mais cette fois de 1 .. n2 dans 1 .. n 1 .. n. Il est cependant
important de noter quun vecteur dnumration en cours dlaboration reprsente une
fonction totale sur le domaine 1 .. i 1, ce qui nous autorise prendre TTI (voir page ??)
pour patron plutt que TPI. Lexemple ci-dessus se prsente alors sous la forme dun
vecteur dnumration contenant les coordonnes chiquennes des cases atteintes :
1 2 3 4
(a, 1) (b, 3) (d, 2) (b, 1)
Ce faisant, nous avons nanmoins introduit une difficult supplmentaire, quil va fal-
loir surmonter. Elle se rapporte la structure des squelettes prsents la section ??,
page ??, dans lesquels la boucle pour parcourt un ensemble scalaire, dont les valeurs sont
enregistres dans la structure dnumration. Ce nest plus le cas ici puisque le vecteur
dnumration contient des couples. Comment rsoudre ce problme ? Une solution consis-
terait utiliser deux boucles pour parcourir toutes les cases de lchiquier. Il y a cependant
mieux faire dans la mesure o seuls (au plus) huit emplacements sont candidats tre
la prochaine tape du parcours. Au prix dune lgre entorse au patron TTI, il suffit alors
de parcourir lintervalle 1 .. 8, pour donner indirectement accs aux cases candidates, ce
qui sobtient par lintermdiaire de la description 5.1 page 54.
a1 a1
b3 c2
a1 a1 a1 a1 a1 a1
b3 b3 b3 c2 c2 c2
c1 d2 d4 a3 b4 d4
a1 a1 a1 a1 a1 a1 a1 a1 a1 a1
b3 b3 b3 b3 b3 c2 c2 c2 c2 c2
c1 c1 d2 d2 d4 a3 a3 b4 b4 d4
a2 d3 b1 c4 c2 b1 c4 a2 d3 b3
a1 a1 a1 a1 a1 a1 a1 a1 a1 a1 a1 a1 a1 a1 a1
b3 b3 b3 b3 b3 b3 b3 b3 c2 c2 c2 c2 c2 c2 c2
c1 c1 c1 c1 d2 d2 d4 d4 a3 a3 b4 b4 b4 b4 d4
a2 a2 d3 d3 c4 c4 c2 c2 c4 c4 a2 a2 d3 d3 b3
b4 c3 b4 b2 a3 b2 a3 b4 b2 d2 c1 c3 b2 c1 c1
Exercice 54. Circuits et chemins eulriens tracs dun seul trait
Cet exercice sintresse aux parcours eulriens dans un graphe orient connexe.
Partant de lalgorithme pour la recherche dun circuit eulrien dans un graphe
orient obtenu dans la troisime question, on demande de le transformer afin
de rechercher un chemin eulrien dans un graphe non orient. Une application
aux tracs dun seul trait (cest--dire aux tracs pour lesquels on ne lve pas la
plume et on ne repasse pas sur un trait) est tudie.
On considre un graphe orient G = (N, V) dans lequel N est lensemble des sommets
et V lensemble des arcs. Posons n = card(V). On tudie tout dabord le problme des
circuits eulriens, puis celui des chemins eulriens (voir dfinitions ?? et ??, page ??).
Question 1. Pour chacun des graphes ci-dessous, fournir, sil en existe, lun des circuits 54 - Q 1
eulriens.
58 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
a b c b c
f e d d e
(a) (b)
54 - Q 2 Question 2. Dans le cadre de la recherche de tous les circuits eulriens pour le graphe
orient G, on choisit une structure dnumration X contenant des sommets. Complter
la dfinition de X considre comme une fonction, en dduire le type de patron qui doit
sappliquer.
54 - Q 3 Question 3. Instancier la procdure gnrique ToutesSolutions(i) (voir figure ??,
page ??), afin dobtenir un algorithme essais successifs permettant dafficher tous les
circuits eulriens dun graphe orient connexe.
54 - Q 4 Question 4. Le problme du trac sans lever la plume se pose en des termes diffrents
de la recherche dun circuit dans un graphe orient. En effet, un graphe non orient
connexe est fourni et il sagit de dcouvrir un chemin eulrien (cest--dire une succession
de sommets qui passe une et une seule fois par chacune des artes soit dans un sens,
soit dans un autre sans ncessairement revenir au sommet de dpart. En revanche, ce
chemin peut franchir un nud autant de fois quon lestime ncessaire).
La partie (a) du schma ci-dessous reprsente le dessin quil faut raliser sans lever la
plume et sans passer plusieurs fois sur le mme trait (les cercles placs aux sommets ne
font pas partie du dessin).
2 23
a e b a e b
22 3
14 15
i m j 1 i m j 24
13 21 7 8 4 16
h p n f h p n f
12 20 6 5 9 17
l o k 28 l o k 25
11 10
19 18
d g c d g c
27 26
(a) (b)
La partie (b) montre une solution possible. Il sagit dun chemin eulrien dbutant au
sommet h ; ce chemin constitue un graphe orient qui se superpose au graphe initial.
Chaque arc est accompagn du numro dordre du parcours.
On considre le jeu suivant : six dominos portent chacun un mot de quatre lettres, tir
dun lexique du franais. On peut juxtaposer deux dominos si les deux dernires lettres
du premier forment un mot de quatre lettres avec les deux premires lettres du second
domino.
Dans la suite, on se base sur :
1. le lexique suivant, de 13 mots (ce lexique ne tient pas compte des accents, et on
accepte les noms propres ainsi que les verbes conjugus) :
1 : BETE
TELE
4 : LESE
CUBE
SEVE
MILE SETE
3 : VECU TETE
MELE LEVE
CURE
6 : REMI
MERE MITE
5 : TELE
MISE
2 : SEME
LESE
60 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Ltiquette place sur chaque arc correspond au mot du lexique form par la concatna-
tion des mots placs aux extrmits de larc, priv des deux caractres de dbut et de fin.
Le but du jeu consiste crer un chemin utilisant les six dominos. Une solution possible
est :
BETE TELE VECU REMI SEME LESE.
Les cinq mots issus de cette juxtaposition sont donc :
TETE LEVE CURE MISE MELE.
Dune manire plus gnrale, lobjectif de cet exercice est dinstancier lun des patrons
du tableau ?? page ?? afin quil numre, partir dun graphe donn, tous les chemins
qui passent une fois et une seule par chacun des nuds, cest--dire tous les chemins
hamiltoniens (voir dfinition ??, page ??).
Dans lexemple prcdent, les deux mots CUVE et MIRE seraient ignors mme sils
appartenaient au lexique, car issus dune boucle sur respectivement les mots VECU et
REMI. En effet, les boucles ne prsentent pas dintrt dans le cas de chemins hamiltoniens.
55 - Q 1 Question 1. Cette question porte sur un traitement manuel du problme. Pour rduire
lespace de recherche, on impose de commencer par le domino numro 1 (BETE), puis de
prendre le domino numro 5 (TELE). Trouver toutes les solutions commenant par ces
deux dominos. Peut-on trouver dautres solutions (voire toutes) partir de celles-ci ?
s 1 2 3 4 5 6
Succ(s) {4,5} {4,6} {1,6} {3,5} {2,3} {2,4,5}
55 - Q 2 Question 2. Dans le cadre de la recherche de tous les chemins hamiltoniens, proposer une
structure dnumration X, fournir ses proprits et choisir un patron instancier.
55 - Q 3 Question 3. Pour lexemple ci-dessus, fournir larbre de rcursion obtenu partir du
nud 1 (le domino BETE) comme racine.
55 - Q 4 Question 4. Fournir une instance du patron ToutesSolutions qui trouve tous les chemins
hamiltoniens dans un graphe de n nuds.
CHAPITRE 5. ESSAIS SUCCESSIFS 61
Un voyageur de commerce doit visiter n villes constituant les sommets dun graphe
non orient connexe dont les artes sont tiquetes par la distance entre les villes quelles
rejoignent. Le voyageur part dune certaine ville et doit, si possible, y revenir aprs avoir
visit toutes les autres villes une fois et une seule. La question que doit rsoudre le pro-
gramme construire est : quel parcours doit-il raliser pour effectuer le trajet le plus court
possible ? Formellement, partant dun graphe non orient G = (N, V), valu sur R+ par la
fonction D (pour distance), il sagit de trouver un cycle hamiltonien le plus court possible.
2 12
1 2 1 2 1 2
7 8 7 2
5 3 17 5 5 3 3
8 3 6 1
3 4 3 4 4 5
1 9
Dans le graphe (a) de la figure 5.4 page 61, le trajet h1, 2, 4, 3, 1i est le plus court, avec
une longueur de 11, tandis que dans le graphe (b), 32 est la longueur du meilleur trajet,
valeur atteinte pour le parcours h1, 2, 3, 4, 1i. En revanche, le graphe (c) (qui nest pas
hamiltonien voir chapitre 1) ne possde pas de solution.
Remarque On peut, sans perte de gnralit, choisir nimporte quel nud du graphe
comme ville de dpart.
Question 1. En supposant que le graphe considr est complet (cest--dire quil existe 56 - Q 1
une arte entre tout couple de villes), combien de cycles hamiltonniens existe-t-il depuis
une ville donne ?
Question 2. Dans le graphe (b) de la figure 5.4 page 61, le trajet h1, 2, 3, 2, 4, 1i est bien 56 - Q 2
un cycle mais il nest pas hamiltonien (il passe deux fois par le sommet 2). Sa longueur,
31, est infrieure au meilleur trajet hamiltonien trouv (h1, 2, 3, 4, 1i). Montrer que si,
dans le graphe, lingalit triangulaire nest pas respecte, il peut exister des cycles non
hamiltoniens (cest--dire passant plus dune fois par un sommet) meilleurs quun cycle
hamiltonien optimal.
62 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
56 - Q 4 Question 4. Fournir larbre de rcursion pour le graphe (a) de la figure 5.4, page 61,
en partant du nud 1. Un lagage bas sur la longueur des chanes peut facilement tre
appliqu. Prciser son mode opratoire et dterminer les consquences attendues sur larbre
de rcursion.
56 - Q 5 Question 5. Dans cette question, on suppose disponibles le tableau D des longueurs des
artes du graphe, ainsi que la fonction Succ(s) qui, pour chaque nud du graphe G, fournit
lensemble des nuds successeurs de s. Instancier le patron fourni en rponse la question
?? pour produire un algorithme qui dtermine dans quel ordre le voyageur doit visiter les
villes afin de minimiser la longueur totale du chemin parcouru.
Cet exercice porte sur des graphes orients. Lalgorithme considre deux graphes
entre lesquels on recherche un isomorphisme. Il opre sur deux niveaux : il re-
cherche une bijection des nuds, qui sous-tend une bijection des arcs. Cette ca-
ractristique est lorigine dun lagage efficace en gnral.
Soit G1 = (N1 , V1 ) et G2 = (N2 , V2 ) deux graphes orients tels que card(N1 ) = card(N2 )
et card(V1 ) = card(V2 ), et B une bijection entre N1 et N2 . G1 et G2 sont isomorphes
travers B, si B induit une bijection entre V1 et V2 (autrement dit si lapplication de la
bijection permet de rcrire le graphe G1 en utilisant le vocabulaire du graphe G2 ), plus
prcisment si B1 V1 B = V2 (soit encore si V1 B = B V2 ). Par exemple, soit
G = (NG , VG ) et H = (NH , VH ) les deux graphes de la figure 5.5, page 62.
1 a
2 3 b c
4 5 d e
G H
1 2 3 4 5
B=
c a b e d
En effet, cette relation induit bien une bijection sur les arcs, que lon peut reprsenter par
le tableau suivant :
(1, 2) (1, 3) (1, 4) (2, 3) (3, 4) (3, 5) (5, 1)
(c, a) (c, b) (c, e) (a, b) (b, e) (b, d) (d, c)
Dans les deux schmas ci-dessous, on utilise une reprsentation bipartite des relations.
Le schma de gauche (VG B) prsente en gris les arcs VG , en pointills la relation B, et
en noir la composition des deux relations. Les mmes conventions sont utilises pour le
schma de droite B VH .
1 1 a 1 a a
2 2 b 2 b b
3 3 c 3 c c
4 4 d 4 d d
5 5 e 5 e e
G B B H
VG B B VH
Exercice 58. Coloriage dun graphe
On considre un graphe non orient connexe G = (N, V) dans lequel N est lensemble
des sommets et V lensemble des artes. Un tel graphe est dit peint si une couleur est
attribue chaque sommet, cest--dire sil existe une fonction totale X de lensemble des
sommets N vers un ensemble C de m couleurs. Un graphe peint est dit colori par X si,
et seulement si, deux sommets de la mme couleur ne sont pas relis par une arte.
Par exemple, avec lensemble des trois couleurs C = {1, 2, 3}, on peut colorier le
graphe du schma (a) ci-dessous comme le montre le schma (b) :
b
b
2
a
a e
e 1
3
c
c d
d 3
1
(a) (b)
Question 4. Proposer une modification de lalgorithme qui ne produit que lune des deux 59 - Q 4
configurations de lappariement.
Question 5. Proposer une modification trs simple de la constitution amricaine pour 59 - Q 5
que llection soit toujours effective, cest--dire que les deux candidats ne puissent pas
avoir le mme nombre de voix de grands lecteurs.
La principale originalit de cet exercice rside dans le fait quil sagit de produire
des injections totales entre deux ensembles. Ce sont ces injections qui constituent
les solutions potentielles. Lune des difficults concerne le calcul de complexit.
Il ny a pas lieu de rechercher une complexit asymptotique, puisque le paramtre
choisi varie sur un intervalle fini. Cependant, les calculs demands se rvlent
assez difficiles.
+
N E U F
+
U N
U N
O N Z E
Le but de lexercice est de dcouvrir toutes les injections totales de L vers lensemble des
dix chiffres dcimaux, de sorte que la substitution de chaque lettre par le chiffre qui lui
correspond fournit une opration arithmtique correcte en base 10.
Lexemple ci-dessus possde une solution que lon peut reprsenter par la bijection
partielle suivante :
{E 7 9, F 7 7, N 7 1, O 7 2, U 7 8, Z 7 4}
1987 + 81 + 81 = 2149.
1988 + 81 + 81 = 2150,
correcte sur le plan arithmtique, nest cependant pas acceptable. En effet, elle provient
dune fonction qui nest pas injective, puisque les lettres F et U sont toutes deux en
relation avec 8. Quant laddition :
1986 + 82 + 82,
elle est issue dune relation qui nest pas fonctionnelle : {. . . , N 7 1, N 7 2, O 7 2, . . .}.
On supposera quil existe une fonction CalculExact qui, partant dune injection entre
lettres et chiffres dcimaux, et dune reprsentation de lopration formelle, rend vrai si,
effectue travers linjection, lopration est arithmtiquement correcte et faux sinon.
60 - Q 1 Question 1. Donner le principe dun algorithme permettant de trouver toutes les solu-
tions tout problme de crypto-arithmtique. Quel est le patron appropri (voir tableau
??, page ??) ? Dans un premier temps, on ne cherche pas effectuer dlagages.
CHAPITRE 5. ESSAIS SUCCESSIFS 67
Question 2. Dfinir les instances des diffrents composants du patron utilis (Satisfai- 60 - Q 2
sant, SolutionTrouve, Faire et Dfaire). En dduire le code de la procdure CryptoArith.
Fournir un exemple dappel.
Question 3. Pour un problme particulier comme celui donn ci-dessus, comment am- 60 - Q 3
liorer la complexit temporelle en introduisant des lagages ? Peut-on dcouvrir des condi-
tions gnrales dlagage ?
Loriginalit de cet exercice rside dans le fait que, bien que le vecteur dnum-
ration reprsente une fonction injective, des restrictions de celle-ci possdent une
proprit plus forte, quil est intressant dexploiter.
Un carr latin dordre n (n > 1) est un tableau carr dans lequel les cellules contiennent
les n lments dun ensemble S, qui sont disposs de telle manire quils apparaissent une
et une seule fois dans chaque ligne et dans chaque colonne. Chacune des lignes et des
colonnes est donc constitue par une permutation des n lments.
Par exemple, pour n = 6 et S = {1, 2, 3, 4, 5, 6}, on a (parmi 812 851 200 solutions) les
trois carrs latins suivants :
1 2 3 4 6 5 3 6 2 1 4 5 1 2 5 3 6 4
4 6 5 2 3 1 1 3 4 6 5 2 2 6 1 4 3 5
3 4 6 1 5 2 6 4 3 5 2 1 5 4 3 2 1 6
2 5 1 3 4 6 2 1 5 3 6 4 3 5 4 6 2 1
5 3 2 6 1 4 4 5 1 2 3 6 6 1 2 5 4 3
6 1 4 5 2 3 5 2 6 4 1 3 4 3 6 1 5 2
Le second carr prsente une particularit : chacune des deux diagonales est entirement
compose dlments identiques. Un tel carr latin est dit antidiagonal.
Le troisime carr prsente une particularit diffrente : les lments de S apparaissent
dans le mme ordre sur la premire ligne et sur la premire colonne. Un tel carr latin
est dit normalis. Il existe 96 773 760 carrs latins normaliss et 76 640 antidiagonaux
dordre 6. Dans la suite, on limite ltude au cas o S = 1 .. n.
Question 1. Sachant que lon recherche tous les carrs latins pour un n donn, dfinir la 61 - Q 1
structure dnumration X et fournir ses proprits. En dduire le patron qui sapplique
ici. Que peut-on en conclure quant lensemble que va parcourir la variable j de la boucle ?
Question 2. Fournir une portion de larbre de rcursion pour un carr latin dordre 3. 61 - Q 2
Exercice 62. Le jeu de sudoku
Cet exercice porte sur le jeu du sudoku. Dans la version finale (question 4), il tire
son originalit du fait que la structure dnumration nest pas vide au dmarrage
de lalgorithme, puisquelle doit contenir les chiffres dj placs sur la grille.
Ce jeu est une extension du jeu du carr latin. Il est conseill de traiter lexercice sy
rapportant (voir page 67) avant daborder celui-ci.
Le but de ce jeu est de remplir de chiffres un carr de neuf cases de ct, subdivis
en autant de carrs identiques de trois cases de ct, appels rgions, de faon ce que
chaque ligne, chaque colonne et chaque rgion contienne une fois et une seule les chiffres de
1 9. Au dbut du jeu, un certain nombre de chiffres sont dj en place (ils sont appels
les dvoils). En gnral, la grille de dpart reprsente un sudoku minimal 4 . Voici un
exemple de grille sudoku (la grille complter gauche et sa solution droite) :
3 7 5 3 4 6 7 8 9 1 2
6 1 9 5 6 7 2 1 9 5 3 4 8
9 8 6 1 9 8 3 4 2 5 6 7
8 6 3 8 5 9 7 6 1 4 2 3
4 8 3 1 4 2 6 8 5 3 7 9 1
7 2 6 7 1 3 9 2 4 8 5 6
6 2 8 9 6 1 5 3 7 2 8 4
4 1 9 5 2 8 7 4 1 9 6 3 5
8 7 9 3 4 5 2 8 6 1 7 9
Dans une premire tape, on considre les grilles sans dvoils. Il sagit donc de produire
toutes les grilles de sudoku possibles.
4. Une grille comportant des dvoils est dite minimale, si dune part la solution existe et est unique,
et si dautre part la suppression dun dvoil quelconque fait perdre lunicit.
CHAPITRE 5. ESSAIS SUCCESSIFS 69
Question 1. Proposer une structure dnumration X. Dfinir ses proprits. Que peut-on 62 - Q 1
en conclure quant lensemble que va parcourir la variable j de la boucle ? Parmi la liste
de patrons du tableau ??, page ??, quel est celui qui est appropri au cas considr ?
Question 2. Fournir le code de la procdure Sudoku1 (sans dvoils), ainsi quun exemple 62 - Q 2
dappel. Il existe environ 7 1021 solutions. Estimer le temps de calcul de ce programme
sur un processeur actuel typique.
Question 4. Amnager la procdure Sudoku2 de faon traiter les grilles avec dvoils. 62 - Q 4
Exercice 63. Sept onze
63 - Q 1 Question 1. Exprime en centimes deuros, quelle est la somme (resp. le produit) des
quatre prix ?
63 - Q 2 Question 2. En supposant que le prix des articles est suprieur ou gal deux centimes,
et en se fondant uniquement sur les proprits de la somme, sur quel intervalle les prix,
exprims en centimes, peuvent-ils varier ?
5. La dcomposition est unique condition que 1 soit exclu. Cest pour cette raison que nous imposons
des prix suprieurs ou gaux deux centimes deuro.
CHAPITRE 5. ESSAIS SUCCESSIFS 71
Question 2. Afin de rsoudre ce problme par une dmarche de type essais successifs , 64 - Q 2
dfinir une structure dnumration X et en fournir les proprits. En dduire le patron
qui lui correspond.
Question 3. Dans cette question, on sintresse la solution de type force brute . 64 - Q 3
Fournir la procdure DcompEntier1, instance du patron choisi la question prcdente,
en prcisant comment sinstancie la fonction SolutionTrouve.
Question 4. Un premier lagage est possible si lon constate quil est inutile de poursuivre 64 - Q 4
lexploration dune branche qui a dj dpass la valeur n. Quelles sont les modifications
apporter la procdure DcompEntier1 pour mettre en uvre cette optimisation ?
Question 5. Pour linstant, le calcul de la somme des nombres reprsents dans le vec- 64 - Q 5
teur X seffectue systmatiquement lors de lvaluation de la condition correspondant
la fonction gnrique SolutionTrouve. Il est clair que ceci conduit refaire plusieurs
fois les mmes calculs. Loptimisation envisage ici consiste liminer ces calculs redon-
dants. Effectuer cette amlioration en adaptant la technique du renforcement dinvariant
de rcursivit appliqu dans lexemple introductif de ce chapitre (voir page 49).
Question 6. Un dernier lagage est possible. Il se fonde sur le fait que lon peut arrter 64 - Q 6
la recherche ds que la somme exacte a t trouve, que i soit ou non gal n. Comment
doit-on modifier la version prcdente pour parvenir cette version ?
Exercice 66. Mini Master Mind
Le Master Mind est un jeu qui a connu la clbrit dans les annes 70. Deux
joueurs saffrontent, lun passif, le codeur, propose un code, que le second, le d-
codeur, doit dcouvrir. Inspir de ce jeu, cet exercice prsente trois intrts. Tout
dabord, dans la premire question, il pousse une rflexion sur les proprits
des propositions faites par le dcodeur. Une seconde solution tudie un lagage
particulirement efficace. Enfin, une troisime solution emprunte une voie pro-
metteuse totalement diffrente.
Il sagit dun jeu deux joueurs, le codeur et le dcodeur. Le premier se fixe une permu-
tation de n couleurs (ici n = 5) blanc, noir, orange, rouge et vert, codes respectivement
B, N, O, R, V, que le second tente de dcouvrir. Pour ce faire, le dcodeur propose une
liste des cinq couleurs diffrentes et en rponse, le codeur linforme du nombre de cou-
leurs correctement places. Si cest le cas pour les cinq couleurs, la partie est termine.
Sinon, le dcodeur effectue une autre proposition qui est value son tour. Le dcodeur
doit dcouvrir le code en effectuant le moins possible de propositions. Il saide pour cela
des informations qui ont t fournies en rponse ses prcdentes propositions. Dans cet
exercice, le programme construire joue le rle du dcodeur.
La figure 5.6 montre lhistorique du droulement dune partie de Mini Master Mind
partir du codage [V,R,N,B,O]. La partie se termine au bout de sept propositions.
CHAPITRE 5. ESSAIS SUCCESSIFS 73
Fig. 5.6 Historique du droulement dune partie pour le codage initial [V,R,N,B,O].
Les lettres soulignes correspondent aux couleurs correctement places. Cette informa-
tion nest pas disponible pour le dcodeur.
Dans la suite, la liste des n couleurs dcouvrir est reprsente par le tableau C, et
lhistorique H se prsente sous la forme dune structure de donnes (voir figure 5.6 pour
un exemple) accessible travers les trois oprations suivantes :
procdure InitHisto qui vide H,
procdure InsrerHisto(P, E) qui ajoute lhistorique H la permutation P value E,
fonction CompatAvecHisto(P) rsultat B qui dlivre vrai, si et seulement si la permuta-
tion P satisfait la condition ncessaire qui fait lobjet de la premire question.
Question 2. Dfinir le vecteur dnumration X. Lequel des patrons du tableau ??, page 66 - Q 2
??, sapplique-t-il ? En dduire la procdure PermutMasterMind1(i) qui construit, dans le
vecteur dnumration X, la prochaine proposition du dcodeur. Montrer comment utiliser
cette procdure pour raliser une partie de Mini Master Mind (on suppose quaucun des
joueurs ne commet derreur).
Question 3. Dans cette question, on suppose que n = 4 et que le tableau C des couleurs 66 - Q 3
est C = [B,O,R,V]. On suppose par ailleurs que :
a) la permutation dcouvrir est [R,O,V,B],
b) au moment qui nous intresse, lhistorique se prsente de la manire suivante :
74 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
c) les propositions sont produites par le dcodeur dans lordre lexicographique et quil
arrte sa recherche ds quune proposition est compatible avec lhistorique (au sens de
la question 1).
Donner larbre de rcursion lagu qui aboutit la cinquime proposition.
[5, 7, 4, 3, 2]. Inversons les quatre derniers chiffres : [5, 2, 3, 4, 7]. Le dbut du code, [6, 1, 9, 8],
ne jouant aucun rle dans la dmarche, le rsultat recherch est [6, 1, 9, 8, 5, 2, 3, 4, 7]. Notons
enfin que cette approche sapplique uniformment sur tous les codes dots dun successeur.
Question 5. Appliquer la dmarche ci-dessus pour aboutir au code de la fonction S(p) 66 - Q 5
dlivrant la permutation qui suit p dans lordre lexicographique. Cette fonction a comme
prcondition quil existe bien une permutation suivante. valuer sa complexit.
Question 6. Montrer comment utiliser cette procdure pour raliser une partie de Mini 66 - Q 6
Master Mind.
Question 7. Selon vous, quelle stratgie est la plus efficace ? tayez votre rponse par 66 - Q 7
quelques rsultats exprimentaux sur un Mini Master Mind 12 couleurs.
Exercice 67. Le jeu des mots cass
Cet exercice sarticule autour dune grille de mots croiss. Il sagit dun exemple
typique du gain que lon peut esprer obtenir par un lagage performant. La solu-
tion obtenue en appliquant un lagage labor permet dobtenir un gain substantiel
par rapport la solution o seul un lagage grossier est appliqu.
Le jeu connu sous le nom de mots cass est une variante des clbres mots croiss
dans laquelle on fournit au dpart au joueur, dune part une grille de mots croiss vide, de
lautre le sac des mots qui apparatront dans la grille rsolue. Il sagit alors pour le joueur
de trouver une configuration (la premire qui est dcouverte) o tous les mots sont placs
sur la grille.
Exemple La figure 5.7, page 76, fournit un exemple avec, sur la gauche la grille vierge
accompagne du lexique de 24 mots, et sur la droite la grille complte par une configura-
tion possible. On note que tous les mots, y compris ceux rduits une seule lettre, sont
prsents dans le lexique.
La premire solution que nous nous proposons dtudier se limite un lagage grossier.
Son principe consiste remplir la grille horizontalement en ne prenant en compte, chaque
tape, que les mots dont la longueur est gale celle de lemplacement considr (cest
llagage en question), puis, une fois la grille remplie, vrifier que les mots qui nont pas
t placs sont bien ceux que lon retrouve verticalement sur la grille.
Dans la suite, on suppose que :
1. la grille traite, Grille, comporte l lignes et c colonnes,
2. H est une constante qui reprsente le nombre demplacements horizontaux, ces em-
placements tant numrots de 1 H (dans lexemple de la figure 5.7, page 76,
H = 13),
3. Dico est un tableau constant, dfini sur lintervalle 1 .. N, qui reprsente le sac des
N mots placer sur la grille.
76 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
D BI BEC
E CA DIS M E M I L
E ET FER A M E B I
E IF MIL R U D I S
M ME EMUE B E C S I
R RU IBIS R A I E
T SI LISIER E T F E R
AI AME MARBRE
Fig. 5.7 Exemple dnonc et de solution pour le jeu des mots cass
67 - Q 2 Question 2. Pour le problme 3 3 de la figure 5.8, page 76, fournir larbre de rcursion
(on arrte la recherche ds la dcouverte de la premire solution).
A TA TRI
I TA
AI RIT
Cette premire solution est perfectible sur le plan de lefficacit. Nous allons prsent
tudier et mettre en uvre un lagage destin apporter une amlioration en termes
de complexit temporelle. Pour ce faire, nous proposons de ne pas attendre la fin de la
phase de gnration pour effectuer une vrification verticale. Plus prcisment, ds quun
mot est candidat un placement horizontal, on vrifie quil ne constitue pas un obstacle
au placement vertical de lun des mots encore disponible en sassurant que chacun des
caractres du mot candidat est aussi un caractre possible pour un mot vertical.
CHAPITRE 5. ESSAIS SUCCESSIFS 77
T
C A
alors que le sac des mots disponibles est JCRI, TALC, EU, OSEK. Le placement de RUE est
compatible avec celui du mot vertical CRI, le R tant commun. En revanche, le U de RUE
est incompatible avec tous les mots de quatre lettres libres puisque TAU nest le dbut
daucun mot libre de longueur 4. Le placement du mot RUE est donc abandonn, ce qui
produit un lagage de larbre de rcursion.
Question 4. Pour lexemple de la figure 5.8, page 76, fournir larbre de rcursion obtenu 67 - Q 4
par llagage dcrit ci-dessus. Conclusion ?
Question 5. Llagage prsent ci-dessus exige un accs horizontal mais aussi vertical aux 67 - Q 5
emplacements et aux mots de la grille. Pour cette raison, nous dcidons de prendre comme
structure dnumration la grille elle-mme. Spcifier les oprations qui vous semblent
ncessaires la mise en uvre de llagage, puis fournir la procdure MotsCass2 qui met
en application cet lagage.
i 0 1 2 3
X[i] 1 2 1 0
78 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
X[5] vaut 3 et la valeur 5 est justement prsente 3 fois dans X[0 .. 19]. Il est donc inutile de
chercher placer 5 en position 20, la tentative serait voue lchec. Mettre en uvre cet
lagage travers la procdure TabAutoRef2.
68 - Q 5 Question 5. Montrer que, pour n > 7, les tableaux conformes la structure suivante :
i 0 1 2 3 ... n5 n4 n3 n2 n1
X[i] n4 2 1 0 ... 0 1 0 0 0
n 7 fois
sont des tableaux autorfrents.
Conjecture Les auteurs conjecturent que la condition suffisante qui fait lobjet de la ques-
tion 5 est en fait une condition ncessaire et suffisante.
CHAPITRE 6
(H.-F. Amiel)
6.1 Exercices
Exercice 69. Assignation de tches
On considre n agents, qui doivent effectuer n tches, chaque agent se voyant assigner
exactement une tche. Le problme est que tous les agents ne sont pas galement efficaces
sur toutes les tches. Si lagent i effectue la tche j, le cot (par exemple en temps) de
cette assignation vaut D[i, j]. tant donne une matrice D[1 .. n, 1 .. n] des cots, on
cherche minimiser le cot de laffectation, obtenu par addition des cots sur chaque
agent. Dans la suite, les agents sont nots en italique et les tches en police droite. Le
terme affectation est synonyme, pour cet exercice, du terme gnrique candidat
employ dans lintroduction.
Par exemple, pour les quatre agents 1 , 2 , 3 et 4 et les tches 1, 2, 3, et 4, la matrice
de cots D est la suivante :
1 2 3 4
1 8 13 4 5
2 11 7 1 6
3 7 8 6 8
4 11 6 4 9
1 2 3 4
1 8 13 4 5
2 11 7 1 6
3 7 8 6 8
4 11 6 4 9
Tab. 6.1 Tableau des cots D. Les zones en gris clair sont les valeurs de D qui
deviennent indisponibles lorsque la tche 3 est affecte lagent 1 .
Lobjectif de lexercice est donc de construire, selon la dmarche PSEP, un algorithme qui
produit lune quelconque des affectations prsentant un cot minimal.
69 - Q 1 Question 1. Quel est lensemble C de tous les candidats ? Quel est son cardinal ? Proposer
une reprsentation et un procd de sparation pour un ensemble de candidats.
69 - Q 3 Question 3. Une meilleure solution (a priori ) serait, pour chaque agent i qui reste
affecter, de prendre pour fonction heuristique h le plus petit cot encore disponible sur la
ligne correspondante de D. Ainsi, pour le mme exemple que dans la question prcdente,
pour lagent 2 (resp. 3 et 4 ), on prendrait 6 (resp. 7 et 6). Refaire la seconde question en
appliquant cette fonction heuristique.
Cet exercice reprend, avec les mmes hypothses, lexemple du voyageur de com-
merce trait dans lintroduction. Une troisime fonction dvaluation est tudie.
Les rsultats sont compars avec ceux des prcdentes solutions.
On rappelle (voir section ??, page ??) que lon part dun graphe non orient G = (N, V, D)
de n (n > 2) sommets, valu sur R+ , et quil sagit de dcouvrir, sil en existe, un cycle
hamiltonien de cot minimal dbutant et aboutissant au sommet 1.
Dans la mthode du cot uniforme, (voir section ??, page ??) la valeur de la fonction
dvaluation f est constitue : i) du cot g? de la chane dj parcourue, ii) de la valeur
de h, elle-mme compose, dune part dun minorant du cot des chanes hamiltoniennes
ventuelles pour le sous-graphe G0 form par les sommets napparaissant pas dans la chane
dj parcourue, dautre part du cot du raboutement. Le cot du minorant est obtenu en
appliquant uniformment le cot de larte la moins coteuse toute arte de G0 moins
une (pour faire en sorte que les cycles soient ignors).
Dans la version tudie ici, on sinspire de cette solution, mais, au lieu de prendre
systmatiquement larte la moins coteuse du sous-graphe G0 , on adopte la dmarche du
minimum local dfinie comme suit. On va calculer la somme des artes les moins coteuses
pour les n0 sommets de G0 , avant de retrancher le maximum de ces n0 artes, afin dviter
les cycles. De cette faon, la valeur obtenue est bien un minorant du cot des ventuelles
chanes hamiltoniennes de G0 .
3 4 4 3 4 4
1 6 6 1 6 6
2 2 2 2
4 4
1
4
2 8 3 1
4
2 8 3
6 6
4 4 4 4
3 5 3 5
3 7 5 3 7 5
(a) (b)
3 4 4 3 4 4
1 6 6 1 6 6
2 2 2 2
4 4
1 2 8 3 1 2 8 3
6 6
4 4 4 4 4
4
3 5 3 5
3 7 5 3 7 5
(c) (d)
70 - Q 1 Question 1. On considre le graphe (a) de la figure 6.1 dans lequel la partie en gras est
la chane dj parcourue. Fournir la valeur de f pour cette configuration. Faire de mme
pour le graphe (b).
3 4 4 4 1
3 4 4 7
1 6 6 1 6 6 2 3
2 2 1
2 4 2 4
1 2 8 3 3 1
4 6 1 2 8 3 4
4 6
4 4
4
4 5
3 5 4 5
3 5 8 9
3 7 5 3 5
6
7
(a) (b) (c)
Exercice 71. Le taquin
CHAPITRE 6. PSEP 83
Le taquin est un jeu solitaire o il sagit datteindre une situation finale don-
ne partir dune situation initiale, en un minimum de coups. En gnral, la
rsolution informatique se fait en utilisant lalgorithme A? , variante de PSEP
adapte aux situations o lensemble des tats considrs est organis en graphe.
Dans cet exercice, nous appliquons la mthode PSEP selon les principes exposs
dans lintroduction. Un point mrite dtre soulign : le cardinal de lensemble
des candidats est ici infini dnombrable.
1 3 4 15 1 2 3 4
2 5 12 5 6 7 8
7 6 11 14 9 10 11 12
8 9 10 13 13 14 15
(a) (b)
partir de la configuration (a), on peut atteindre, en un seul coup, les quatre configu-
rations apparaissant la base du schma ci-dessous (les flches reprsentent le sens du
dplacement du trou) :
1 3 4 15
2 5 5 12
7 6 11 14
8 9 10 13
1 5 4 15 1 3 4 15 1 3 4 15 1 3 4 15
2 3 5 12 2 5 5 12 2 6 5 12 5 2 5 12
7 6 11 14 7 6 11 14 7 5 11 14 7 6 11 14
8 9 10 13 8 9 10 13 8 9 10 13 8 9 10 13
Le but du jeu est, partant dun configuration donne (par exemple la configuration
(a) de la figure 6.2), de dterminer la squence de dplacements la plus courte possible
permettant datteindre la configuration canonique (b). La question de savoir sil existe
une squence finie de dplacements entre la configuration de dpart et celle darrive nest
pas anodine puisque seule une partie des configurations possibles permet de rejoindre la
configuration finale (b). Un calcul prliminaire simple non dcrit ici , ralis sur la
configuration de dpart, permet de dterminer si une tentative peut ou non aboutir. Dans
la suite, on considre que cette prcondition est satisfaite.
Face un tel problme, la tentation est grande de considrer que lespace dtats
prendre en compte est celui des configurations du taquin. Ce type dapproche se prte
cependant mal lapplication de la dmarche PSEP, une mme configuration risquant
84 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Les caractristiques de cet exercice nous obligent une mise en garde. De par le
caractre trs restrictif de ses conditions dutilisation et lexistence dune solution
nave aux performances acceptables, cet exercice a pour seul objectif de mettre en
pratique la dmarche PSEP, sans aucune ambition applicative. Par ailleurs, cet
exercice illustre deux caractristiques peu courantes dans les mises en uvre de
lapproche PSEP : dune part, lensemble des candidats est ici dfini en extension
(alors quen gnral il est dfini en comprhension) et, dautre part, la fonction
dvaluation f ne se dcompose pas en une somme des fonctions g? et h.
Une solution simple consiste coder la formule ci-dessus comme une recherche squen-
tielle. Pour des raisons purement didactiques, notre choix est diffrent.
Soit R un rectangle aux cts parallles aux axes, qui englobe tous les points de C, et
soit D le disque circonscrit R. On impose en outre (prcondition dloignement ) que
a / D. Soit m le centre du disque et soit r son rayon. La figure 6.3 montre un exemple
dune telle situation (R est ici un carr).
8
7 1
6 2
5 3 4
a (12, 5)
4 m
3 5
2 6 7
1 8
0
0 1 2 3 4 5 6 7 8
Fig. 6.3 Exemple avec un ensemble de huit points candidats. La distance entre a et
le disque est la longueur de la double flche en gras. Les points sont numrots de 1
8. Les coordonnes prcises apparaissent dans le tableau 6.2. La solution unique est le
point numro 5.
n coord. n coord.
1 (5, 7) 5 (7, 3)
2 (1, 6) 6 (1, 2)
3 (3, 5) 7 (5, 2)
4 (6, 5) 8 (2, 1)
Tab. 6.2 Tableau des coordonnes des huit points de lexemple de la figure 6.3
Algorithmes gloutons
Un gourmet est un glouton qui se
domine.
(Francis Blanche)
7.1 Exercices
Exercice 73. la recherche dun algorithme glouton
On considre un tableau T [1 .. n] dentiers positifs, avec n pair, tri par ordre croissant.
On dsire recopier T dans deux sacs S1 et S2 , de mme taille n/2 et de sommes respectives
Som1 et Som2, de sorte que lon ait (Som1 6 Som2) et (Som2 Som1) minimal. Plus
prcisment, en supposant que T reprsente la file dentre, la postcondition de lalgorithme
est constitue des quatre conjoints suivants.
1. Les sacs ont mme cardinal : |S1 | = |S2 |.
2. Les sommes Som1 et Som2 sont telles que (Som1 6 Som2).
3. La diffrence (Som2 Som1) est minimale.
4. La file dentre T est vide.
5. S1 t S2 est le sac des valeur initiales de T .
Question 1. Sur la base de cette postcondition, imaginer trois stratgies gloutonnes pour 73 - Q 1
traiter ce problme et montrer quelles ne produisent pas de solutions exactes.
Question 2. Cela prouve-t-il quil ny a pas dalgorithme glouton pour ce problme ? 73 - Q 2
Le problme trait ci-dessous est repris selon une approche par programmation
dynamique lexercice 133 page 218. Ici on sen tient une dmarche gloutonne.
On dispose dun ensemble de n valeurs entires {x1 , . . . , xn }. chacune delles est atta-
che une probabilit p(xi ). Afin de faciliter une recherche positive (recherche dun lment
dont on sait quil est prsent dans lensemble), ces n valeurs sont enregistres dans un
arbre binaire de recherche (abr en abrg). On dfinit le cot dun tel abr A par :
X
n
cot(A) = p(xk ) (dk + 1), (7.1)
k=1
o dk est la profondeur du nud xk dans larbre A. La valeur cot(A) est en fait lesprance
du nombre de comparaisons effectuer pour trouver un lment prsent dans larbre A.
On cherche construire, par une dmarche gloutonne, labr de cot minimal.
Exemple La figure ci-dessous montre dune part une liste de cinq valeurs xi pondres
chacune par une probabilit p(xi ), dautre part un abr construit partir de ces cinq
valeurs.
xi 1 2 3 4 5 6 3 6
p(xi ) 0.15 0.19 0.17 0.18 0.14 0.17
1 4
soit encore
1 0.14 + 2 0.17 + 2 0.17 + 3 0.15 + 3 0.18 + 4 0.19,
expression qui vaut 2.57.
74 - Q 1 Question 1. Lide de placer les valeurs les plus probables le plus haut possible dans
larbre semble favorable une recherche optimale. Elle peut sobtenir de manire glou-
tonne, soit en construisant larbre par insertion aux feuilles partir dune liste des valeurs
trie sur les probabilits croissantes, soit au contraire en ralisant une insertion la racine
partir dune liste des valeurs trie sur les probabilits dcroissantes. Une insertion aux
feuilles dune valeur v dans un abr se fait en insrant v dans le sous-arbre gauche ou droit
selon la position relative de v par rapport la racine, jusqu atteindre un arbre vide.
Une insertion la racine se fait en ventilant les valeurs de larbre initial dans deux sous-
arbres, selon la valeur insrer, puis en enracinant ces deux sous-arbres sur v. Donner
larbre obtenu partir du jeu dessai ci-dessus, en appliquant la premire de ces stratgies
(linsertion aux feuilles). Quel est son cot ?
74 - Q 2 Question 2. En partant toujours du mme jeu dessai, montrer, par un contre-exemple,
que cette stratgie nest pas exacte.
CHAPITRE 7. ALGORITHMES GLOUTONS 89
Il sagit dun exercice voisin de lexemple introductif (rpartition des tches sur
un photocopieur). Il devrait donc tre rsolu sans difficult par le lecteur.
On considre une longue route de campagne rectiligne, le long de laquelle sont disperses
des habitations. Chaque maison doit tre relie au rseau de tlphones portables par un
oprateur. Une antenne-relais du rseau permet lusage du tlphone dans une zone
distance fixe de d/2 autour du relais (toutes les antennes possdent la mme puissance).
Loprateur veut poser le moins dantennes possibles pour couvrir toutes les maisons.
On peut formaliser le problme de la manire suivante. Un tableau T (T 1 .. n R+ )
reprsente la position de chaque maison sur le bord de la route. On cherche une liste S de
valeurs relles, ayant au minimum p lments, S = hs1 , . . . , sp i, telle que pour toute valeur
T [i], il existe une valeur sj vrifiant la contrainte (|T [i] sj | 6 d). S est une liste optimale
de positions dantennes-relais. Dans le schma ci-dessous, la ligne T reprsente la position
des maisons, la ligne O matrialise une couverture optimale, avec trois relais, tandis que
la ligne Q couvre bien toutes les maisons, mais avec quatre relais (et un recouvrement des
deux relais de droite).
Q:
T:
O:
Question 2. Proposer une troisime stratgie gloutonne dont on puisse esprer quelle 75 - Q 2
soit exacte.
Question 3. En dveloppant une dmarche du type course en tte (voir section ??, 75 - Q 3
page ??), construire, sur la base de la stratgie gloutonne de la question prcdente, un
algorithme glouton exact rsolvant le problme. Quelle est sa complexit ?
Question 4. On suppose maintenant que loptimalit de la solution na pas t prouve 75 - Q 4
lors de la construction de lalgorithme. Montrer, par une mthode a posteriori (voir section
??, page ??), que la stratgie gloutonne prcdente est exacte.
Exercice 76. Ordonner des achats dont le prix varie
90 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Le propritaire dun club de football veut acheter des joueurs auprs dun centre de
formation. La lgislation lui interdit den acheter plus dun par mois. Le prix des joueurs
est le mme au dpart il est not s mais ce prix varie dans le temps, diffremment
selon les joueurs. Cest ainsi que, puisque le joueur j vaut s au dpart, il vaudra (s rtj )
t mois plus tard. Le taux rj dpend de la vitesse de progression du joueur, mais il est
toujours strictement suprieur 1. On se base sur un taux de progression estim, connu
au temps t = 0. Pour simplifier, on suppose aussi que ce taux est diffrent pour chaque
joueur. Lobjectif est de dfinir une stratgie gloutonne qui permet dacheter un joueur
par mois et qui assure dacqurir les joueurs convoits en dpensant le moins possible. On
suppose enfin que lacheteur na pas de concurrent.
76 - Q 1 Question 1. Donner deux stratgies simples susceptibles de servir de base un algorithme
glouton. Laquelle des stratgies semble tre la meilleure ?
76 - Q 2 Question 2. Montrer, en appliquant largument de lchange (voir section ??, page ??),
quelle est optimale.
Exercice 77. Plus courts chemins dans un graphe partir dun sommet donn :
lalgorithme de Dijkstra
Publi en 1959 par le clbre informaticien E.W. Dijkstra, cet algorithme est
un vritable cas dcole, que lon retrouve dans la littrature, aussi bien dans
la rubrique graphe que dans la rubrique glouton . Le prsent nonc met
laccent sur la correction de la boucle qui le constitue, et donc sur son caractre
glouton exact .
Soit G = (N, V, P) un graphe orient (voir section ??, page ??, pour des gnralits sur
les graphes), o P est une valuation des arcs sur R+ . On pose card(N) = n. Soit d un
sommet particulier. Le problme que lon se pose est de dterminer, pour tout sommet f
de N, le cot minimum (appel distance ci-dessous) pour aller de d f. En labsence de
chemin entre d et f, la distance est +.
Lalgorithme que lon cherche construire est fond sur une itration qui est telle que,
pour un sous-graphe G0 de G les distances sont dj connues, et qui, chaque tape, ajoute
un nouveau sommet dans G0 . Le rsultat final se prsente sous la forme dun tableau L,
dfini sur lintervalle (1 .. n), tel que L[i] est la distance de d i (en particulier L[d] = 0).
Le graphe de la figure 7.1 sert dillustration dans la suite.
Notations
Soit c un chemin dans G ; cot(c) est la somme des valuations des arcs qui com-
posent ce chemin (si le chemin comporte des circuits, certains arcs sont comptabiliss
plusieurs fois).
CHAPITRE 7. ALGORITHMES GLOUTONS 91
5
2 4
1 1
24
1
d 1 5
2
3
3 6
3
dist(f) =
b min (cot(c)).
cchem(f)
b f (f N0 L[f] = dist(f)).
I1 =
b (N0 6= d N0 ).
I2 =
b (N = N0 N00 ).
I3 =
Dans lexemple de la figure 7.2 page 92, N0 = {1, 2, 3} et les trois distances entre le
sommet 1 et ces trois sommets sont connues. Elles sont notes dans la partie grise
de chacun de ces sommets.
Condition darrt
N00 = .
On peut vrifier que la conjonction de linvariant et de la condition darrt implique
bien le but : les distances de d tous les sommets sont connues.
Progression Il sagit de slectionner un sommet de N00 et de le dplacer dans N0 tout en
sassurant que linvariant est bien prserv. Cependant, en labsence dinformations
92 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
2 5
4
1
1 1
1
24
1
d 5
0
2
3
3 6
N0 3 3 N00
Fig. 7.2 Situation aprs insertion de trois sommets dans N0 (la valeur de L pour ces
trois sommets apparat dans la zone grise de ces sommets).
Lexemple de la figure 7.2 page 92 se complte alors comme le montre la figure 7.3
page 93, o L[4] = eDist(4) = 6, L[5] = eDist(5) = 4. En revanche, il ny a pas
(encore) de e-chemin de d vers le sommet 6, et donc L[6] = eDist(6) = +.
Ds lors que d N0 , si f N00 , tout chemin de d f possde un e-chemin comme
prfixe (lui-mme le cas chant). Soit le chemin hd, a1 , . . . , ap , fi. Son e-chemin est
hd, a1 , . . . , ai i tel que, pour tout j de lintervalle 1 .. i, aj N0 et ai+1 N00 . Ainsi,
le schma ci-dessous montre un chemin de d f et, en gras, le e-chemin qui lui
correspond :
CHAPITRE 7. ALGORITHMES GLOUTONS 93
2 5 4
1 6
1 1
d
1
24
1 5
0 4
2
3
3 6
N0 3 3 + N00
Fig. 7.3 Situation aprs trois pas de progression. Les valeurs de dist(f), pour f N0 ,
et de eDist(f), pour f N00 , sont notes dans la partie basse de chaque sommet. Elles
correspondent L[f].
d f
N0 N00
Un tel chemin nest donc jamais moins coteux que le e-chemin qui lui correspond,
do la proprit suivante (qui nest pas formellement dmontre) :
Proprit 4 :
Soit f N00 , d N0 , c un chemin de d f et c0 le e-chemin correspondant. On a
cot(c0 ) 6 cot(c).
77 - Q 1 Question 1. Montrer que, si lon parvient achever sa construction, cet algorithme est
un glouton exact (autrement dit, que pour le sommet g slectionn L[g] = dist(g)). Sur
lexemple de la figure 7.3, page 93, quelle est la situation atteinte aprs lexcution de la
ligne 4 de la progression ?
77 - Q 4 Question 4. Quen serait-il de la proprit 4, page 93, si la prcondition qui exige que la
valuation P ne soit jamais ngative tait abandonne ?
77 - Q 6 Question 6. Dans la perspective dun second raffinement, on considre les files de priorit
de type tas prsentes dans le chapitre Mathmathiques et informatique : notions utiles
(voir section ??, page ??). Sur cette base, dcrire informellement les diffrentes structures de
donnes, ainsi que les tapes de lalgorithme, et fournir son code. Analyser sa complexit en
temps et discuter par rapport la complexit obtenue en rponse la question prcdente.
77 - Q 7 Question 7. Jusqu prsent nous ne nous sommes proccups que des distances. En
gnral, on souhaite galement connatre un chemin optimal. Lensemble des chemins
optimaux de d vers chaque sommet atteignable peut se reprsenter par un arbre inverse
(un fils dsigne son pre) dont la racine est d, comme le montre le schma suivant pour
lexemple de la figure 7.1 page 91 :
2
1 1
d
11 4
0 1 5
3 3 5
3 4
2 6
6
Indiquer quels changements sont apporter lalgorithme pour quil construise cet arbre.
77 - Q 8 Question 8. Larticle original dE.W. Dijkstra porte sur la recherche de la distance entre
deux sommets donns quelconques d et s de G. Comment peut-on amnager lalgorithme
fourni en rponse la question 3 pour rsoudre cette variante du problme trait ici ?
Exercice 78. Compression de donnes : lalgorithme de Huffman
CHAPITRE 7. ALGORITHMES GLOUTONS 95
Introduction
Le codage binaire de symboles (typiquement des caractres typographiques) fait lobjet
de normes internationales. Les codes ainsi dfinis sont le plus souvent de longueur fixe
(huit bits pour le code Ascii, seize bits pour le code UTF-16, etc.). Cependant, de par
leur vocation universelle, leur utilisation se rvle en gnral coteuse (en termes de place
pour le codage de fichiers, en temps pour leur transmission). Une amlioration substantielle
peut tre obtenue en utilisant la place un code ad hoc (dpendant uniquement du texte
considr) de longueur variable, qui tient compte de la frquence de chaque caractre dans
le texte considr. Considrons par exemple le texte t suivant, de 17 caractres :
t = elletaimetletmiel
1011111111101100011100110110111110110011110101111
symboles a i m t l e
frquences 1 2 2 3 4 5
mots de code 00 1110 01 110 1111 10
Code/arbre prfixes Un code prfixe est un code dans lequel il nexiste pas deux caractres
dont le mot de code de lun soit le prfixe de celui de lautre. Ceci interdit par exemple
de coder e par 1 et a par 1011. Lavantage dun code prfixe rside dans la phase de
dcodage (passage de la chane de bits la chane de caractres qui lui correspond), dans
la mesure o cette tape peut seffectuer de manire dterministe 1 : ds quun mot de code
c est identifi au dbut de la chane dcoder b, il suffit de le traduire par le caractre
correspondant, de le supprimer de b et de rappliquer le processus sur ce qui reste de b.
Les codes de longueur fixe sont, par construction, prfixes ; le code de la table 7.1 lest
galement.
Un code prfixe peut se reprsenter par un arbre binaire complet (cest--dire sans point
simple, voir section ??, page ??), dont les branches gauches sont tiquetes par des 0 et les
branches droites par des 1, et dont les feuilles sont tiquetes par un caractre. Le code
de la table 7.1 est reprsent par larbre (a) de la figure 7.4.
Prfixe nest cependant pas synonyme doptimal : pour le texte t ci-dessus (et donc pour
le vocabulaire V et les frquences de la table 7.1), le code reprsent par larbre prfixe
(b) de la figure 7.4 est meilleur que celui reprsent par larbre (a) puisquil code le texte
t en 42 bits au lieu de 49. En revanche, on sait (affirmation admise dans la suite) quun
code optimal peut toujours se reprsenter par un code prfixe.
0 1 0 1
0 1 0 1 0 1 0 1
a m e l e
0 1 0 1 0 1
t a i m t
0 1
(a) i l (b)
Fig. 7.4 Deux arbres prfixes pour le vocabulaire V = {a, e, i, l, m, t}. Larbre (a) cor-
respond au code du tableau 7.1, page 95, larbre (b) est un second arbre prfixe.
Le cot L(A) de larbre prfixe A se dfinit par la longueur de la chane de bits rsultant
du codage du texte t par A. Plus prcisment, soit V = {v1 , . . . , vn } (n > 2) un vocabulaire,
f (f V N1 ) la frquence des vi dans le texte t (son nombre doccurrences), et A un
arbre prfixe, X
L(A) = f(v) lA (v), (7.2)
vV
o lA (v) est la longueur du mot de code de v (ou encore la profondeur de la feuille v dans
A) 2 .
Code/arbre de Huffman Un arbre prfixe A reprsente un code de Huffman sil nexiste pas
darbre (prfixe) A0 tel que L(A0 ) < L(A). En gnral, un arbre A de Huffman nest pas
unique : il existe des arbres A0 tels que L(A0 ) = L(A). Pour le couple (V, f) de la table 7.1
1. On ne sintresse ici quaux codes dterministes, cest--dire aux codes pour lesquels le processus
de codage nexige pas de retour arrire.
2. L(A) est aussi appel longueur de chemin pondr de larbre A.
CHAPITRE 7. ALGORITHMES GLOUTONS 97
page 95, et pour un arbre de Huffman A, L(A) = 42. Larbre (b) de la figure 7.4, page 96,
est donc un arbre de Huffman.
Question 1. Vrifier que, pour larbre (b) de la figure 7.4 page 96, on a bien L(b) = 42. 78 - Q 1
Pour le mme couple (V, f), proposer un second arbre de Huffman qui ne soit pas obtenu
par de simples changes de sous-arbres.
Lalgorithme de Huffman
Les arbres produits par lalgorithme de Huffman ne sont pas parfaitement identiques
aux arbres prfixes optimaux tels que dfinis ci-dessus. Ils sont enrichis (renforcs) par
une information redondante, qui facilite leur construction : chaque nud est complt par
la somme des frquences de toutes ses feuilles. En outre, pour ce qui nous concerne, nous
renonons deux informations qui savrent superflues lors de la construction de larbre :
les caractres placs aux feuilles et les tiquettes apposes aux branches. Le schma ci-
dessous montre comment un arbre de Huffman (a) se transforme en un arbre optimal
(c) en passant par un arbre externe (b) (cest--dire un arbre o linformation non
structurelle est porte uniquement par les feuilles).
0 1 17
0 1 0 1 7 10
4 5 4 5 3 4 5 5
0 1 l e 0 1
1 2 2 3 1 2 2 3 1 2 2 3
a i m t
(a) (b) (c)
Arbres de frquences
P = {(/, h, /) | h <
F} {(g, h, d) | g P et d P et h = g.h + d.h}.
Loprande gauche de loprateur permet de nobtenir que des arbres complets. F est
le sac des valeurs prises par les feuilles (le sac des frquences). Larbre (c) ci-dessus est un
arbre de frquences dfini sur le sac J1, 2, 4, 5, 2, 3K.
Le cot L(A) dun arbre de frquence A sur le sac des frquences F se dfinit par :
X
L(A) = k lA (k), (7.3)
k<
F
o lA (k) est la profondeur de la feuille k dans A. Cette dfinition est compatible avec celle
de la formule 7.2 page 96.
98 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Proprit 5 :
Soit G (resp. D) un arbre de frquences dfini sur le sac de frquences FG (resp. FD ),
soit A = (G, G.h + D.h, D) larbre de frquences dfini sur le sac de frquences FG t FD .
A vrifie la proprit suivante :
78 - Q 2 Question 2. Larbre (c) ci-dessus est une arbre de frquences. Vrifier que les deux for-
mules 7.3 et 7.4 fournissent bien le mme cot pour cet arbre. Dmontrer la proprit 5.
Arbres optimaux
Construction dun arbre optimal Dans une premire tape, on prsente la construction dun
arbre optimal de manire intuitive, avant de se proccuper de la construction de lalgo-
rithme. La principale difficult de cette construction rside dans la preuve de loptimalit.
Nous recherchons une solution du type course en tte (voir section ??, page ??).
Deux possibilits soffrent nous pour ce qui regarde la construction de larbre : descen-
dante ou ascendante. Nous optons pour la seconde. Initialement, les diffrentes frquences
sont places dans une liste B, puis, chaque pas ditration, deux frquences sont enraci-
nes en un arbre dont la racine porte la somme des deux frquences. Quelles frquences
choisir dans la liste ? Nous sommes dans une logique gloutonne : nous retenons les deux
frquences les plus faibles. Le processus est ritr. Chaque pas fait dcrotre dune unit
la longueur de la liste : lalgorithme sachve quand la liste ne contient plus quun seul
lment. Cest ce que montrent les six schmas ci-dessous.
17 17 17
7 10 7 10 7 10
3 4 5 5 3 4 5 5 3 4 5 5
2 3 2 3 2 3
(a) 1 2 (b) 1 2 (c) 1 2
CHAPITRE 7. ALGORITHMES GLOUTONS 99
17 17 17
7 10 7 10 7 10
3 4 5 5 3 4 5 5 3 4 5 5
2 3 2 3 2 3
(d) 1 2 (e) 1 2 (f) 1 2
Liste darbres La section prcdente nous conduit dfinir les notions de liste darbres de
frquences et de liste optimale (darbres de frquences).
Question 4. Montrer que si B = hA1 , . . . , Am i est une liste optimale, alors chaque Ai est 78 - Q 4
un arbre optimal.
Construction de lalgorithme de Huffman Lobjectif est dobtenir un arbre optimal sur le sac
des frquences F = F1 t t Fn . Il sagit dun algorithme itratif bas sur une liste optimale
trie (une file de priorit) darbres de frquences. Nous proposons un invariant partir
duquel se construisent les autres constituants de la boucle.
Invariant B = hA1 , . . . , Am i (m 1 .. n) est une liste optimale sur les frquences respectives
F1 , . . . , Fm et F1 t t Fm = F.
Exercice 79. Fusion de fichiers
On considre ici des fichiers squentiels tris sur une cl. Contrairement ce que
suggre lintuition, le cot de la fusion de n fichiers, en nombre de comparaisons
de cls, dpend de lordre dans lequel les fusions deux deux sont ralises. Il
existe un algorithme glouton qui dtermine cet ordre.
Il est conseill de rsoudre lexercice 78 page 94 sur le codage dHuffman, ainsi que
lexercice 86 page 115 sur le tri-fusion, avant daborder celui-ci.
La fusion est une opration qui permet par exemple, partir de deux fichiers squentiels
tris F1 et F2 , de produire un troisime F3 , tri lui aussi :
F1 F2 F3
3 5 10 12 ` ! 1 5 7 ` = 1 3 5 5 7 10 12 `
47 47
121 163
47
33 44
14 114 3
74 116
27 20
21 36
12 47 20 8
41 72
13
(a)
13
8 14 8 12 (c) 10 26
20 20
10 26
7 7
6 6
7 7 (b) 4 6 12 14
3 4 3 4
Pour le schma (b), le cot slve 114, et le traitement se caractrise par le fait que la
fusion se fait systmatiquement sur les deux fichiers les plus petits, indpendamment de
leur origine. Quant au schma (c), qui opre de manire alatoire, son cot revient 163.
CHAPITRE 7. ALGORITHMES GLOUTONS 101
Exercice 80. Coloriage dun graphe avec deux couleurs
Nous tudions ici un algorithme de coloriage dun graphe avec deux couleurs.
Une version plus gnrale (coloriage avec un nombre quelconque de couleurs)
est tudie dans lexercice 58, page 64. Cependant, la prsente version se rvle
beaucoup plus efficace. En outre, elle est en relation troite avec une catgorie de
graphes qui possde de nombreuses applications : les graphes bipartites.
tant donn un graphe non orient connexe G = (N, V) (card(N) > 0), on cherche, quand
cest possible, le colorier en noir et blanc de manire ce que deux sommets adjacents
ne soient jamais dune mme couleur. Un tel graphe est alors dit bicolori. Lalgorithme
que nous allons construire cette fin est une variante de lalgorithme de parcours dun
graphe en largeur dabord dont ltude fait lobjet de la premire section.
Du schma (b) de la figure 7.5 page 103, on peut conclure que la liste ha, b, c, d, e, f, g, hi
correspond un parcours en largeur dabord depuis le sommet a. Il en est de mme
de la liste ha, c, b, d, e, h, f, gi.
Linvariant de boucle Il sagit dun algorithme itratif, glouton de surcrot. Nous nous
limitons rechercher un invariant de boucle, le reste de la construction tant laiss
la charge du lecteur. Imaginons quune partie du travail a t ralise (voir section 3,
page 23), et donc que pour un graphe partiel G0 = (N0 , V 0 ) (sous-graphe de G induit par
N0 , contenant le sommet de dpart s, condition que N0 6= ) on dispose dune liste
associe au parcours en largeur dabord de G0 , depuis s. Traditionnellement, cette liste
est appele CLOSE. Progresser consiste allonger cette liste en y ajoutant un sommet,
absent de CLOSE, le plus proche possible de s.
CHAPITRE 7. ALGORITHMES GLOUTONS 103
a
a
0
b c
b c
1 1
d e
d e
2 2
f h
f h 3 3
g
g
3
(a) (b)
Fig. 7.5 Exemple de graphe. Le schma (a) prsente le graphe qui illustre les exemples
de lnonc. Le schma (b) montre, en traits gras, pour le graphe (a), et pour chaque
sommet, un plus court chemin depuis le sommet a vers tous les autres sommets. Dans
le schma (b), lentier qui accompagne chaque sommet est la distance par rapport au
sommet a.
tons cette hypothse notre invariant. Le lecteur vrifiera quelle est bien instaure par
linitialisation de la boucle. Restera dmontrer quelle est prserve par la progression.
Au total, nous proposons linvariant suivant, constitu de quatre conjoints.
1. CLOSE est une file FIFO dont le contenu reprsente un parcours en largeur dabord
du sous-graphe de G induit par les sommets prsents dans CLOSE.
2. OPEN est une file FIFO des sommets voisins des sommets prsents dans CLOSE.
Lintersection ensembliste de OPEN et de CLOSE est vide.
3. Si la tte de la file OPEN contient un sommet dont la distance s est k, alors tous
les autres lments de OPEN sont une distance de k ou de (k + 1) de s.
4. Dans le graphe G, les sommets prsents, soit dans CLOSE soit dans OPEN, sont
coloris en blanc, les autres sont en gris.
La figure 7.6 page 105, montre les diffrentes tapes du parcours en largeur dabord
du graphe de la figure 7.5 page 103. Dans chaque graphe de la figure, les sommets prsents
dans CLOSE apparaissent en traits gras, ceux de OPEN sont en traits doubles. Les distances
ne sont mentionnes que pour mmoire, lalgorithme de les exploite pas. Commentons par
exemple ltape qui fait passer du schma (e) au schma (f). Dans le schma (e), CLOSE
contient la liste de parcours en largeur dabord du sous-graphe induit par les sommets
a, b, c et d. Le sommet e, tte de la file OPEN, va se dplacer en queue de la file CLOSE.
Quels sont les voisins de e destins rejoindre la liste OPEN ? c et b sont dj dans CLOSE,
ils ne sont pas concerns. g est dj dans OPEN, il nest pas affect. Reste le sommet h,
qui va venir rejoindre la liste OPEN et se colorier en blanc. Notons que lalgorithme fond
sur cet invariant ralise naturellement la course en tte .
Les structures de donnes Deux types de structures de donnes sont utilises dans cet
algorithme. Le premier, les files FIFO, est dcrit la page ??. Le second concerne une
variante colorie des graphes.
La structure de donnes graphe non orient Nous avons besoin de colorier les sommets
dun graphe, de consulter leur couleur et de parcourir la liste des voisins, do les dfinitions
suivantes (lensemble Couleurs est suppos dfini).
procdure ColorierGr (G, s, coul) : opration qui colorie le sommet s de G en utilisant
la couleur coul.
fonction CouleurGr (G, s) rsultat Couleurs : fonction qui dlivre la couleur du sommet
s de G.
procdure OuvrirVoisinsGr (G, s) : opration qui initialise le parcours de la liste des
voisins du sommet s du graphe G.
fonction FinListeVoisinsGr (G, s) rsultat B : fonction qui dlivre vrai, si et seulement
si le parcours dans le graphe G de la liste des voisins de s est termin.
procdure LireVoisinsGr (G, s, s0 ) rsultat N : fonction qui dlivre dans s0 lidentit du
sommet sous la tte de lecture de la liste des voisins de s, puis qui avance dune
position cette tte de lecture.
Pour cette application, le meilleur raffinement, en termes dexpression de lalgorithme
et defficacit, est la reprsentation par liste dadjacence (voir le schma (d) de la figure
?? page ?? pour une reprsentation similaire dans le cas des graphes orients). Le graphe
doit senrichir dun tableau permettant de prendre en compte les couleurs.
CHAPITRE 7. ALGORITHMES GLOUTONS 105
f h f h f h
g g g
f h f h f h
3 3 3
g g g
3 3
f h f h f h
3 3 3 3 3 3
g g g
3 3 3
CLOSE CLOSE CLOSE
a b c d e f a b c d e f g a b c d e f g h
Fig. 7.6 Les diffrentes tapes du parcours en largeur dabord du graphe du schma
(a) de la figure 7.5 page 103. Les sommets encercls en traits gras sont les sommets
de CLOSE, ceux doublement encercls sont les sommets de OPEN. La valeur entire
qui accompagne chaque sommet est la distance connue par rapport au sommet a. Les
deux files OPEN et CLOSE sont reprsentes respectivement au nord-est et au sud des
graphes.
106 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Exercice 81. Carrs magiques dordre impair
Ici, pas de vritable file de priorit ni de file FIFO, pas doptimisation ni dchanges
ou de dplacements dans la dmonstration a posteriori de la correction de lalgo-
rithme : la solution de ce problme propos des carrs magiques appartient-elle
bien la catgorie des algorithmes gloutons ? Le lecteur jugera. Restent une d-
monstration et un exercice de programmation non triviaux.
4 10
3 9 15 3 16 9 22 15
2 8 14 20 20 8 21 14 2
1 7 13 19 25 7 25 13 1 19
6 12 18 24 24 12 5 18 6
11 17 23 11 4 17 10 23
16 22
21
108 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Au regard des autres valeurs (en gris sur le schma de gauche), laissons la parole
C.-G. Bachet : tu les mettras dans les places vides qui restent, usant seulement de
transpositions, cest savoir que ceux den haut tu les mettras en bas, et ceux den bas tu
les porteras en haut ; ceux du ct gauche passeront au ct droit, et ceux du ct droit
iront au ct gauche. Le rsultat de cette dernire phase apparat sur le schma de droite
(en gris les valeurs dplaces). Cest un carr magique.
81 - Q 1 Question 1. Calculer la formule qui fournit Mn , le nombre magique dordre n. Que valent
M5 et M7 ?
81 - Q 2 Question 2. Construire, selon la mthode de Bachet, le carr magique dordre 7.
81 - Q 3 Question 3. Montrer que, pour tout n impair, cette mthode construit bien des carrs
magiques. On pourra se limiter montrer que la somme des valeurs situes sur les deux
diagonales principales du carr, ainsi que celle dune ligne quelconque est gale Mn .
81 - Q 4 Question 4. Construire lalgorithme qui produit un carr magique dordre n selon la
mthode de Bachet.
Pour aborder cet exercice, il faut au pralable avoir rsolu lexercice 2, page 1.
Soit (E, ) un couple tel que E est un ensemble fini de n lments et une relation
dordre partiel sur E. On cherche construire sur E une relation dordre total 6 compatible
avec , cest--dire telle que pour tout couple (a, b) dlments de E : (a b) (a 6 b).
Un lment sans prdcesseur dans (E, ) est appel minimum.
Exemple Dans le cadre dun cursus informatique, on note c1 c2 le fait que le module
denseignement c1 doit prcder le module c2 afin de respecter les prrequis ncessaires
la comprhension de ce dernier. Considrons les six modules suivants :
a b, a c, b d, c b, c d, c e, c f, e d, f e.
a c e
b d f
Ce type de graphe se caractrise par le fait quil est orient et quil ne contient pas de
circuit (en anglais "directed acyclic graph" ou DAG). Dans un tel graphe, un lment sans
prdcesseur (un minimum de lordre partiel) est appel point dentre.
Lexercice a pour objectif de construire un algorithme glouton qui propose un ordre total
compatible avec lordre partiel fourni en entre. Pour lexemple ci-dessus, une solution
consiste proposer lordre total a, c, b, f, e, d.
Question 1. Montrer quun DAG non vide, priv de lun quelconque de ses points den- 82 - Q 1
tre, est encore un DAG.
Exercice 83. Encore le photocopieur
a
b
c
0 1 2 3 4 5 6 7 8
cba
cab
bca
bac
acb
abc
0 1 2 3 4 5 6 7 8
Le bnfice obtenu par exemple pour la permutation abc se calcule de la manire sui-
vante :
Question 1. Complter le calcul pour les cinq autres permutations. En dduire que la 83 - Q 1
stratgie gloutonne consistant ordonner les tches selon les chances croissantes nest
pas optimale.
112 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Voici un bien trange exercice glouton : une file dentre sans file, une file de sor-
tie en perptuelle modification, une optimalit qui ne veut pas dire son nom. De
surcrot, on constate une surprenante similitude avec le tri par insertion simple.
Tous les ingrdients sont runis pour piquer la curiosit du lecteur.
Soit G = (N, V) un graphe orient sans boucle (on pose card(N) = n, et n > 1). G est
appel graphe de tournoi (ou plus simplement tournoi) si, pour tout couple de sommets
u et v (u 6= v), lun des deux arcs (u, v) ou (v, u) existe (soit (u, v) V, soit (v, u) V).
Lobjectif de lexercice est de construire un algorithme glouton qui recherche un chemin
hamiltonien dans un tournoi.
On rappelle (voir chapitre 1) quun chemin lmentaire dans un graphe orient est un
chemin qui ne passe pas deux fois par le mme sommet, et quun chemin hamiltonien
est un chemin lmentaire qui passe par tous les sommets. Le graphe du schma (a) de la
figure 7.7 page 112 est un tournoi, tandis que le schma (b) montre un chemin hamiltonien.
1 1
2 3 2 3
4 6 4 6
5 5
(a) (b)
Fig. 7.7 Le schma (a) montre un tournoi de six sommets. Le schma (b) met en
vidence, dans le graphe (a), le chemin hamiltonien h3, 6, 4, 2, 1, 5i.
84 - Q 1 Question 1. Cette premire question concerne un lemme qui est utilis pour dmontrer
lexistence dun chemin hamiltonien dans un tournoi. Soit une chane binaire de longueur
CHAPITRE 7. ALGORITHMES GLOUTONS 113
n > 2, qui commence par un 0 et finit par un 1. Montrer quelle comporte au moins une
fois la sous-chane 01.
Question 2. Montrer, par rcurrence, que tout tournoi possde un chemin hamiltonien. 84 - Q 2
Exemple Dans lexemple illustr ci-dessous, les douze intervalles sont pingls par un
ensemble T = {1.5, 3.5, 6.5, 9.5, 11.5, 13.5, 16.5, 19.5} de huit points.
I1
I2
I3
I4
I5
I6
I7
I8
I9
I10
I11
I12
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
On saperoit facilement que T nest pas minimal. Par exemple, le point dabscisse 1.5
pingle les intervalles I1 et I2 , qui sont galement pingls par le point dabscisse 3.5.
Puisquil npingle pas dautres intervalles, le premier point de T est donc inutile.
(L. F. Cline.)
8.1 Exercices
Exercice 86. Le tri-fusion
Le lecteur est invit reprendre les lments de lnonc prsents partir de la page ??.
Question 1. On considre que les sous-tableaux T [p..q] et T [q+1..r] sont tris. Le tableau 86 - Q 1
T tant suppos global, crire lalgorithme Fusion(p, q, r) qui accepte les indices p, q et r
en entre et fusionne les tranches T [p .. q] et T [q + 1 .. r] en un tableau tri T [p .. r].
Exercice 87. Recherches dichotomique, trichotomique et par interpolation
116 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
87 - Q 1 Question 1. On recherche une solution DpR fonde sur une division en deux sous-tableaux
de tailles approximativement gales. Parmi les nombreuses versions possibles, on se focalise
sur la version dite de Bottenbruch qui ne teste lgalit entre v et un lment du tableau
que si le tableau en question ne possde quun seul lment. Construire cette solution et
en dduire le modle de division puis le code.
Dans les trois questions qui suivent, on sintresse la complexit exacte au pire des deux
algorithmes dvelopps ci-dessus, complexit exprime en nombre de comparaisons entre
v et un lment du tableau. Lobjectif annonc est de montrer que, dans le pire des cas, la
solution trichotomique nest jamais meilleure que la solution dichotomique. Pour ce faire,
on procde de la manire suivante. On cherche dterminer C2 (n), complexit au pire
de la recherche dichotomique. On fait de mme pour C3 (n) et la recherche trichotomique,
avant de comparer les fonctions C2 (n) et C3 (n).
1. Le lecteur insatisfait par cette affirmation pourra sinspirer de la question 4 pour la dmontrer.
CHAPITRE 8. DIVISER POUR RGNER 117
Au premier abord, cet exercice nest quun exemple de plus sur la recherche di-
chotomique (voir par exemple les exercices 87, page 115, et 89, page 118). On
sattend donc obtenir un algorithme dont la complexit est en (log2 (n)). Ce-
pendant, et cest loriginalit de cet exercice, lexploitation fine de sa spcification
conduit distinguer diffrents cas de figure. La seconde question se caractrise
par une valuation extrmement simple de la complexit moyenne.
Soit T [1..n] (n N1 ) un tableau, tri par ordre croissant, dentiers relatifs tous distincts.
On dsire construire lopration fonction PointFixe rsultat B qui permet de savoir sil
118 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
existe au moins un point fixe dans T , cest--dire sil existe un indice p tel que T [p] = p
(on ne recherche pas la valeur de p).
88 - Q 2 Question 2. On considre prsent que T est un tableau, tri par ordre croissant, den-
tiers naturels positifs tous distincts. Construire la nouvelle version de lopration fonc-
tion PointFixe rsultat B , fournir son code et sa complexit moyenne.
Cet exercice est lun des nombreux exemples dapplication du principe de la re-
cherche dichotomique, qui se dcline de manire itrative ou rcursive. On se
limite ici la solution rcursive.
Par dfinition, un tableau dentiers T [deb .. fin] (deb .. fin 6= ) prsente un pic en
position p si et seulement si : i) T est injectif (toutes les valeurs de T sont diffrentes),
ii) T [deb .. p] est tri par ordre croissant, iii) T [p .. fin] est tri par ordre dcroissant.
89 - Q 1 Question 1. Construire une solution DpR au problme de la recherche du pic T [p] dans
un tel tableau. On ne demande pas le code de lopration.
Le principal atout de lexercice est de montrer que lon peut effectuer une re-
cherche dans un tableau presque tri (dans le sens de tableau cyclique
dfini ci-dessous) avec (asymptotiquement parlant) une efficacit comparable
celle de la recherche dichotomique dans un tableau tri.
i 1 2 3 4 5 6 7
T [i] 9 11 12 13 2 5 8
CHAPITRE 8. DIVISER POUR RGNER 119
est tri cyclique, sa frontire f est en position 4. Remarquons que, puisque les doublons
sont interdits, dans un tableau tri cyclique la frontire est unique et quun tableau tri
non vide est un tableau tri cyclique.
Plus formellement, en gnralisant aux tableaux sans doublons dfinis sur un intervalle
i .. s, on dfinit le prdicat EstTriCycl(T [i .. s]) par :
EstTri(T [i .. f]) et
EstTri(T [f + 1 .. s]) et
EstTriCycl(T [i .. s]) = i 6 s et f f i .. s et
(j, k) (j i .. f et
k f + 1 .. s T [j] > T [k])
Proprit 6 :
Si EstTriCycl(T [i..s]), alors llment suivant (circulairement) la frontire f dans T [i..s]
est le plus petit lment de T [i .. s]. Plus formellement, si f est la frontire, T [((f i + 1)
mod (s i + 1)) + i] = min(codom(T [i .. s])).
Proprit 7 :
Soit T [i .. s] (i < s) un tableau cyclique tri et m i .. s 1. Les sous-tableaux T [i .. m]
et T [m + 1 .. s] sont des tableaux cycliques tris et au moins lun des deux est tri.
Proprit 8 :
Soit T [i .. s] (i < s) un tableau cyclique tri et m i .. s 1. Si T [m .. s] est tri, alors le
plus petit lment de T [i .. s] appartient au sous-tableau T [i .. m], sinon il appartient au
sous-tableau T [m + 1 .. s].
Proprit 9 :
Soit T [i .. s] (i 6 s) un tableau cyclique tri ; T [i .. s] est tri si et seulement si T [i] 6 T [s].
Il sagit de lun des seuls exercices de louvrage qui traite dune structure de
donnes inductive (les arbres binaires). Comme souvent dans cette situation, la
forme des raisonnements qui y sont dvelopps sinspire de celle de la structure
de donnes. Cest le principal enseignement retenir ici.
On dispose dun arbre binaire plein (voir chapitre 1) de poids n (n > 0) : tous les nuds
ont zro ou deux fils, jamais un seul fils, et toutes les feuilles sont la mme profondeur.
n est de la forme 2p 1 et p 1 est la hauteur de larbre. chaque nud est affecte une
valeur entire diffrente. Un nud est un minimum local sil est (du point de vue de sa
valeur) plus petit que son pre et que ses deux fils (sil en a). Dans les exemples ci-dessous,
les minima locaux sont encercls.
21 29 20
10 31 22 31 22 31
11 13 36 33 11 13 36 33 25 13 36 33
91 - Q 1 Question 1. Montrer quil y a toujours (au moins) un minimum local dans un tel arbre.
91 - Q 2 Question 2. Construire lopration fonction MinLoc(a) rsultat Z qui dlivre lun des
minima locaux (on vise une complexit en O(log2 (n))). Donner le modle de division.
Fournir le code lopration ainsi quune squence dappel. Lopration a-t-elle bien la
complexit souhaite ?
Trois enseignements peuvent tre tirs de cet exercice qui traite darbres binaires.
Le premier concerne lamlioration de la complexit qui rsulte dun renforcement
dune hypothse dinduction. On y trouve ici un nouvel exemple. Le second porte
sur la forme des raisonnements qui y sont dvelopps. Elle peut avec profit sins-
pirer de celle de la structure de donnes. Le troisime enseignement se rapporte
lusage qui est fait de la structure darbre pour valuer la complexit. Lorsque
le traitement raliser sur chaque nud est en (1) (cest le cas ici), il suffit
quand cela est possible de dnombrer les nuds rencontrs lors du calcul.
Les principales dfinitions ainsi que les lments de vocabulaire les plus frquents portant
sur les arbres binaires sont regroups la section ?? page ??. Dans la suite, on considre
CHAPITRE 8. DIVISER POUR RGNER 121
que le type ab pour les arbres binaires finis non tiquets se dfinit par :
Un lment de ab est donc soit / (qui reprsente larbre vide) soit un couple (l, r) dont
chaque constituant est un arbre binaire (ab).
Question 1. Montrer par un exemple que, dans un arbre non vide, un chemin dont la 92 - Q 1
longueur est le diamtre de larbre ne passe pas ncessairement par la racine de larbre.
Question 2. La hauteur h dun arbre binaire nest pas dfinie pour un arbre vide. Ce- 92 - Q 2
pendant, dans un souci de concision, on accepte la dfinition inductive suivante :
h(/) = 1
h((l, r)) = max({h(l), h(r)}) + 1
En prenant comme base le nombre de nuds rencontrs lors du calcul, quelle est la com-
plexit Ch de la fonction associe pour un arbre de poids n (cest--dire de n nuds) ?
Dfinir de faon analogue le diamtre d dun arbre binaire. Fournir le code de lopration
fonction d(a) rsultat N {1} qui calcule le diamtre de larbre binaire a. Pour ce qui
concerne la complexit, les arbres filiformes constituent les cas les plus dfavorables. En
effet, chaque arc de larbre fait alors partie du diamtre. Montrer que dans le cas dun
arbre filiforme de poids n la complexit Cd , value en nombre de nuds rencontrs, est
en (n2 ).
Question 3. La version prcdente du calcul du diamtre peut tre amliore sur le plan 92 - Q 3
de la complexit en utilisant une heuristique classique. Celle-ci consiste, plutt que de
calculer une valeur ncessaire un instant donn, supposer cette valeur disponible.
On renforce ainsi lhypothse dinduction la base de la construction. Appliquer cette
technique pour la construction dune nouvelle version du calcul du diamtre et montrer
(en supposant la hauteur disponible) quen dnombrant les nuds rencontrs on obtient
une solution en (n).
Cet exercice sapparente un tri dans la mesure o lon recherche une bijection
dote de certaines proprits (un tri est une permutation, donc une bijection). Il
nest donc pas surprenant que lon retrouve ici les procds algorithmiques et les
techniques de calcul de complexit proches de ceux utiliss dans les problmes de
tri.
CHAPITRE 8. DIVISER POUR RGNER 123
Exercice 95. La fausse pice division en trois et quatre tas
Le but de lexercice est de trouver la pice fausse avec le moins de peses possible dans
le cas le plus dfavorable (au pire). Deux stratgies sont tudies.
C3 (1) = 0 l m
n
C3 (n) = 1 + C3 n > 1.
3
2. Notons que si n est pair et k = bn/2c, C3 (n 2k) = C3 (0), mais la pice est alors dans lun des
deux tas de k pices. Nous retombons alors dans le premier cas. Du point de vue des calculs, pour
contourner cet cueil, nous admettons dans la suite que C3 (0) = 0.
CHAPITRE 8. DIVISER POUR RGNER 125
Cet exercice porte certes sur lapplication du principe DpR, mais le lecteur est
invit traiter pralablement le problme selon des mthodes itratives. Cest
loccasion de rappeler que les meilleurs algorithmes de tri ne sont pas toujours
au pire en n log2 (n) : ils peuvent par exemple tre linaires ! Cela dpend de la
prcondition.
Cet nonc propose dtudier une version DpR dun problme galement trait
par programmation dynamique lexercice 116, page 190. Cette version constitue
un exemple simple damlioration de lefficacit des solutions trouves un pro-
blme donn, amliorations obtenues tout dabord par une application du principe
DpR puis par un renforcement appropri de la postcondition. Sur le plan de la
complexit temporelle, le rsultat est comparable la solution par programmation
dynamique.
Exercice 98. Le sous-tableau de somme maximale
i 1 2 3 4 5 6 7 8
T [i] 3. 1. 4. 3. 1. 3. 0.5 1.
la valeur maximale prise par la somme est atteinte pour le sous-tableau T [4 .. 6] et vaut 5.
En revanche, dans le tableau suivant :
i 1 2 3 4 5 6 7 8
T [i] 5. 4. 4. 3. 1. 8. 0.5 15.
nimporte quel sous-tableau de longueur nulle (comme par exemple T [4 .. 3]) fournit la
solution. La somme maximale vaut alors 0.0.
CHAPITRE 8. DIVISER POUR RGNER 127
Question 1. Une solution nave, dans laquelle on considre explicitement tous les sous- 98 - Q 1
tableaux, est possible. Elle est cependant coteuse en termes de complexit temporelle
(avec laddition comme opration lmentaire). On recherche une solution de type DpR qui
se prsente sous la forme SousTabMax1 (deb, fin; sm : modif ) (o deb et fin paramtres
dentre sont les bornes du tableau considr et sm paramtre de sortie la somme
maximale atteinte si lon considre tous les sous-tableaux de T [deb .. fin]).
a) Caractriser le cas lmentaire.
b) Formuler lhypothse dinduction la base du cas gnral. Dcrire le traitement
raliser pour rassembler les deux solutions partielles obtenues. En dduire le modle
de division puis le code de la procdure SousTabMax1.
c) Quelle est la complexit de cette solution ?
Il sagit de lun des seuls exercices pour lesquels le problme initial sclate en
quatre sous-problmes. De plus, ltape de base est vide, ainsi que ltape de
rassemblement. Lquation fournissant la complexit fait partie du rpertoire qui
accompagne le thorme matre (voir page ??). Cependant, lnonc exige ici de
rsoudre exactement cette quation.
128 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
On considre un chiquier n n tel que n = 2m et m > 0, ainsi que les quatre types de
triminos ci-aprs composs chacun dun carr 2 2 auquel une cellule a t enleve :
Exemple On dispose dun chiquier de huit lignes et de huit colonnes, le trou est en (2, 6) :
deuxime ligne, sixime colonne.
1 2 3 4 5 6 7 8
1
2
3
4
5
6
7
8
Le but de lexercice est de concevoir une solution de type DpR au problme pos.
99 - Q 1 Question 1. Dmontrer par rcurrence que pour m entier (avec m > 0), lexpression
(22m 1) est divisible par 3. Conclusion ?
99 - Q 2 Question 2. Construire par induction lopration procdure Pavage(l, c, n, lt, ct) qui
pave un chiquier de n n cellules (n est une puissance de 2), dont le coin nord-ouest
est situ la ligne l et la colonne c et pour lequel le trou est situ la ligne lt et la
colonne ct.
99 - Q 3 Question 3. Fournir le modle de division qui sapplique.
99 - Q 4 Question 4. Donner le code de la procdure Pavage. Lopration procdure Po-
ser (l, c, td) (qui place un trimino de type td (td (a) .. (d)) de sorte que sa cellule
manquante soit situe en (l, c)) est suppose disponible. tablir que la complexit exacte
de cette opration est gale ((n2 1)/3) si on prend comme opration lmentaire la
pose dun trimino.
CHAPITRE 8. DIVISER POUR RGNER 129
Outre son intrt intrinsque li lexploitation de lordre sur les lignes et les
colonnes dune matrice, cet exercice met en vidence lincidence du caractre
strict ou non de cet ordre sur le problme rsoudre.
On considre un tableau deux dimensions de valeurs entires positives telles que les
valeurs dune mme ligne et celles dune mme colonne sont ordonnes, non forcment
strictement. Un tel tableau est appel btire.
Exemple Le tableau ci-dessous est une btire quatre lignes et cinq colonnes.
2 14 25 30 69
3 15 28 30 81
7 15 32 43 100
20 28 36 58 101
Il est noter que tout sous-tableau dune btire est lui-mme une btire, et cette
proprit est utilise implicitement dans la suite.
On tudie la recherche dune valeur v fixe dans une btire B. Plus prcisment, si v est
prsent, on souhaite connatre les coordonnes dune de ses occurrences, sinon on dlivre
(0, 0).
Question 1. Dcrire le principe de cette premire stratgie en termes de mthode DpR. 100 - Q 1
Question 2. Quelle est sa classe de complexit au pire (en termes de nombre de compa- 100 - Q 2
raisons), si m est le nombre de lignes et n le nombre de colonnes de B ? Peut-on lamliorer
en utilisant le fait que les lignes et les colonnes sont tries ?
Question 3. Montrer que si la valeur recherche v est telle que v > x, on peut liminer 100 - Q 3
une partie ( prciser) de la btire pour poursuivre la recherche. Prciser ce quil est
possible de faire quand v < y.
100 - Q 5 Question 5. tablir lordre de complexit au pire de cette mthode (en termes de nombre
de comparaisons).
100 - Q 6 Question 6. Comment adapter cette stratgie au cas dune btire quelconque ?
100 - Q 7 Question 7. Que convient-il de faire selon que z est gal, suprieur, ou infrieur v ?
100 - Q 9 Question 9. crire la procdure rcursive correspondante, qui a pour en-tte proc-
dure Btire3(lDeb, cFin; lig, col : modif) et est appele du programme principal par
Btire3(1, n, l, c), o les paramtres de sortie l (resp. c) reoivent lindice de ligne (resp.
de colonne) dune case de la btire B[1 .. m, 1 .. n] contenant la valeur v recherche, ou
(0, 0) si celle-ci napparat pas dans la btire.
100 - Q 10 Question 10. tablir la classe de complexit au pire de cette dernire mthode (en termes
de nombre de comparaisons) et conclure sur la dmarche adopter pour rsoudre le pro-
blme de la recherche dune valeur donne dans une btire.
100 - Q 11 Question 11. On suppose maintenant que la btire B[1 .. m, 1 .. n] contient des entiers
relatifs, et lon veut compter le nombre de zros. Lapproche dveloppe prcdemment
pour la recherche de la prsence dune valeur fonde sur llimination de lignes ou colonnes
peut-elle servir de base la rsolution de ce problme ? Quen serait-il si lordre tait strict
dans les lignes et colonnes ?
Cet exercice est un nouvel exemple de problme qui montre que lapplication du
principe DpR nest pas systmatiquement un gage damlioration de la complexit
dun algorithme. Il confirme galement que renforcer la postcondition de la spci-
fication (cest--dire chercher en faire plus que demand initialement) peut
parfois tre la cl de lamlioration recherche.
CHAPITRE 8. DIVISER POUR RGNER 131
Le but de cet exercice est de construire un algorithme rapide pour compter le nombre
dinversions prsentes dans une liste sans doublon. Pour fixer les ides, on travaille sur des
permutations des n (n > 1) premiers entiers positifs, donc sur lintervalle 1 .. n. Une liste
de valeurs sans doublons est range dans le tableau T [1 .. n], et lon dit que les nombres i
et j, tels que 1 6 i < j 6 n, forment une inversion si T [i] > T [j].
Par exemple, pour n = 8, le nombre dinversions de la liste suivante vaut 13 :
i 1 2 3 4 5 6 7 8
T [i] 3 5 2 8 6 4 1 7
crites en tant que liste des couples dindices (i, j) tels que i < j et T [i] > T [j], les inversions
sont les suivantes :
h(1, 3), (1, 7), (2, 3), (2, 6), (2, 7), (3, 7), (4, 5), (4, 6), (4, 7), (4, 8), (5, 6), (5, 7), (6, 7)i
Question 1. Construire un algorithme itratif naf qui calcule le nombre dinversions dans 101 - Q 1
une liste sans doublons. Donner lordre de grandeur de complexit de cet algorithme (les
oprations lmentaires sont les conditions des boucles et des alternatives).
i 1 2 3 4 5 6 7 8
T [i] 2 3 5 8 1 4 6 7
1 j mil k n
T
o T [1 .. mil] et T [mil + 1 .. n] sont tris par ordre croissant, si T [j] > T [k], alors, pour
tout l j .. mil, T [l] > T [k]. Que peut-on en conclure ?
132 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
b) En dduire un algorithme itratif qui, dans ce cas, compte les inversions en un temps
linaire.
101 - Q 5 Question 5. Peut-on adapter les algorithmes de la question prcdente dans le cas o n
nest pas une puissance de 2 ?
Exercice 102. Le dessin du skyline
Lune des stratgies classiques pour amliorer lefficacit des algorithmes consiste
changer la structure de donnes sous-jacente. Dans cette exercice, on dbute
le dveloppement sur la base dune structure de donnes nave avant dopti-
miser celle-ci en liminant une forme de redondance. Cet exercice montre que
lamlioration attendue par le recours une dmarche DpR nest pas toujours au
rendez-vous.
On sintresse au dessin du skyline dun centre-ville construit avec des immeubles rec-
tangulaires, au bord de la mer. Le skyline (en pointills dans les schmas ci-dessous) est
la ligne qui spare le ciel des immeubles, quand on se place assez loin en mer et que lon
regarde en direction de la ville. La partie (a) de la figure 8.1, page 132, montre la pro-
jection deux dimensions dun centre-ville compos de trois immeubles, et la partie (b)
donne le skyline correspondant.
4 4
3 3
2 2
1 1
0 0
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
(a) (b)
Fig. 8.1 Trois immeubles : (a) par projection (b) le skyline correspondant
On suppose que toutes les dimensions sont entires et que les immeubles sont construits
entre les abscisses 0 et n (n > 1). Lajout dun quatrime immeuble se concrtise comme
le montrent les parties (a) et (b) de la figure 8.2, page 133.
CHAPITRE 8. DIVISER POUR RGNER 133
4 4
3 3
2 2
1 1
0 0
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
(a) (b)
Fig. 8.2 Ajout dun immeuble : (a) le nouvel immeuble (b) le nouveau skyline
i 1 2 3 4 5 6 7 8
S[i] 0 1 3 1 1 0 2 2
On choisit de reprsenter un immeuble par le skyline quil aurait sil tait tout seul.
La reprsentation du troisime immeuble de la figure 8.1, page 132, (limmeuble le plus
droite) est donc :
i 1 2 3 4 5 6 7 8
I3 [i] 0 0 0 0 0 0 2 2
il est possible de redfinir une reprsentation dans laquelle seules les coordonnes de lex-
trmit des vecteurs verticaux sont conserves. On obtient une liste de couples laquelle
on ajoute le couple (n + 1, 0) en guise de sentinelle et complte si ncessaire par des
couples (0, 0) jusqu la position n + 1. Le tout est enregistr dans un tableau dfini sur
lintervalle 0 .. n + 1. Ainsi, pour lexemple ci-dessus, la nouvelle reprsentation est :
T [0 .. n + 1] = [(0, 0), (1, 1), (2, 3), (3, 1), (4, 4), (7, 2), (8, 0), (9, 0), (0, 0), (0, 0)]
La liste de couples est trie sur la premire coordonne, qui constitue un identifiant.
Cette nouvelle reprsentation prserve toute linformation tout en garantissant labsence de
redondance. Dans la suite, cette reprsentation est caractrise par le prdicat EstSkyLine.
102 - Q 5 Question 5. Fournir la reprsentation du skyline de la figure 8.1, page 132.
Un algorithme itratif
102 - Q 6 Question 6. Une solution itrative prenant en compte cette nouvelle reprsentation peut
sinspirer de la rponse la question 1. Les boucles externes sont identiques dans les deux
cas. En revanche, le traitement qui ralise la fusion de deux skylines est indit. Deux
solutions peuvent tre envisages. La premire opre une fusion grossire prsentant des
redondances qui doivent tre limines dans une phase ultrieure. Cette solution est assez
facile construire, mais elle est assez coteuse et peu lgante. La seconde solution consiste
obtenir le rsultat en un seul passage sur les deux skylines. Cest celle qui fait lobjet
de la question et dont on demande la construction sous la forme dune procdure au profil
suivant : FusionSkyLines(S1, S2; F : modif ) (S1 et S2 sont les deux skylines dont on
veut obtenir la fusion, et F le skyline rsultant).
Suggestion La principale difficult de lalgorithme rside dans lidentification de la cas-
cade de cas et de sous-cas qui se prsente dans la progression de la boucle. On conseille
au lecteur de bien sparer deux phases, celle de la mise en vidence des diffrents cas et
celle de loptimisation (factorisation des cas identiques).
102 - Q 7 Question 7. En se fondant sur le nombre de conditions values, quelle est, en fonction
de m, la complexit au pire de la procdure FusionSkyLines ?
102 - Q 8 Question 8. En dduire une solution itrative utilisant la procdure FusionSkyLines.
Quelle est lordre de grandeur de complexit au pire (en nombre de conditions values)
de ce calcul itratif en fonction de m ?
CHAPITRE 8. DIVISER POUR RGNER 135
Exercice 103. La suite de Fibonacci
1. constantes
2. Maxi N1 et Maxi = . . . et n 0 .. Maxi et n = . . .
3. variables
4. M (2 .. Maxi) N
5. dbut
6. M (2 .. Maxi) {0} ;
7. crire(Fibo1(n))
8. fin
Cette solution est au pire en (n), au mieux en (1). En outre, elle saccompagne dune
prcondition restrictive sur la valeur de n. Peut-on amliorer la complexit au pire ? Cest
ce que lon va tenter de faire travers deux mthodes de type DpR.
Face une suite rcurrente linaire dordre 2 telle que Fn , il est souvent intressant de se
ramener une suite rcurrente linaire dordre 1. Le dveloppement y gagne en simplicit.
En revanche, si la suite initiale est une suite scalaire, la transformation conduit une suite
vectorielle. Cest ce principe que lon va appliquer ci-dessous. On dveloppe tout dabord
un algorithme pour la version vectorielle, avant de lutiliser pour obtenir la version scalaire
de Fn .
103 - Q 1 Question 1. On va montrer que la suite de Fibonacci peut se transformer en une suite
Fn1
vectorielle dordre 1. Pour ce faire, on note Vn = un vecteur colonne deux
Fn
lments et F une matrice carre (2 2). On demande de calculer la matrice F telle que :
F0
1
V1 = =
F1 1
Vn = F Vn1 n > 1.
F
Question 9. En notant Wn le vecteur n1 , en dduire que W2n et W2n+1 se calculent 103 - Q 9
Fn
en fonction de Fn et de Fn1 .
Question 10. On recherche une procdure FiboW(n; u, v : modif ) de type DpR qui, pour 103 - Q 10
u
n donn, dlivre Wn = . Construire cette procdure par application du principe DpR.
v
En dduire le modle de division qui sapplique. Fournir le code de la procdure FiboW.
Montrer comment la procdure FiboW peut tre utilise pour dfinir la fonction Fibo3(n)
qui dlivre Fn , pour n N.
Exercice 104. lment majoritaire (le retour)
Dj abord lexercice 40 page 32, cet exercice passe en revue trois solutions
DpR au problme de la recherche dun lment majoritaire dans un sac. Si la
premire solution est classique, les deux autres font appel une technique plus
originale. En effet, dans cet ouvrage et dans ce chapitre en particulier, on a fr-
quemment exploit lheuristique prouve qui consiste renforcer la postcondition
afin dobtenir une bonne efficacit temporelle ; ici au contraire, on affaiblit la post-
condition. Dun ct, cette dernire heuristique permet dobtenir un algorithme
simple (mais ne rpondant que partiellement la spcification), de lautre elle
oblige adjoindre un algorithme complmentaire dont le but est de sassurer que
le rsultat obtenu dans la premire tape est (ou non) conforme la spcification
initiale. Cette technique peut avec profit enrichir le bagage de tout dveloppeur.
La dernire solution sapparente celle dveloppe lexercice 40 page 32.
138 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
On considre un sac S de n lments (n > 1), dentiers strictement positifs. S est dit
majoritaire sil existe un entier x tel que :
jnk
mult(x, S) > +1
2
x est alors appel lment majoritaire de S et est unique. Le problme pos est celui de la
recherche dun lment majoritaire dans S. La dtermination dun candidat ayant obtenu
la majorit absolue lors dun scrutin ou la conception dalgorithmes tolrants aux fautes
sont des applications possibles de ce problme.
Dans les trois solutions ci-dessous, nous raffinons le sac S par un tableau dentiers
positifs T [1 .. n] (n > 1). Il est difficile dimaginer que lon puisse identifier, sil existe,
llment majoritaire, sans connatre sa multiplicit. Cest pourquoi on renforce demble
la postcondition, en transformant la recherche de llment majoritaire en la recherche du
couple (x, nbx) (x tant llment majoritaire et nbx sa multiplicit).
Exemple Dans le tableau ci-dessous, le couple (1, 8) calcul pour lintervalle 1..13 apparat
en bas de la figure, entre les indices 6 et 7. Il signifie que 1 est lment majoritaire et que
sa multiplicit est 8. Ce rsultat est obtenu en rassemblant (dune manire qui reste
prciser) le couple (0, 0) obtenu pour lintervalle 1 .. 6 et le couple (1, 5) obtenu pour
lintervalle 7 .. 13.
1 2 3 4 5 6 7 8 9 10 11 12 13
2 1 1 3 1 2 3 1 1 1 1 2 1
2, 1 1, 1 1, 1 3, 1 1,1 2, 1 3, 1 1, 1 1, 1 1, 1 1, 1 2, 1 1, 1
(1, 2) (0, 0) (1, 2) (1, 2) (0, 0)
(1, 2) (0, 0) (1, 2) (1, 3)
(0, 0) (1, 5)
(1, 8)
Question 2. Quelle est la classe de complexit au pire de cette solution ? Comparer avec 104 - Q 2
la solution itrative de lexercice 40, page 32.
Dfinition On dira que le couple (x, mx) est candidat majoritaire (CM) dans le tableau T
(constitu de t lments positifs) si et seulement si :
1. mx est un majorant du nombre doccurrences de x dans T : mult(x, T ) 6 mx,
2. mx est strictement suprieur la demi-longueur par dfaut de T : mx > bt/2c,
3. pour tout y diffrent de x, le nombre doccurrences de y dans T est infrieur ou gal
t mx : y (y N1 et y 6= x mult(y, T ) 6 t mx).
Par abus de langage, on dira aussi que x est CM dans T sil existe (au moins) un mx tel
que le couple (x, mx) est CM dans T .
Exemples
a) Dans T = [1, 1, 1, 6, 6], le couple (1, 3) est CM. En effet :
1. 3 est un majorant du nombre doccurrences de 1 dans T ,
5
2. b c < 3 6 5,
2
3. 6 nest prsent que deux fois et 2 6 5 3.
b) Dans le tableau T = [1, 1, 5, 5], le couple (1, 3) nest pas CM. En effet :
a) 3 est un majorant du nombre doccurrences de 1 dans T ,
4
b) b c < 3 6 4,
2
c) mais 5 est prsent deux fois et 2 66 4 3.
c) En revanche, le couple (1, 3) est CM dans T = [1, 1, 4, 5] mais T nest pas majoritaire.
d) Les couples (1, 3) et (1, 4) sont tous deux CM dans le tableau T = [1, 1, 1, 6, 5].
Construire cette procdure par un raisonnement de type induction de partition (voir sec-
tion ??, page ??). Donner le modle de division utilis ainsi que le code de la procdure
CandMaj1. Quelle est sa complexit ?
104 - Q 4 Question 4. Quel traitement complmentaire doit-on faire pour obtenir le rsultat at-
tendu (la valeur de llment majoritaire sil en existe un) ? Quelle est alors la complexit
du traitement global ?
Proprit 10 :
Si x est lment majoritaire de T [1 .. n] et que T [1 .. i] nest pas majoritaire, alors x est
lment majoritaire de T [i + 1 .. n].
104 - Q 7 Question 7. Donner le principe dune solution de type DpR fonde sur la proprit ci-
dessus. Donner le modle de division utilis, le(s) problme(s) lmentaire(s) et la com-
plexit globale.
Exercice 105. Les deux points les plus proches dans un plan
Question 1. En considrant le nombre de conditions values, quel est lordre de com- 105 - Q 1
plexit de lalgorithme naf de calcul de d ?
Dans la suite, n est une puissance de 2. Lopration fonction
PlusProches1(S) rsultat R+ dlivre la distance entre les voisins les plus proches
dans lensemble des points S. Dans le contexte dappel suivant :
1. constantes
2. Coord = {x, y | x R et y R} et E Coord et E = {. . .}
3. dbut
4. crire(PlusProches1(E))
5. fin
la fonction PlusProches1 ci-dessous fournit une premire bauche :
1. fonction PlusProches1(S) rsultat R+ pr
2. S Coord et k k N1 et card(S) = 2k et S1 S et S2 S et
9. dbut
10. rsultat (a, b)
11. fin
12. sinon
13. d1 PlusProches1(S1 ) ;
14. d2 PlusProches1(S2 ) ;
15. d min({d1 , d2 }) ;
16. Rassembler1(. . .) ;
17. rsultat . . .
18. fin si
19. fin
La quantification existentielle prcise que le nombre dlments de S est une puissance
de 2. La valeur d1 (resp. d2 ) est la plus petite distance trouve dans le sous-ensemble S1
(resp. S2 ).
105 - Q 2 Question 2. Donner les cinq points cls de la construction inductive de la fonction Plus-
Proches1 (il sagit ici de faire du reverse engineering ).
105 - Q 3 Question 3. Quel est lordre de complexit de la fonction PlusProches1 si la procdure
Rassembler1 est en (n2 ) ? en (n log2 (n)) ? en (n) ?
dg
dd
Bg
dg
dg
Bd
La valeur dg (resp. dd) est la meilleure distance trouve dans la moiti de gauche (resp.
de droite). La valeur dg est la plus petite des deux valeurs dg et dd (cest le d de la ligne
11 du code de PlusProches2 ).
Posons T [mil] = (mx , my ). On appelle Bg (resp. Bd ) lensemble des points situs dans la
bande verticale dlimite par les droites dquation x = mx d et x = mx (resp. x = mx et
x = mx + d). Par consquent, si deux points p1 et p2 sont tels que p1 T [i .. mil] et p2
T [mil + 1 .. s] et (p1 , p2 ) 6 d alors p1 Bg et p2 Bd .
Question 4. Montrer que toute fentre carre ouverte sur lune des deux bandes Bg ou Bd 105 - Q 4
contient au plus quatre points :
Bg Bd
d
144 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Il est facile den conclure (puisque S est un ensemble de points) quil existe au plus six
points sur un rectangle de longueur 2d et de hauteur d stalant sur toute la largeur de la
bande :
Bg Bd
2d
105 - Q 5 Question 5. Dans lhypothse o les points appartenant aux bandes Bg et Bd sont en-
registrs dans un tableau Y, que faut-il imposer ce tableau pour que la recherche dun
meilleur voisin pour Y[j] se fasse dans un sous-tableau de Y, de taille borne, dbutant en
Y[j + 1] ? Donner un majorant cette borne.
105 - Q 7 Question 7. La solution prcdente nest pas entirement satisfaisante sur le plan de la
complexit : on aurait espr une complexit en (n log2 (n)). Cet objectif nest pas
atteint. Peut-on identifier lorigine du surcot observ ? Dans un souci de meilleure effica-
cit, on propose de renforcer lhypothse dinduction de la manire suivante : lopration
PlusProches3 dlivre (non seulement) la distance entre les voisins les plus proches dans
T [i..s] et (mais aussi) une version R[1..si+1] de T [i..s] trie sur les ordonnes croissantes.
Construire lopration procdure PlusProches3(i, s; d, R : modif ) . Complexit ?
Exercice 106. Distance entre squences : lalgorithme de Hirschberg
Dans sa version la plus simple, lalgorithme dHirschberg recherche lune des plus longues
sous-squences communes (plssc) entre deux chanes. Il est fond sur une technique DpR,
mais ltape de division utilise le principe de programmation dynamique. Lavantage pro-
clam de cette mthode est le gain de place par rapport aux mthodes fondes uniquement
sur le principe de la programmation dynamique. D.S. Hirschberg layant imagin dans les
annes 70, cet argument avait alors plus de force que de nos jours (encore que si lon traite
des squences biologiques de milliers de lettres, si on lexploite pour faire la correction de
dictes ou pour des recherches de similarit sur le Web, il prsente encore une certaine
utilit). Mais cest surtout un exemple extraordinaire, notre connaissance unique, de
lassociation de deux techniques si diffrentes. Enfin, cet algorithme sappuie sur un tho-
rme doptimalit qui montre, sil en tait besoin, quil est souvent ncessaire de disposer
dun bagage minimal en mathmatiques discrtes pour tre mme de construire mtho-
diquement des applications informatiques. Compte tenu de son objectif visant optimiser
la ressource mmoire, cet exercice est lun des seuls o le souci dune bonne complexit
spatiale conditionne le dveloppement.
Soit x et y deux chanes sur un alphabet . Soit m et n les longueurs respectives de
x et de y (m = |x| et n = |y|). On recherche une sous-squence commune x et y de
longueur maximale. Lensemble des plus longues sous-squences communes de x et y est
not PLSSC(x, y). Cet ensemble nest jamais vide, puisque la chane vide est une sous-
squence de toute chane. Lensemble des sous-squences communes x et y est not
SSC(x, y). Dans la suite de cet exercice, est implicitement lalphabet latin de 26 lettres :
= {a,b, . . ., z}.
Notations
Si c (resp. c[i .. s]) est une chane, on note c (resp. c[i .. s]) la chane miroir. Si C est
un ensemble de chanes, on note C lensemble des chanes miroirs de C. On remarque
que c = c et que PLSSC(x, y) = PLSSC(x, y).
Pour un ensemble PLSSC(x, y) donn, tous ses lments sont, par dfinition, de mme
longueur, que lon note lg(PLSSC(x, y)).
c1 c2 PLSSC(x, y).
On peut ensuite appliquer le mme principe sur les couples de chanes (x1 , y1 ) et (x2 , y2 ).
La principale difficult de lalgorithme rside dans la dcouverte de sous-chanes y1 et y2
appropries.
146 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Exemple Pour u = attentat, u1 = atte, u2 = ntat et v = tante, la table 8.1 page 146 rper-
torie les ensembles PLSSC(u1 , v1 ) et PLSSC(u2 , v2 ) pour tous les couples (v1 , v2 ) possibles
(v1 v2 = v). Lavant-dernire colonne fournit toutes les concatnations possibles entre les
lments de PLSSC(u1 , v1 ) et ceux de PLSSC(u2 , v2 ). Les plus longues sous-squences
sont obtenues pour les couples (v1 , v2 ) = (tante, ), (v1 , v2 ) = (ta, nte), (v1 , v2 ) = (t,
ante) et (v1 , v2 ) = (, tante). On note que lensemble des plus longues sous-squences
apparaissant dans la colonne Concat. de la table 8.1 (celles de longueur 3) est gal
lensemble PLSSC(u, v). Faisons temporairement lhypothse quil en est toujours ainsi :
le rsultat ne dpend pas de la position laquelle on coupe x. La confirmation est une
consquence du thorme de la page 148.
u1 = atte u2 = ntat
v1 (1) lg1 () v2 (2) lg2 () Concat. (3)
tante {ate, tte} 3 {} 0 {ate, tte} 3
tant {at, tt} 2 e {} 0 {at, tt} 2
tan {a, t} 1 te {t} 1 {at, tt} 2
ta {a, t} 1 nte {nt} 2 {ant, tnt} 3
t {t} 1 ante {at, nt} 2 {tat, tnt} 3
{} 0 tante {tat} 3 {tat} 3
De manire symtrique, lalgorithme dual qui traite les chanes miroirs fournit, pour chaque
prfixe x0 de x et y0 de y, la longueur de la plssc x0 et y0 (voir schma (b) de la figure 8.3,
page 147). Dans ce cas de figure, la colonne de gauche, lue de haut en bas, fournit la
longueur de la plssc entre x et tous les prfixes de y. Le coin sud-ouest du tableau (gris
sur le schma) est la longueur de la plssc de x et de y (cette longueur est bien sr la mme
que celle trouve entre x et y). La colonne de la position j est note Pj , elle se dfinit par :
On suppose prsent que lon coupe arbitrairement x en deux parties x1 (x1 = x[1..j]) et
x2 (x2 = x[j+1..m]) (x = x1 x2 ) et y en y1 (y1 = y[1..i]) et y2 (y2 = y[i+1..n]) (y = y1 y2 ),
avant de calculer le tableau avant pour le couple (x1 , y1 ) et le tableau arrire pour
CHAPITRE 8. DIVISER POUR RGNER 147
x
1 m
x[1] x[m]
y[n] n
n y[n]
y P
P y
y[1] 1
1 y[1]
x[1] x[m] 1 m
x
(a) (b)
Fig. 8.3 Recherche de la longueur de la plus longue sous-squence commune par
programmation dynamique. Schma (a) : tableau P pour les chanes x et y. Schma
(b) : tableau P pour les chanes x et y.
le couple (x2 , y2 ). Cest ce que montre le schma (a) de la figure 8.4, page 147. Soit
c1 PLSSC(x1 , y1 ) et c2 PLSSC(x2 , y2 ). On a donc |c1 | = Pj [i] et |c2 | = Pj+1
[n i]. Si on
pose c = c1 c2 on a |c| = Pj [i] + Pj+1
[n i]. Rechercher la plssc de x et de y est quivalent
rechercher la plus grande valeur prise par lexpression Pj [i] + Pj+1
[n i] lorsque i varie
entre 0 et n. Cest ce que suggre la partie (b) de la figure 8.4, page 147.
Un algorithme DpR fond sur ces seules considrations aurait une complexit spatiale en
(mn), ce qui nest pas compatible avec nos ambitions. Lintroduction du chapitre consa-
cr la programmation dynamique, page ??, fournit une solution puisquelle montre quil
est possible de linariser lalgorithme WFlg de faon obtenir une version (dnom-
me WFLgAvant ) dont la complexit spatiale est en (n). La partie (c) de la figure 8.4,
page 147, montre comment la linarisation permet de rduire lespace utilis.
x2 x2
Pj+1
0
n
P y2
..
y P y .. .
y1
P .
P
n
0
Pj
x1 x1
(a) (b) (c)
Fig. 8.4 Principe de lalgorithme dHirschberg
Exemple Dans lexemple de la figure 8.5, page 149, les colonnes grises four-
nissent les vecteurs P4 et P5 pour les appels WFLgAvant(atte,tante, P4 ) et de
WFLgArrire(ntat,tante, P5 ). Les autres colonnes ne sont prsentes que pour la clart
de lexpos.
148 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Pour le cas de la figure 8.5, page 149, M4 vaut 3 : cest la plus grande valeur trouve parmi
les sommes P4 [0]+P5 [5], . . . , P4 [5]+P5 [0] ; cest donc galement la valeur de lg(PLSSC(x, y)).
Cette valeur est atteinte pour i = 0, i = 1, i = 2, i = 5.
alors
Mj = Pm [n]
pour j 0 .. m.
Autrement dit, en se reportant lexemple de la figure 8.5, page 149, si pour une certaine
colonne j donne, Mj est la plus grande valeur obtenue en ajoutant les valeurs Pj [i] et
Pj+1 [n i] (i 0 .. n), alors j est un candidat possible pour trouver un bon dcoupage de
y. Ce thorme est la cl de vote de lalgorithme dHirschberg.
106 - Q 3 Question 3. Que penser de la suggestion suivante : on peut calculer le vecteur Pj+1
en
utilisant lalgorithme WFLgAvant appliqu aux suffixes x2 et y2 ?
0 1 2 3 4 4 3 2 1 0
P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 v
a t t e n t a t u
0 0 0 0 0 0
5 e 0 1 2 2 3 0 0 0 0 0 e 1
4 t 0 1 2 2 2 1 1 1 1 0 t 2
3 n 0 1 1 1 1 2 1 1 1 0 n 3
2 a 0 1 1 1 1 2 2 2 1 0 a 4
1 t 0 0 1 1 1 3 3 2 1 0 t 5
0 0 0 0 0 0
v a t t e n t a t
u P0 P1 P2 P3 P4 P5 P6 P7 P8 P9
0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
a t t e n t a t
t a n t e
1 2 3 4 5
Cette structure peut se matrialiser par la liste trie des couples de la relation trace :
h(2, 1), (5, 3), (8, 4)i. La recherche dune trace oblige disposer des indices absolus des
symboles dans les chanes. Pour ce faire, on dcide didentifier les chanes x et y et leurs
sous-chanes par lindice de leurs extrmits (respectivement ix, sx, iy et sy ci-dessous).
Disposer dune trace entre deux chanes permet dobtenir facilement la plus longue sous-
squence commune, ainsi que lalignement correspondant, la trace ddition (cest--dire
la liste optimale des oprations ddition permettant de transformer la premire chane en
la seconde), le cot de la transformation ou encore la distance entre les deux chanes (voir
exercice 137, page 224).
Lobjectif de cette question est dadapter lalgorithme dHirschberg de faon calcu-
ler une trace entre deux chanes. On se focalise tout dabord sur la partie inductive de
lalgorithme et plus particulirement sur ltape de rassemblement. Cette fois, il ne sagit
plus simplement de concatner les squences optimales de gauche et de droite, mais si la
situation lexige de prendre en considration les coordonnes dun symbole commun x
et y. Contrairement la version dveloppe la question 5, il faut se donner les moyens
de comparer le symbole qui se trouve au milieu de x au symbole de y situ sur la ligne
qui spare y en deux parties. Lindice q sparateur de y tant suppos disponible, trois
situations sont distinguer (voir figure 8.6, page 150).
Le premier cas (voir partie (a) de la figure 8.6) est celui o lindice sparateur q est gal
iy 1. Dans ce cas, la trace est rechercher uniquement sur le rectangle allant du coin
(mil + 1, iy) au coin (sx, sy) (le rectangle en gris fonc de la figure). Ce cas se retrouve
la figure 8.5 si lon choisit comme indice sparateur q = 0. Le second cas (voir partie
150 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
ix sx ix sx
sy sy
iy iy
q
mil mil
(a) q = iy 1 (b) x[mil] = y[q]
ix sx
sy
iy
mil
(c) x[mil] 6= y[q]
(b) de la figure 8.6) est celui o x[mil] = y[q]. Le couple (mil, q) doit tre insr dans la
trace, et la recherche doit se poursuivre sur les deux rectangles griss. Ce cas se retrouve
la figure 8.5, page 149, si lon choisit q = 5. Enfin, le troisime cas (voir partie (c) de la
figure 8.6) est celui o x[mil] 6= y[q]. Le symbole x[mil] nest align avec aucun lment
de la chane y[ix .. q] : on peut liminer la colonne mil pour poursuivre la recherche sur
les deux rectangles griss. Ce cas correspond, sur la figure 8.5, soit q = 1, soit q = 2.
106 - Q 6 Question 6. Construire la procdure HirschTrace (pour simplifier, on pourra saffranchir
des contraintes lies la complexit spatiale). Fournir le modle de division qui sapplique,
ainsi que le code de la procdure. Pour ce faire, on suppose disponible le type T race, liste de
couples de naturels, dot de loprateur de concatnation et du constructeur ct(a, b)
(resp. tv ) qui cre une trace constitue du couple (a, b) (resp. une trace vide).
CHAPITRE 8. DIVISER POUR RGNER 151
Exercice 107. Lenveloppe convexe
Lintrt de cet exercice rside principalement dans les trois points suivants :
i) le choix de la structure de donnes pour reprsenter une enveloppe convexe,
qui conditionne largement lefficacit du rsultat, ii) la phase de rassemblement
qui se met en uvre par une itration non triviale, et iii) le renforcement de
lhypothse dinduction (objet de la quatrime question), qui simplifie la premire
solution et la rend plus efficace.
Lobjectif de lexercice est de rechercher lenveloppe convexe dun ensemble E fini non
vide de n points du plan. Lenveloppe convexe de E est un polygone convexe P tel que
tous les sommets de P appartiennent E et tous les autres points de E sont situs
lintrieur du polygone. Dans la suite, on considre que trois points de E ne sont jamais
aligns 5 .
M1
M2
Fig. 8.7 (a) Lensemble de points E (b) Lenveloppe convexe de E (c) Lenveloppe
oriente de E
Principe de la solution
On suppose (cas de base) que lon sait trouver directement lenveloppe convexe dun
ensemble dun et de deux points. Le cas inductif consiste diviser lensemble des points
en deux sous-ensembles gauche et droit ayant approximativement le mme cardinal. Tous
les points du sous-ensemble gauche (resp. droit) ont des abscisses strictement infrieures
(resp. strictement suprieures) tous les points du sous-ensemble droit (resp. gauche).
Pour parvenir une solution efficace, cette contrainte exige que lensemble E soit raffin
par un tableau T tri sur les abscisses croissantes. Elle a aussi une incidence sur lalgorithme
5. Dans le cas contraire, il suffirait (si lon peut dire) de ne conserver que les deux points les plus
loigns pour obtenir lenveloppe recherche.
152 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
de sparation, puisque deux points de mme abscisse doivent appartenir au mme sous-
ensemble 6 .
Si, selon lhypothse dinduction, on sait calculer lenveloppe convexe des sous-ensembles
gauche et droit, il reste phase de rassemblement rechercher les deux segments tangents
chacune des deux enveloppes afin de fusionner le tout en une seule enveloppe (voir
figure 8.8, page 153).
Cette dfinition prsuppose quun sommet nappartient qu une seule enveloppe, ce qui
se trouve tre toujours le cas par la suite. La partie (c) de la figure 8.7, page 151, montre
d et M2,
M1 d deux enveloppes cl de la mme enveloppe convexe. Dans la suite, le contexte
permet de dterminer sil est question dune enveloppe simple ou dune enveloppe cl.
6. Cest pour cette raison que le cas de base doit prendre en considration le cas dun ensemble de
deux points. En effet, dans le cas contraire, on ne pourrait exclure que couper un ensemble de deux
points donne dune part lensemble vide et dautre part lensemble en question.
CHAPITRE 8. DIVISER POUR RGNER 153
GN GN
DN DN
DS DS
GS GS
(a) (b)
(resp. GS DS ) soit une tangente infrieure (resp. suprieure) 7 commune aux deux
enveloppes.
Par ailleurs, lensemble point des points du plan est suppos dfini par lidentificateur
point qui est tel que point = {x, y | x R et y R}.
0 Q
P
v v
M Q
0 M
P M
v v
v
0
P v Q
det(
v , v0 ) > 0 det(
v , v0 ) = 0 det(
v , v0 ) < 0
La notion de dterminant permet de savoir si un point est ou non situ lextrieur dun
polygone convexe. Plus intressant pour nous, tout en vitant des calculs explicites dangles
(coteux et sujets aux erreurs darrondis), elle permet galement de dcider si dun point
extrieur on voit ou non un ct donn dune enveloppe convexe. Le ct PQ dune
enveloppe est visible du point M si det(MP, MQ) < 0, et non visible si det(MP, MQ) > 0.
Cest ce quillustre la figure 8.10, page 154. Le cas det(MP, MQ) = 0 ne peut se prsenter
7. La tangente dun polygone convexe est une droite qui a un et un seul point commun avec la surface
dlimite par le polygone.
154 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
que si les trois points sont aligns, ce qui par hypothse est exclu ici, ou si au moins
deux dentre eux sont confondus. Ce dernier cas est prendre en compte dans la fonction
TangenteSup de la question 2.
A A
B B
F F
C C
M M
E E
D D
(a) (b)
Fig. 8.10 Visibilit. Schma (a) : BC et CD sont visibles depuis M. det(MB, MC) <
0 et det(MC, MD) < 0 Schma (b) : AB et DE ne sont pas visibles depuis M.
det(MA, MB) > 0 et det(MD, ME) > 0
La partie (a) de la figure 8.11, page 155, rpertorie les dix ponts existant entre les
deux enveloppes. Un segment tel que BI nest pas un pont : il est en partie lintrieur
de lenveloppe gauche. Trois ponts (en gras) peuvent en gnral tre distingus : DI, qui
rejoint le point le plus droite de lenveloppe gauche et le point le plus gauche de
lenveloppe droite. Cest le seul pont qui puisse tre identifi directement partir de la
connaissance des enveloppes. AG (resp. CJ) est un pont particulier la tangente suprieure
(resp. la tangente infrieure) commune aux deux enveloppes qui se caractrise par le fait
quaucun point de E nest au-dessus (resp. au-dessous) de la droite support du segment.
Ces tangentes revtent une grande importance : ce sont elles quil faut prendre en compte
pour, lors de la fusion, obtenir une vritable enveloppe (voir figure 8.8, page 153).
La partie (b) de la figure 8.11, page 155, met laccent sur les points dintersection entre
une verticale sparatrice et les diffrents ponts. Ces points en nombre fini sont utiles
dans la suite pour dmontrer la terminaison de lalgorithme de fusion.
107 - Q 1 Question 1. La recherche des tangentes suprieure et infrieure se fait partir du seul
pont identifiable directement, celui qui lie le sommet le plus droite de lenveloppe de
gauche et le sommet le plus gauche de lenveloppe de droite, en progressant de pont en
pont. Les coordonnes de ces deux sommets sont connues suite la coupure. Mais pour
progresser, il faut aussi avoir accs aux nuds successeurs et prdcesseurs. Il faut donc
connatre leurs situations au sein des enveloppes. Lopration fonction Recherche(b e, v)
rsultat EnvConv prend en compte lenveloppe b e (enveloppe dsigne par le point e), le
CHAPITRE 8. DIVISER POUR RGNER 155
G G
A F A F
B E B E
H H
K K
D I
D I
C C
J J
(a) (b)
point dabscisse v, et dlivre la mme enveloppe mais cette fois dsigne par v. Construire
cette fonction sur la base dune recherche squentielle. Que peut-on dire de sa complexit
en nombre de conditions values ?
Question 2. On cherche prsent construire une version itrative de lopration fonc- 107 - Q 2
tion TangenteSup(b b i) rsultat EnvConv EnvConv qui, partir de deux enveloppes
g, d,
b et d (spares verticalement) et de lindice i dsignant dans T le point le plus gauche
g b
de d,
b dlivre le couple (L, b tel que le segment LR est la tangente suprieure de g
b R) b et de d.
b
Que peut-on dire de la complexit de cette fonction en nombre de conditions values ?
Question 4. Bien que nintervenant pas sur la complexit, les appels la fonction Re- 107 - Q 4
cherche peuvent se rvler pnalisants. Fournir le principe dune solution dans laquelle
cette fonction devient inutile.
Exercice 108. La sous-squence bgue
Deux solutions de type DpR sont dveloppes ici. La principale originalit de cet
exercice rside dans la seconde solution, o ltape dclatement est plus ing-
nieuse que la simple division par deux pratique en gnral. Le bnfice en retour
est une meilleure efficacit.
156 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Soit un alphabet de cardinal s (s > 1). Soit x une squence sur de longueur n
(n > s) et y = a1 . . . am une squence sur de longueur m (m > s). Si ai reprsente la
i
chane a . . a}, on note y la squence ai1 . . . aim . Dans la suite, on suppose, sans perte de
| .{z
i fois
gnralit, que x et y utilisent tous les symboles de .
i
On cherche la valeur la plus grande de i, note Maxi(x, y) pour laquelle y est une sous-
squence de x. i est aussi appel degr de bgaiement de y dans x. Rappelons que les
symboles dune sous-squence ne sont pas forcment contigus dans la squence.
Par exemple, pour = {a,b,c}, y = abc et x = cbbabaacbbabbcbbacccbac, on
4
trouve un degr de bgaiement Maxi(x, y) de 4 (y = aaaabbbbcccc), puisque x =
5
a aa abb bb c cc c
cbba ba cbba cb ac bac et que y nest pas une sous-squence de x.
108 - Q 1 Question 1. Construire une version itrative de lopration fonction Scan(x, y, i) rsul-
i
tat B qui retourne vrai si et seulement si y est une sous-squence de x. En choisissant
les expressions conditionnelles comme opration lmentaire, montrer que sa complexit
asymptotique est en O(n + m).
108 - Q 3 Question 3. On dispose prsent dun intervalle fini sur lequel Maxi(x, y) prend sa
valeur. Diffrentes techniques peuvent tre appliques afin de dterminer cette valeur. La
recherche squentielle en est une. La recherche dichotomique se prte galement bien la
rsolution de ce problme. Cest la solution laquelle on sintresse dans cette question.
Dcrire le raisonnement DpR permettant de construire la fonction Maxi0(x, y, bi, bs) qui
dlivre la valeur de Maxi(x, y) sur lintervalle bi .. bs (bi .. bs 0 .. bn/mc). Quel est le
modle de division qui sapplique ? Quel est, en nombre de conditions values, lordre
de grandeur de la complexit de cette solution ? On pourra limiter les calculs au cas o
bn/mc est une puissance de 2.
S(x, y) = 1 , 2 , 3
1
z }| { z }|2 { z }|3 {
x = k a1b1 a2 a3 a4 a5 a6b2 k c1 c2a7 k c3 c4 c5 c6 c7 k
| {z } | {z } | {z }
2b 1a 5c
S(x, y) = 1 , 2 , 3
1 2
z }| { z }| { z }|3 {
x = k a1b1 k a2 a3 a4 a5 a6 b2 c1 c2a7 k c3 c4 c5 c6 c7 k
| {z } | {z } | {z }
1b 6a 5c
En revanche, dans les deux cas X = 1. Concernant la segmentation induite (par S(x, y))
de Impair(x) par rapport y, le premier exemple donne :
1
z }| { z }|2 { z }|3 {
x = k a1b1 a2 a3 a4 a5 a6b2 k c1 c2a7 k c3 c4 c5 c6 c7 k
S(Impair(x), y) = 01 , 02 , 03
01 0 0
z }|
{ z}|{
2 3
z }| {
Impair(x) = k a1 1 a3 a5 k c1 7 k 3 c5 c7 k
b a c
La relation qui lie X et I ne dpend pas bien sr des segmentations choisies. Montrer que,
dans le cas o X est pair, 2I = X, et que dans le cas o X est impair on a soit 2I + 1 = X,
soit 2I 1 = X. En dduire que
et que les trois valeurs de lintervalle peuvent tre atteintes par Maxi(x, y).
158 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
108 - Q 6 Question 6. Sur la base du principe DpR, construire lopration fonction Maxi1(x, y)
rsultat N fonde sur les deux questions prcdentes. Quel est le modle de division qui
sapplique ? Fournir le code de lopration Maxi1. Dmontrer la terminaison de lalgo-
rithme. Que peut-on dire de la complexit de lalgorithme ? Comparer les deux solutions
DpR du point de vue de la complexit.
Exercice 109. La transforme de Fourier rapide (FFT)
cet algorithme de transforme de Fourier rapide sont associs bien des su-
perlatifs. Utile, il lest sans aucun doute au plus haut point. Il suffit pour sen
convaincre dnumrer quelques-unes de ses applications : reconnaissance de pa-
role, filtrage, analyse de spectre, produit de polynmes, compression de donnes,
etc. Efficace, lalgorithme lest assurment, telle enseigne quhistoriquement il
faut y rechercher lune des cls de la prminence des ordinateurs sur les calcula-
teurs analogiques et indirectement, de la rvolution numrique que lon connat.
Intelligent, fond certes sur le principe DpR, mais de manire trs ingnieuse.
Bref, un algorithme remarquable, un excellent exercice. Terminons par une ci-
tation de C. Villani (Mdaille Fields 2010, dans [60], p. 35) : linfluence de
Joseph Fourier est maintenant bien plus importante que celle de Hugo lui-mme ;
son "grand pome mathmatique" (comme disait lord Kelvin), enseign dans tous
les pays du monde, est utilis chaque jour par des milliards dhumains qui ne sen
rendent mme pas compte.
X
n1
2i jk
X[k] = x[j] e n (8.3)
j=0
109 - Q 1 Question 1. partir de cette dfinition, construire un algorithme qui calcule la transfor-
me de Fourier discrte X dun vecteur x de n nombres complexes. Quelle est sa complexit
en nombre dexponentiations et en nombre de multiplications ?
Dans la suite, par hypothse, n est toujours une puissance de 2. Une racine ne complexe
de lunit est un nombre complexe wn tel que wn n = 1. Il existe n racines n de lunit qui
e
2i 2i
sont, pour k 0 .. n 1 : e n k . La racine particulire obtenue pour k = 1, e n est
appele racine principale (ou n-racine principale sil est ncessaire de prciser). Elle est
note Wn . Les n racines de lunit sont des puissances de Wn : Wn0 , Wn1 , Wn2 , . . . , Wnn1 .
La figure 8.12 page 159, reprsente, dans le plan complexe, les racines ne de lunit pour
n = 8. Ces racines sont situes des positions quidistantes sur le cercle complexe unit.
W86 = i
W85 W87
W84 = 1 W80 = 1
W83 W81
W82 = i
2. Pour tout n > 0 pair et pour tout k > 0, le carr de la n-racine principale leve
la puissance k est gal la (n/2)-racine principale leve la puissance k :
X[k]
= dfinition 8.3 et dfinition de Wn
X
n1
x[j] Wnjk
j=0
= coupure de x par le milieu
n 1
X
2 X
n1
x[j] Wnjk + x[j] Wnjk .
j=0 j= n
2
160 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Cependant (le lecteur est invit le vrifier), cette dmarche conduit une impasse pour
ce qui concerne lamlioration de la complexit. Il faut rechercher une autre stratgie de
coupure. Une solution consiste placer dun ct les lments dindices pairs de x et
de lautre ceux dindices impairs (utilis en indice, i signifie impair et ne doit pas tre
confondu avec lunit imaginaire galement not i). Pour ce faire, on pose :
(8.6)
xp = x[0], x[2], , x[2p], , x[n 2] ,
(8.7)
xi = x[1], x[3], , x[2p + 1], , x[n 1] .
Pour k 0 .. n/2 1, nous avons donc xp [k] = x[2k] et xi [k] = x[2k + 1]. La transforme de
Fourier Xp de xp (pour k 0 .. n/2 1) donne lieu au calcul suivant :
Xp [k]
= dfinition 8.3
n 1
X
2
2i
n jk
xp [j] e 2
j=0
2i
= dfinition de Wn (Wn = e n ) et substitution
n 1
X
2
xp [j] W jk
n . (8.8)
2
j=0
Pour les indices impairs et toujours pour k 0..n/2 1, nous avons une formule similaire :
n 1
X
2
Xi [k] = xi [j] W jk
n . (8.9)
2
j=0
X[k]
= dfinition 8.3
X
n1
2i
n jk
x[j] e
j=0
2i
= dfinition de Wn (Wn = e n )
X
n1
x[j] Wnjk
j=0
= sparation entre indices pairs et impairs
n 1 n 1
X
2 X
2
= proprit 8.5
n 1 n 1
X
2 X
2
xp [j] W jk k
n + Wn xi [j] W jk
n . (8.10)
2 2
j=0 j=0
La formule 8.10 est dfinie pour k 0..n1. Elle est a fortiori valable pour k 0..n/21.
Nous pouvons alors poursuivre le dveloppement en nous limitant ce dernier intervalle
et en faisant intervenir les formules 8.8 et 8.9, page 160 :
n 1 n 1
X
2
jk
X
2
ce qui dfinit par DpR les n/2 premiers lments du vecteur X. Il faut prsent complter
le calcul sur lintervalle n/2 .. n 1 afin dobtenir les n/2 derniers lments de X sous une
forme analogue En repartant de la formule 8.10, pour k 0 .. n/2 1, nous avons :
h ni
X k+
2 n
= expression 8.10 pour la substitution k k +
2
n 1 n 1
X
2
2(k+ n )j k+ n
X
2
2(k+ n
2 )j
xp [j] Wn 2 + Wn 2 xi [j] Wn
j=0 j=0
k+ n n
= proprit 8.4 : Wn 2
= Wnk Wn2 = Wnk
n 1 n 1
X
2
2(k+ n
2X 2(k+ n
2 )j 2 )j
xp [j] Wn Wnk xi [j] Wn
j=0 j=0
2(k+ n
2 )j
= dfinition de Wnn : Wn = (Wnn )j Wn2kj = 1 Wn2kj = (Wnkj )2
n 1 n 1
X
2 X
2
xp [j] W kj k
n Wn xi [j] W kj
n
2 2
j=0 j=0
n
= formules 8.8 et 8.9, page 160, pour k 0 .. 1
2
Xp [k] Wnk Xi [k].
Pour rsumer, on a montr que, dans lhypothse (dinduction) o lon sait calculer
Xp [k] et Xi [k] partir des deux demi-vecteurs xp et xi , on sait composer les deux rsultats
partiels pour obtenir la transforme de Fourier X de x, en appliquant les deux formules :
109 - Q 2 Question 2. On suppose disponible la fonction Pair (m, A) (resp. Impair (m, A)) qui, pour
un vecteur A de longueur m paire, dlivre le sous-vecteur de A contenant les lments
dindices pairs (resp. dindices impairs). Fournir le modle de division qui sapplique pour
le calcul de la DFT par DpR. En dduire la fonction DFT(n, x) permettant de calculer la
DFT X dun vecteur x, x (0 .. n 1) C, pour n puissance de 2. En supposant que les
oprations lmentaires sont la multiplication et lexponentiation, quelle est la complexit
de cette opration ? Conclusion ?
Exercice 110. Le produit de polynmes
Cet exercice montre que lapplication du principe DpR ne conduit pas systmati-
quement une solution plus efficace quune solution itrative. Mais son principal
intrt rside dans une application remarquable de la transforme de Fourier ra-
pide (voir exercice 109, page 158).
On cherche multiplier deux polynmes sur Z : A(x) = an1 xn1 + an2 xn1 + +
a1 x + a0 et B(x) = bm1 xm1 + bm2 xm2 + + b1 x + b0 . Ainsi par exemple, en
sinspirant de la prsentation traditionnelle pour la multiplication dentiers, on a :
2x4 3x3 + 4x + 5
2
2x + 3
X
m+n2 X
C(x) = ck xk avec ck = ai bj . (8.11)
k=0 i+j=k
i0..n1
j0..m1
Une solution nave pour calculer les coefficients ck de C(x) consiste utiliser les for-
mules quantifies ci-dessus. Si lopration lmentaire pour mesurer la complexit est la
multiplication des coefficients ai et bj , le cot de cette mthode est en (n m). Peut-on
amliorer cette situation ? Cest lobjectif que lon se fixe, en utilisant pour ce faire la
technique DpR. Dans la suite, on appelle taille dun polynme le nombre de monmes
quil contient.
110 - Q 1 Question 1. Dans cette question, on suppose dune part que tous les coefficients sont diff-
rents de 0 et dautre part que n = m = 2k (k > 0). Comment le principe DpR se dcline-t-il
pour aboutir au calcul de C(x) ? Quels sont les critres retenir pour obtenir une bonne
reprsentation dun polynme ? En dduire le modle de division qui sapplique. Fournir le
CHAPITRE 8. DIVISER POUR RGNER 163
a d + b c = (a + b)(c + d) (a c) (b d),
Question 3. Que faire quand les coefficients peuvent tre nuls et quand n et m sont 110 - Q 3
quelconques ? Lefficacit de la variante prcdente est-elle conserve ?
Question 4. (Pour aborder cette question il est ncessaire davoir au pralable rpondu 110 - Q 4
lexercice 109, page 158, sur la transforme de Fourier.) Une solution plus efficace existe.
Elle se prsente comme une application directe de la transforme de Fourier. Elle est fonde
sur un paradigme scientifique classique consistant effectuer un changement despace de
reprsentation afin de simplifier les traitements 8 . Son principe se base sur lexistence de
deux types de reprsentation pour les polynmes la reprsentation traditionnelle par
coefficients (utilise ci-dessus) et la reprsentation par chantillons et effectuer le
produit dans la reprsentation la plus efficace (la reprsentation par chantillons), prcd
et suivi des conversions ncessaires. La reprsentation par coefficients considre le vecteur
des coefficients. La reprsentation par chantillons consiste quant elle, pour un polynme
P(x) de degr infrieur ou gal (n 1), valuer P(x) sur (au moins) n abscisses xi
diffrentes.
D(x) = [(0, 1), (1, 3), (2, 5)] et E(x) = [(0, 2), (1, 3), (2, 4)]
Le rsultat R(x) = D(x) E(x) est obtenu en multipliant les ordonnes respectives, soit :
On est donc face au problme suivant. tant donns deux polynmes reprsents par
leurs coefficients, la meilleure solution que lon connat pour obtenir leur produit est en
8. Un exemple classique est celui de la multiplication de nombres effectue par laddition de leurs
logarithmes.
164 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
(nlog2 (3) ) (voir par exemple [53]). En revanche, avec une reprsentation par chantillons,
la solution est en (n). Est-il possible de faire mieux que (nlog2 (3) ), en ralisant un
changement de reprsentation ? Si cest le cas, le schma du traitement se prsente comme
le montre la figure 8.13.
D(x)
par coefficients
reprsentation
R(x)
E(x)
valuation
interprtation
par chantillons
reprsentation
E(x)
R(x)
D(x)
02
0 1 a 2
12 1 1 b = 9
22 2 1 c 20
dont la solution est a = 2, b = 5 et c = 2. Cependant, l aussi la complexit est leve (de
lordre de (n2 )). En apparence, on se trouve face une voie sans issue. Pourtant. . .
Une porte de sortie : la transforme de Fourier On a vu que le choix des abscisses dchantillon-
nage est arbitraire. Il est en particulier possible dvaluer chacun des deux polynmes
multiplier sur les racines 2ne complexes de lunit. Cest justement ce que ralise la trans-
forme de Fourier, de manire efficace si lon utilise lalgorithme DFT trait lexercice 109,
page 158, (complexit de lorde de (n log2 (n))). Pour ce qui est de la transformation
rciproque, linterpolation, il faut alors utiliser la DFT inverse, qui calcule x partir de
CHAPITRE 8. DIVISER POUR RGNER 165
1 X
n1
2i
x[k] = X[j] e n jk
n j=0
Strictement parlant, cet exercice ne comporte aucune question de type DpR. Ce-
pendant, le rsoudre compltement exige dexploiter les rponses fournies aux
questions de lexercice 110, page 162, (sur la multiplication de polynmes) et in-
directement celles de lexercice sur le calcul de la transforme de Fourier (exer-
cice 109, page 158). Ces deux exercices doivent donc tre traits avant daborder
celui-ci.
o
u est le vecteur unit de la droite D, support des deux charges, et r =
M1 M2 est
12
le vecteur qui relie le premier corps au deuxime. 0 est une constante.
Considrons prsent un ensemble de n charges {q1 , q2 , . . . , qn } disposes intervalles
rguliers (de longueur d) sur la droite D :
q1 q2 q3 qi1 qi qn
u D
|
d d
166 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Notons F i la somme des forces exerces par les (n 1) autres charges sur la charge qi .
111 - Q 1 Question 1. Montrer que lon a la relation suivante :
X q X
i1 n
j qj
k F i k = |C qi |
(i j)2 j=i+1 (i j)2
j=1
Exercice 112. Lchers dufs par la fentre
Quand on laisse tomber un uf par la fentre dun immeuble, il peut se casser ou non :
cela dpend de la hauteur de la chute. On cherche connatre la rsistance des ufs,
cest--dire la hauteur, exprime en nombre f dtages, partir de laquelle un uf se casse
si on le laisse tomber par la fentre. Il est entendu que tous les ufs sont identiques et
quun uf se casse toujours sil tombe dun tage de rang suprieur ou gal f et jamais
sil tombe dun tage de rang infrieur f.
Quand un uf tombe sans se casser, on peut le ramasser et le rutiliser. Sil est cass, on
ne peut plus sen servir. Les tages sont numrots partir de 1. tant donn un immeuble
de n (n > 1) tages et un certain nombre k (k > 1) dufs, on cherche trouver f. Si
le dernier tage nest pas assez haut pour briser cette sorte duf, le rsultat attendu est
n + 1. Lobjectif est de minimiser le nombre de lchers pour n et k donns.
On suppose disponible la fonction Casse(h) qui laisse tomber un uf du he tage et
dlivre la valeur vrai si luf se casse et faux sinon. Si luf se casse, le quota dufs
disponibles dcrot de 1, sinon il reste inchang. Cette fonction a comme pr-condition
quil reste encore au moins un uf disponible et que h 1 .. n.
fonction uf1 (bi, bs) rsultat N1 qui dlivre le rsultat pour la section de limmeuble
comprise entre les tages bi et bs et tel que lappel fonctionuf1(1, n) fournit le rsultat
attendu pour tout limmeuble. En dduire que la complexit au pire S1 (n) (pour squentiel
avec un uf), exprime en nombre de lchers, est gale n.
1e 2e (i 1) e ie se n
... ... ... ...
<e
non Casse1 non Casse1 non Casse1 non Casse1
(i 1) e + 1 ie
... ... ...
recherche squentielle
Fig. 8.14 La radixchotomie : les deux tapes de la recherche dans le cas ou lon dispose
de deux ufs
calcul qui suit, considrer que n est un multiple de e. Dans ce cas, on effectue au pire
R2 (n) (pour radixchotomie avec deux ufs) lchers. R2 (n) est tel que :
R2 (n)
s lchers pour la premire tape (soit n/e
=
lchers) et e 1 lchers pour la seconde
n
+ (e 1).
e
les cas les pires en ralisant un dcoupage en segments de longueurs dcroissantes. Prenons
lexemple dun immeuble de 36 tages. Si lon utilise la radixchotomie et que ltage f
recherch est le 36e , on ralise 11 lchers. Avec un dcoupage en segments conscutifs de
8, 7, 6, 5, 4, 3, 2 et 1 tages on effectuera des lchers aux tages 8, 15, 21, 26, 30, 33, 35 et enfin
36, soit un total de huit lchers. On note galement que, quel que soit le segment retenu,
si ltage recherch est le dernier du segment, il faut exactement huit lchers chaque fois.
Cette proprit est due au fait que 36 est le 8e nombre triangulaire. Un nombre triangulaire
P
ti est un nombre de la forme ik=1 k, o i est appel le germe du nombre ti .
Question 4. Comment peut-on procder si le nombre dtages nest pas un nombre tri- 112 - Q 4
angulaire ? Dvelopper lexemple avec n = 29 et f = 29.
Question 5. Soit T2 (n) (pour triangulaire avec deux ufs) la complexit au pire en 112 - Q 5
nombre de lchers de cette mthode. Montrer par rcurrence sur n et i que ti1 < n 6
ti T2 (n) = i. Autrement dit, si ti est le nombre triangulaire le plus proche de n su-
prieurement, alors la stratgie dcrite ci-dessus exige au pire exactement i lchers (dans
la suite, par abus de langage, i est aussi appel le germe de n). En dduire que cette
mthode est en O( n).
Question 6. Dans la suite, on gnralise la mthode k quelconque (k > 2). La mise en 112 - Q 6
uvre de lalgorithme DpR correspondant requiert la disponibilit de lopration fonction
Germe(v) rsultat N1 qui, pour un entier naturel positif v, dlivre le germe de v. Fournir
le principe dune solution en (1) de cette opration.
Question 7. De mme quavec la radixchotomie, ds quun segment est identi- 112 - Q 7
fi, on peut entamer une nouvelle phase de recherche sur le mme principe, ou,
sil ne reste quun seul uf, par une recherche squentielle. Lopration fonction
ufkTriangle(bi, bs) rsultat N1 est telle que lexpression ufkTriangle(1, n) dlivre
le rsultat recherch. Prciser le dveloppement inductif sur lequel se fonde cette op-
ration. En dduire le modle de division qui sapplique ainsi que le code de la fonction
ufkTriangle. Fournir son quation de complexit au pire, en nombre de lchers.
Question 8. En utilisant le langage de programmation de votre choix, comparez expri- 112 - Q 8
mentalement les temps dexcution des deux mthodes pour n 1..500, pour f 1..n+1 et
pour k < dlog2 (n)e (si k > dlog2 (n)e, une recherche dichotomique est possible et lemporte
sur les mthodes tudies ci-dessus).
Remarque Lorsque k < dlog2 (n)e, une solution alternative consiste dbuter par une
recherche dichotomique pour terminer, lorsquil ne reste plus quun seul uf, par une
recherche squentielle. On montre que cette solution est en O(k + n/2k1 ) lchers.
170 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Soit (cest la prcondition) un sac S de n lments, n > 2, prenant ses valeurs sur
lintervalle bi .. bs (bi 6 bs) et tel que n > card(bi .. bs). En outre, les valeurs extrmes
bi et bs appartiennent au sac. Selon le principe dit des cases de courrier ou des
nids de pigeon (voir exercice 2 page 1), un tel sac contient au moins un doublon.
Lobjectif de lexercice (cest la postcondition) est de construire un algorithme qui dlivre
lun quelconque des doublons prsents dans S.
Ainsi, pour lintervalle bi .. bs = 12 .. 19 et le sac J14, 17, 12, 19, 14, 16, 12, 14, 15K compos
de neuf lments, il existe deux doublons (12 et 14). Le rsultat fourni pourra tre indiff-
remment lun ou lautre. Une solution triviale existe. Elle consiste, pour chaque valeur v
du sac S, vrifier si elle existe dj dans S JvK. Elle conduit un algorithme en O(n2 ).
On se focalise sur une solution de type DpR visant amliorer lefficacit de la solution.
Insistons sur le fait que la prcondition ci-dessus ne correspond pas une caractrisation
gnrale de la prsence dun doublon dans un sac. Par exemple, le sac J14, 16, 12, 12, 14K
contient des doublons sans que sa taille (5) nexcde celui de lintervalle des valeurs y
apparaissant (5 galement).
Dans la suite, S est raffin par un tableau T [1 .. n] valeurs dans lintervalle bi .. bs. Le
tableau T est une variable globale dont les sous-tableaux sont identifis par leurs bornes
(bg borne gauche et bd borne droite).
Le principe DpR sapplique ici sur lintervalle bi..bs. La phase de sparation mentionne
ci-dessus consiste ventiler les valeurs de T dans deux tableaux Tl et Tr par rapport la
valeur mil, milieu de lintervalle bi .. bs, tout en tenant jour lintervalle bil .. bsl des
valeurs de Tl et lintervalle bir .. bsr des valeurs de Tr jusqu ce que lon soit sr que lun
de ces deux tableaux contienne un doublon, auquel cas, si sa longueur excde 2, on peut
alors lui r-appliquer le mme procd.
Exemple Reprenons lexemple ci-dessus. mil vaut b(12 + 19)/2c = 15. Tl reoit donc les
valeurs de T appartenant lintervalle 12 .. 15, tandis que Tr reoit celles de lintervalle
16 .. 19 (voir la figure ci-dessous).
Aprs avoir ventil les sept premiers lments de T dans Tl et dans Tr , on constate que
Tl contient quatre lments, qui appartiennent lintervalle 12 .. 14 de longueur 3. On
en conclut que Tl contient (au moins) un doublon, et il devient inutile de poursuivre la
ventilation ; on peut alors se limiter poursuivre la recherche dans Tl .
Plutt que dutiliser deux tableaux auxiliaires Tl et Tr , on va ventiler sur place (cest-
-dire dplacer les valeurs destines Tl et Tr aux extrmits de T ) en utilisant lopration
procdure change(j, k) qui change les valeurs de T situes aux positions j et k.
Lopration Ventiler a comme profil :
procdure Ventiler(bi, bs, bg, bd; nbi, nbs, nbg, nbd : modif )
CHAPITRE 8. DIVISER POUR RGNER 171
12 .. 19
T 14 17 12 19 14 16 12 14 15
5 16
.. 1 .. 1
12 9
Tl 14 12 14 12 Tr 17 19 16
12 .. 14 16 .. 19
Prcondition P :
bi .. bs
bg bd
T
Postcondition Q :
nbi .. nbs
nbg nbd
T
1. nbg..nbd bg..bd (le tableau T [nbg..nbd] est strictement plus petit que le tableau
T [bg .. bd]).
2. Le tableau T [nbg .. nbd] prend ses valeurs dans lintervalle nbi .. nbs.
3. card(nbg .. nbd) > 2 (le tableau possde au moins deux lments).
4. card(nbg .. nbd) = card(bi .. bs) + 1 (il y a exactement une place de plus que de
valeurs possibles : il existe donc au moins un doublon).
5. nbi T [nbg .. nbd] et nbs T [nbg .. nbd] (les valeurs extrmes possibles appar-
tiennent bien au tableau).
172 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
6. T [nbg .. nbd] v T [bg .. bd] (le sac des valeurs du tableau T [nbg .. nbd] est inclus dans
le sac des valeurs du tableau T [bg .. bd]).
Cependant, la postcondition Q ne se prte pas directement la construction dune
boucle. Nous devons insrer entre les situations P et Q une situation intermdiaire R, qui
va constituer la postcondition de la boucle. Le programme A spcifi par {R} A {Q} sera
quant lui constitu dune alternative.
Situation intermdiaire R :
bi .. bs
bg i s bd
T
Nous allons distinguer quatre sortes de conjoints : les conjoints gnraux (portant sur
le tableau complet T [bg .. bd]), les conjoints spcifiques au sous-tableau T [bg .. i 1], ceux
spcifiques au sous-tableau T [s + 1 .. bd], et enfin le conjoint commun aux deux sous-
tableaux.
Conjoints gnraux :
1. mil = b(bi + bs)/2c.
2. T [bg .. bd] est une permutation multiensembliste des valeurs initiales. Il existe donc
toujours au moins un doublon dans le tableau. Ce tableau est modifi uniquement
par des appels la procdure change, le prsent conjoint peut donc tre oubli.
Conjoints spcifiques au sous-tableau T [bg .. i 1].
1. i bg .. bd 1 (le sous-tableau nest jamais le tableau complet).
2. bil .. bsl bi .. mil.
3. Le sous-tableau prend ses valeurs dans lintervalle bil .. bsl.
4. bil .. bsl 6= bil T [bg .. i 1] et bsl T [bg .. i 1] (si lintervalle des valeurs
du sous-tableau nest pas vide, les valeurs extrmes de cet intervalle sont prsentes
dans le tableau).
5. card(bg .. i 1) 0 .. card(bil .. bsl) + 1 (le nombre de places dans le sous-tableau
est compris entre 0 et le nombre de valeurs possibles plus 1. Ce dernier cas implique
lexistence dau moins un doublon).
Conjoints spcifiques au sous-tableau T [s + 1 .. bd] : ils sont similaires ceux du sous-tableau
T [bg .. i 1].
Conjoint commun aux deux sous-tableaux.
1. card(bg .. i 1) = card(bil .. bsl) + 1 ou card(s + 1 .. bs) = card(bir .. bsr) + 1 (Dans
lun des deux sous-tableaux, il y a plus de places que de valeurs possibles : deux
emplacements contiennent la mme valeur. Ce sous-tableau contient au moins un
doublon).
113 - Q 1 Question 1.
a) Construire, pour la procdure Ventiler, la boucle B rpondant la spcification {P} B {R}.
CHAPITRE 8. DIVISER POUR RGNER 173
card(bg .. bd)
card(nbg .. nbd) 6 + 1. (8.12)
2
Cette formule est utiliser pour dmontrer la terminaison de la procdure Ventiler.
Question 2. En dduire le raisonnement par induction qui permet de construire lopra- 113 - Q 2
tion fonction CherchDoubl(bg, bd) rsultat bi .. bs et den prouver la terminaison. Cette
opration dlivre lun quelconque des doublons du tableau T [bg .. bd]. Quel est le modle
de division qui sapplique ? Fournir le code de cette opration. Montrer quelle est au pire
en O(n).
Exercice 114. Le plus grand carr et le plus grand rectangle sous un histogramme
Le problme
Dfinition 14 (Histogramme dun tableau de naturels) :
Soit t un tableau dfini sur lintervalle a..b et valeurs dans lintervalle i..s. Le tableau
h dfini sur lintervalle i .. s et valeurs dans lintervalle 0 .. b a + 1 est lhistogramme
de t si pour chaque valeur v de lintervalle i .. s, h[v] comptabilise le nombre de fois o
v apparat dans t.
t a .. b i .. s et h i .. s 0 .. b a + 1.
Exemple Soit le tableau t suivant, dfini sur lintervalle 1 .. 25 et valeurs dans lintervalle
1 .. 7 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
1 3 2 1 4 5 4 3 2 1 6 1 5 3 7 6 3 4 5 6 1 4 6 1 3
1 2 3 4 5 6 7
h 6 2 5 4 3 4 1
Un tel tableau est souvent reprsent comme le montre la figure 8.15 ci-dessous.
6
5
4
h 3
2
1
0
1 2 3 4 5 6 7
On peut noter (cest une remarque qui est exploite ci-dessous) quil est possible de dfi-
nir lhistogramme dun histogramme. Ainsi, lhistogramme h0 de h est dfini sur lintervalle
0 .. 25 et valeurs dans lintervalle 0 .. 7. Il se prsente de la manire suivante :
2
h0 1
0
0 1 2 3 4 5 6 7 8
CHAPITRE 8. DIVISER POUR RGNER 175
Pour lexemple de la figure 8.15, la valeur recherche est 3. Elle est atteinte par deux
carrs diffrents :
6 6
5 5
4 4
3 3
2 2
1 1
0 0
1 2 3 4 5 6 7 1 2 3 4 5 6 7
Deux solutions sont tudies. La premire est une version itrative, en O(n2 ), la seconde,
en (n), est une optimisation de la premire.
Question 1. Nous avons vu quil ny a pas en gnral unicit de la solution. Une situation 114 - Q 1
pour laquelle plusieurs solutions sont alignes verticalement peut exister, comme le montre
le schma ci-dessous :
4 4 4
1 1 1
0 0 0
0 1 2 3 4 0 1 2 3 4 0 1 2 3 4
Montrer quil est toujours possible de ne considrer, dans la rsolution de ce problme, que
les carrs qui touchent laxe des abscisses. Cette proprit est applique systmatiquement
dans la suite.
Remarque Pour ce qui concerne plus particulirement la recherche du plus grand carr sous
un histogramme h dfini sur lintervalle i .. s et valeurs dans lintervalle 0 .. b a + 1, il
est facile de constater quil est impossible dy placer un carr dont le ct serait suprieur
s i + 1. Dans la suite, nous supposons sans perte de gnralit que les histogrammes
concerns par la recherche du plus grand carr sont crts au-del de (s i + 1), comme
le montre le schma suivant :
176 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
6 6
5 5
4 4
3 3
2 2
1 1
0 0
0 1 2 3 4 5 0 1 2 3 4 5
h:
1 a i n
Vrifier que la complexit est en O(n2 ).
Plus grand carr sous un histogramme, version itrative optimale Du point de vue complexit,
le problme que pose la solution nave prcdente rside dans le calcul dune expression
quantifie, calcul pour lequel la solution la plus simple se fonde sur une boucle. On sait
dj que dans lintervalle a .. i 1, aucune valeur de h nest infrieure a i (dans le
cas contraire le carr considr nexisterait pas). Si on disposait de f, histogramme de
h[a .. i 1], le raffinement de lexpression conditionnelle min(h[a .. i 1]) > i a + 1 se
rduirait f[i a] = 0 (en effet f[i a] = 0 signifie quaucune valeur de h[a .. i 1] nest
gale i a ; on savait dj quaucune dentre elles nest infrieure i a).
Exemple Considrons lhistogramme h[a .. i 1] suivant :
5
4
h 3
2
1
0
a i
CHAPITRE 8. DIVISER POUR RGNER 177
Soit encore :
3
f 2
1
0
0 1 2 3 4 5
Ainsi, dans h[a .. i 1], il existe trois positions qui valent 2 (do f[2] = 3).
Question 3. Construire une nouvelle solution base sur lobservation ci-dessus. Fournir 114 - Q 3
le code. Vrifier que cette solution est bien en (n).
Trois solutions sont tudies. La premire est du type DpR (deux variantes sont propo-
ses), la seconde est une solution itrative, enfin la troisime, de facture originale, panache
efficacement itration et rcursivit.
6
5
4
3
2
1
0
1 2 3 4 5 6 7
178 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
am(i, i) = 0 pour 1 6 i 6 n + 1
si i 6 k < j et h[k] = min(h[i..j1]) alors am(i, j) = max({am(i, k), (ji)h[k], am(k+
1, j)}).
Cette proprit exprime quil est possible de dterminer laire du plus grand rectangle
sous un histogramme, condition de connatre dune part la position dune occurrence du
minimum de lhistogramme, dautre part laire des plus grands rectangles situs de part
et dautre du minimum en question.
2 8
10 6
1
0
1 2 3 4 5 6 7
114 - Q 4 Question 4. On suppose disponible la fonction PosMin(i, s) qui dlivre lune quelconque
des positions du minimum de h[i .. s 1]. En appliquant directement la proprit 11 ci-
dessus, fournir la version DpR de lopration fonction AmHDpR(i, s) rsultat N qui dlivre
laire du plus grand rectangle prsent sous lhistogramme h[i..s1]. Quelle est la complexit
de cette opration dans lhypothse o la fonction PosMin est mise en uvre par une
recherche squentielle ?
Plus grand rectangle sous un histogramme, version DpR et arbres de segments minimaux La so-
lution prcdente est base sur une recherche linaire standard (en (n)) du minimum
dun histogramme. Il existe cependant une solution plus efficace pour ce problme : celle
qui utilise les arbres de segments minimaux. Les principales dfinitions, ainsi que les l-
ments de vocabulaire les plus frquents portant sur les arbres binaires, sont regroups au
chapitre 1.
Les arbres de segments minimaux (arbres de segments pour la recherche du minimum) Soit h
i .. s N un tableau. Un arbre de segments minimal pour h est un arbre binaire tel que
chaque nud est constitu de :
la position p du (dun) minimum de h[i .. s],
lintervalle i .. s en question,
CHAPITRE 8. DIVISER POUR RGNER 179
1 2 3 4 5 6 7 8
2 6 1 5 9 3 8 4
A 3 position du minimum
dans h[5 .. 8]
1 .. 8
3 6
1 .. 4 5 .. 8
1 3 6 8
1 .. 2 3 .. 4 5 .. 6 7 .. 8
1 2 3 4 5 6 7 8
1 .. 1 2 .. 2 3 .. 3 4 .. 4 5 .. 5 6 .. 6 7 .. 7 8 .. 8
Question 5. Construire cette opration, fournir son code et calculer sa complexit. En 114 - Q 5
dduire la complexit de la nouvelle version de lopration AmHDpR.
Plus grand rectangle sous un histogramme, version itrative Le principe de cette version sap-
parente celui appliqu dans les versions itratives de la recherche du plus grand carr.
Cependant, il sen dmarque par le fait quil existe ici en gnral plusieurs rectangles
candidats llargissement vers la droite. Cet ensemble de candidats est dnomm en-
semble des rectangles ouverts , il est not O et k = card(O). Dans la suite, on suppose
que h est tendu en 0 et en n + 1 par 0. Nous dcidons de reprsenter un rectangle ouvert
180 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
par le couple (g, ht), o g est labscisse la plus gauche du rectangle et ht sa hauteur.
Formellement, pour i fix, un rectangle ouvert (g, ht) se dfinit par :
la figure 8.16 page 180, pour i = 10, nous avons O = {(0, 0), (1, 1), (4, 3), (6, 4)}. Lexten-
sion de h en 0 permet de disposer en permanence, dans la pile O, du rectangle neutre
de coordonnes (0, 0) et daire 0 (zro).
6 i
5
0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Lemme 1 :
Soit P = < (g1 , ht1 ), . . . , (gk , htk ) > la liste des rectangles ouverts trie sur les gj crois-
sants. La liste < ht1 , . . . , htk > est galement strictement croissante.
Sans entrer dans le dtail de ce qui constitue la question suivante, lors de la progression,
soit on supprime de la liste P le rectangle ayant la hauteur la plus grande (cest--dire
le dernier lment de la liste), soit on allonge la largeur des rectangles ouverts, en crant
ventuellement, la queue de la liste P, un nouveau rectangle dont la hauteur est suprieure
celles de tous les rectangles prsents dans P. La liste P se comporte donc comme une
pile. Lextension de h en n + 1 permet, lorsque i atteint cette valeur, de dpiler tous les
rectangles ouverts lexception de celui de coordonnes (0, 0), puis de faire progresser i
jusqu n + 2.
Les informations prsentes dans P sont redondantes. En effet, les hauteurs htj peuvent
tre retrouves partir des abscisses gj . Afin de supprimer cette redondance, on dcide de
raffiner la pile P par la pile P0 qui se prsente comme suit : P0 = < g1 1, . . . , gk 1, s >,
o le sommet s de la pile P0 est labscisse la plus droite telle que s gk + 1 .. i 1
et (gk , h[s]) est le sommet de la pile P (P0 contient un lment de plus que P). Ainsi, si
P = < (0, 0), (1, 1), (4, 3), (6, 4) > (voir figure 8.16, page 180), P0 = < 1, 0, 3, 5, 9 >.
114 - Q 7 Question 7. Montrer que cette reprsentation P0 permet de retrouver toutes les informa-
tions prsentes dans P.
CHAPITRE 8. DIVISER POUR RGNER 181
Plus grand rectangle sous un histogramme, version Morgan Face la solution prcdente uti-
lisant explicitement une pile, il est lgitime de se poser la question de savoir sil nest
pas possible dutiliser implicitement ( la place) la pile dexcution. La solution tudie
ici rpond cette interrogation, mme sil ne sagit pas dune adaptation de la solution
prcdente, mais dune approche originale due linformaticien australien C. Morgan qui
lutilise comme exemple de construction dun programme partir dune spcification for-
melle (voir [52], pages 209-216).
Lhistogramme est tendu en 0 et n + 1 de sorte que h[0] = h[n + 1] = 1. Ces valeurs
servent de sentinelles dans la suite.
Soit P(k) = k 0 .. n un prdicat. Soit la procdure AmHMorg(i, b, j) (o i est un
paramtre dentre et b et j sont des paramtres de sortie) spcifie en pr/post par :
Prcondition : P(i).
Postcondition : Q dfini par Q =
b Q1 et Q2 et Q3 et Q4 avec
b i<j6n+1
Q1 =
b h[i] 6 min(h[i + 1 .. j 1])
Q2 =
b h[i] > h[j]
Q3 =
Q4 =
b b = am(i + 1, j).
Pour une abscisse i donne, lappel AmHMorg(i, b, j) fournit deux rsultats, j et b. Le
premier est la plus petite abscisse (j) suprieure i telle que dune part h[j] 6 h[i] et
dautre part la portion de lhistogramme h[i + 1 .. j 1] est suprieure ou gale h[i].
Notons que la spcification garantit lexistence de j. En effet, il est toujours possible de
trouver un tel j puisquil existe une abscisse j telle que h[j] est infrieure ou gale toutes
les valeurs prcdentes de lhistogramme cest (n + 1) (h[n + 1] = 1) et que, dans le
cas o lintervalle i + 1 .. j 1 est vide, lexpression min(h[i + 1 .. j 1]) devient min(),
qui vaut + (h[i] 6 +). Le second rsultat, b, est laire du plus grand rectangle prsent
sous la portion de lhistogramme dlimite par lintervalle i + 1 .. j 1.
Exemple Reprenons lexemple de la figure 8.15, page 174, pour valuer AmHMorg(2, b, j) :
6
5
4
3
2
1
0
0 1 2 3 4 5 6 7 8
i j
182 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
i j
Cette fois, lintervalle i + 1 .. j 1 est vide. Laire b du plus grand rectangle sous la
portion h[4 .. 3] est nulle. Cet appel dlivre donc j = 4 et b = 0.
114 - Q 9 Question 9. Posons Q5 = b h[j] 6 min(h[i + 1 .. j 1). Montrer que Q Q5 . Dans la suite,
le prdicat (Q et Q5 ) est not Q0 .
114 - Q 10 Question 10. Montrer quau retour de lappel AmHMorg(0, b, j) j vaut (n + 1) et b est
laire du plus grand rectangle sous lhistogramme h[1 .. n].
Nous recherchons une solution rcursive de la forme
1. procdure AmHMorg(i; b, j : modif ) pr
2. i N et b N et j N1 et
3. c N et k N
4. dbut
5. Initialisation ;
6. tant que non CA faire
7. AmHMorg(j, c, k) ;
8. FinProgression
9. fin tant que
10. fin
Si I(i, b, j) et CA(i, b, j) reprsentent respectivement linvariant de la boucle et la condi-
tion darrt, la version annote de la procdure AmHMorg se prsente comme suit :
1. procdure AmHMorg(i; b, j : modif ) pr
2. i N et b N et j N1 et
3. c N et k N
4. dbut
5. P(i)
6. Initialisation ;
7. I(i, b, j)
8. tant que non CA(i, b, j) faire
9. I(i, b, j) et non CA(i, b, j)
10. AmHMorg(j, c, k) ;
11. Q0 (j, c, k) et I(i, b, j) et non CA(i, b, j)
12. FinProgression
13. I(i, b, j)
CHAPITRE 8. DIVISER POUR RGNER 183
Remarques
Dans les questions suivantes, nous allons dvelopper progressivement cette boucle en
appliquant les principes classiques de construction ditrations (voir chapitre 3).
Question 11. Ces principes prconisent de dterminer tout dabord linvariant I et la 114 - Q 11
condition darrt CA. En partant de la formule 8.13, page 183, faire une proposition pour
I et pour CA.
Question 12. Montrer quil est lgal dappeler la procdure AmHMorg(j, c, k) la ligne 114 - Q 12
10 (autrement dit, que la prcondition P(j) est implique par le prdicat de la ligne 9).
Question 13. Nous cherchons prsent dterminer le code correspondant FinPro- 114 - Q 13
gression.
a) Si la configuration suivante
184 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
7
6
5
4
3
b
2
1
0
i j
est une instance du prdicat de la ligne 9, quelle est la situation atteinte la ligne 11 ?
b) Fournir une solution pour le fragment de code FinProgression. Quelle est, sur lexemple
considr, la situation atteinte la ligne 13 ?
c) Que se serait-il pass si, au lieu dutiliser la postcondition Q0 , nous avions simplement
utilis Q ?
114 - Q 14 Question 14. Fournir une solution pour le fragment de code Initialisation.
114 - Q 15 Question 15. Montrer que la procdure se termine.
114 - Q 16 Question 16. Fournir le code de la procdure.
114 - Q 17 Question 17. Dans cette question, nous cherchons montrer que la complexit de cette
solution est en (n). Nous dcidons de dnombrer les appels la procdure AmHMorg.
Cette dcision est (asymptotiquement) compatible avec le choix initial de dnombrer les
conditions puisque sil y a a appels rcursifs la procdure, il y a a + 1 valuations de
la condition de la boucle. Dmontrer par induction la proprit suivante : lexcution de
AmHMorg(i, c, j) entraine j i appels rcursifs AmHMorg.
Application : recherche de laire du plus grand rectangle noir dans une image noir et
blanc
Soit une image rectangulaire compose de pixels noirs (1) et blancs (0). On cherche la
plus grande sous-image rectangulaire compltement noire. De manire plus formelle, tant
donne une matrice boolenne T [1 .. m, 1 .. n] reprsentant une image, on cherche la valeur
de a, aire du plus grand rectangle noir contenu dans T .
Exemple Dans limage de la figure 8.17, laire a du plus grand rectangle est 6.
114 - Q 18 Question 18. Montrer comment il est possible dappliquer les algorithmes tudis ci-
dessus pour rsoudre ce problme.
CHAPITRE 8. DIVISER POUR RGNER 185
Programmation dynamique
Se rappeler quelque chose est
encore le meilleur moyen de ne
pas loublier.
(P. Dac)
9.1 Exercices
Les exercices qui suivent proposent une varit de sujets pour lesquels la programmation
dynamique se rvle pertinente. Ils ont t classs selon diffrents thmes : dcoupe ou
partage, problmes relatifs aux squences, arbres ou graphes, problmes lis aux images,
jeux, et enfin lillustration dun problme pseudo-polynomial. Compte tenu du caractre
systmatique de la production de lalgorithme partir de la rcurrence et de la stratgie de
remplissage de la structure tabulaire choisie, le code de lalgorithme nest demand que de
faon occasionnelle quand un intrt particulier le justifie. Enfin, sauf mention contraire
explicite, la complexit temporelle se mesure en termes de nombre de comparaisons lies
aux oprations minimum et maximum de la rcurrence.
188 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Soit un ensemble P de n points du plan, avec n > 1, dont les abscisses valent 1, 2, . . . , n
et dont les ordonnes sont des entiers naturels quelconques. On cherche la meilleure ap-
proximation de cet ensemble par une ligne brise dfinie comme une suite de segments de
droite dont les extrmits sont des points de P. Elle peut se reprsenter par la suite des
abscisses des points sur lesquels elle sappuie. On impose que le premier nombre vaille 1 et
le dernier n, autrement dit que le premier point de P soit le dpart du premier segment de
droite et son dernier point larrive du dernier segment de droite. Dans les quatre exemples
ci-aprs, les lignes brises sont successivement : (1, 4, 8), (1, 5, 8), (1, 4, 7, 8) et (1, 3, 4, 8).
La qualit de lapproximation de P par une ligne brise se mesure pour partie en calcu-
lant la somme sde des distances euclidiennes de chaque point de P au segment de droite
dont les extrmits lencadrent. Par suite, tout point origine ou extrmit dun segment
de lapproximation induit une distance nulle. Pour la premire figure, cette somme est
compose de deux parties :
la distance des points 1, 2, 3 et 4 au segment construit sur les points 1 et 4, soit
(0 + 0.4 + 0.4 + 0) = 0.8,
la distance des points 4, 5, 6, 7 et 8 au segment construit sur les points 4 et 8, soit
environ (0 + 1.75 + 0.5 + 1.25 + 0) = 3.5.
On ajoute cette somme un terme positif (m 1) C, proportionnel au nombre m de
segments de droite de la ligne brise. Dans lexemple de la premire figure, si lon choisit
C = 2, ce terme vaut 2, puisque m = 2. Lapproximation ralise est dautant meilleure
que le cot (sde + (m 1) C) est petit.
5 o 5 o
4 o o 4 o o
3 o o o o 3 o o o o
2 2
1 o 1 o
0 0
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Exemple 1 : n = 8, m = 2 Exemple 2 : n = 8, m = 2
ligne brise (1, 4, 8) ligne brise (1, 5, 8)
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 189
5 o 5 o
4 o o 4 o o
3 o o o o 3 o o o o
2 2
1 o 1 o
0 0
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Exemple 3 : n = 8, m = 3 Exemple 4 : n = 8, m = 3
ligne brise (1, 4, 7, 8) ligne brise (1, 3, 4, 8).
Dans le premier exemple ci-dessus, ce cot vaut donc peu prs 0.8 + 3.5 + 2 = 6.3. On
calcule de la mme manire, pour lexemple 3, sde = (0 + 0.4 + 0.4 + 0) + (0 + 1.1 + 0.3 + 0) +
(0 + 0) = 2.2 ; le cot de lapproximation est 2.2 + 2 2 = 6.2. Cette seconde approximation
est donc un peu meilleure que la prcdente. Les second et quatrime exemples conduisent
des approximations de cot respectif, environ 7.9 et 8.1, moins bonnes que la premire.
La meilleure des quatre approximations considres est donc la troisime. Cependant,
lapproximation constitue des deux segments (1, 2) et (2, 8) fait encore mieux que celle-ci,
puisquelle a un cot denviron 5.4.
tant donns un ensemble P de n points et C, le problme gnral pos est de trouver
la ligne brise optimale, cest--dire celle qui minimise le cot (sde + m C).
Question 1. Que peut-on dire des approximations quand n C est trs petit (et donc C 115 - Q 1
aussi) ou C trs grand ?
Question 2. Supposons que la ligne brise de valeur optimale corresponde la suite crois- 115 - Q 2
sante dabscisses (a1 , a2 , . . . , am1 , am ), avec a1 = 1 et am = n. Notons appopt(i) la valeur
optimale que lon obtient pour approximer lensemble des points dabscisses (1, . . . , i) par
une ligne brise. Maintenant, notons k = am1 labscisse de dpart du dernier segment de
la ligne brise optimale pour lensemble P des n points et sde(k, n) la somme des distances
des points dabscisses (k, . . . , n) la droite passant par les deux points de P ayant pour
abscisses k et n. Montrer que appopt(n) = sde(k, n) + C + appopt(k). Comment calculer
appopt(n) sans connatre k, mais en supposant connus appopt(1) = 0, appopt(2), . . . ,
appopt(n 1) ?
Question 3. tablir une formule de rcurrence permettant de calculer appopt(i)(1 6 i 6 115 - Q 3
n) en fonction de appopt(1), . . . , appopt(i 1), de sde(j, i) et de C.
Question 4. On suppose quil existe une fonction Distance(j, i, k), avec j 6 k 6 i, qui 115 - Q 4
calcule la distance du point dabscisse k la droite construite sur les points j et i. Quels sont
les calculs faire, et dans quel ordre, pour calculer appopt(n) ? O le rsultat recherch
se trouve-t-il dans la structure tabulaire utilise ?
Question 5. En dduire un algorithme qui calcule la valeur appopt(n) de lapproxima- 115 - Q 5
tion optimale dun ensemble P quelconque de n points par une ligne brise. Quel est sa
complexit temporelle en nombre dappels la fonction Distance ? Que faut-il en penser ?
Question 6. Comment faudrait-il modifier cet algorithme pour quil produise aussi les 115 - Q 6
abscisses des points de la ligne brise optimale ?
190 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Cet exercice propose une solution alternative celle labore par la dmarche
DpR dans lexercice 97, page 125. Il illustre un cas limite (rare) o il existe une
solution ne ncessitant aucune structure tabulaire de mmorisation, et donc de
complexit spatiale constante.
Rappelons le problme, dj prsent dans lexercice 97, page 125. On dispose dun tableau
T [1 .. n] (n > 1) de valeurs positives relles. Il existe (au moins) deux indices i et j, dfi-
nissant lintervalle i .. j, avec 1 6 i 6 j 6 n, tels que la valeur T [j] T [i] est maximale. On
cherche cette valeur maximale appele valeur du (dun) meilleur intervalle. Par exemple,
si T = [9, 15, 10, 12, 8, 18, 20, 7], le meilleur intervalle de valeur 12 est unique et obtenu pour
i = 5 et j = 7.
Remarque Si le tableau est monotone dcroissant, cette valeur est nulle et correspond
nimporte quel intervalle de type i .. i pour 1 6 i 6 n.
On a trouv une solution de complexit linaire dans lexercice 97 page 125 et lon
souhaite en laborer une en programmation dynamique de mme ordre de complexit si
possible (tenter de faire mieux est illusoire).
116 - Q 1 Question 1. On appelle vmi(k) la valeur du (dun) meilleur intervalle se terminant exac-
tement en position k. Prciser comment obtenir la valeur du (dun) meilleur intervalle du
tableau T partir de vmi(1), . . . , vmi(n). tablir une relation de rcurrence permettant le
calcul de vmi(k).
116 - Q 2 Question 2. Dduire de la rcurrence prcdente une stratgie de remplissage dune struc-
ture tabulaire approprie. Quelles en sont les complexits temporelle et spatiale ? Vrifier
que la complexit temporelle rpond bien lobjectif fix.
116 - Q 3 Question 3. Comment peut-on procder pour dterminer le meilleur intervalle lui-mme,
autrement dit ses bornes ?
116 - Q 4 Question 4. Donner le code du programme associ.
116 - Q 5 Question 5. Appliquer cet algorithme au tableau dentiers T [1 .. 14] = [14, 11, 16, 12, 20,
7, 3, 3, 19, 24, 24, 3, 5, 16].
116 - Q 6 Question 6. Proposer une variante (principe et code) de la solution prcdente qui am-
liore la complexit spatiale.
116 - Q 7 Question 7. Comparer les deux solutions pour ce problme : a) version DpR de lexercice
97, page 125, et b) celle donne en rponse la question prcdente.
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 191
Cet exercice illustre un problme assez simple pour lequel la valeur associe la
solution optimale recherche se trouve dans un emplacement prdtermin de la
structure tabulaire. Une attention particulire est porte ltape de reconstitu-
tion de la solution optimale elle-mme.
Le problme est de placer les stations-service parmi les n emplacements envisags, de faon
ce que le rapport (gain) soit maximal. On note gopt(i) le gain maximal que peuvent
rapporter des stations-service si lon considre seulement les emplacements 1 i (gopt(n)
est par suite la valeur finale recherche). Par ailleurs, e(i) dsigne le numro de lempla-
cement le plus proche (dans la direction de lentre) o il est possible dimplanter une
station-service sil y en a une lemplacement i (compte tenu de la distance prserver).
Si on ne peut mettre aucune station-service avant celle en position i, e(i) vaut 0. Enfin,
on note g(i) le gain annuel de la station-service implante lemplacement i.
Question 2. Expliquer pourquoi on doit introduire un emplacement virtuel de numro 117 - Q 2
0 et prciser la valeur de g(0).
Question 3. tablir la rcurrence de calcul de gopt(i), gain maximal associ une im- 117 - Q 3
plantation optimale relative aux emplacements 0 i.
192 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
117 - Q 4 Question 4. Prciser les principaux lments du programme implantant cette rcurrence
(structure tabulaire et progression de son remplissage, localisation de la valeur optimale
recherche, complexits spatiale et temporelle en nombre de conditions values).
Cet exercice montre que, selon la fonction de cot considre, une simple so-
lution gloutonne (voir chapitre 7) suffit ou quil faut, au contraire, recourir
une solution faisant appel une rcurrence, demandant donc une spcification
un peu plus labore. Ici encore, le cot de la solution optimale se trouve un
emplacement prdtermin de la structure tabulaire.
Un voyageur veut aller dune oasis une autre sans mourir de soif. Il connat la position
des puits sur la route (numrots de 1 n, le puits numro 1 (resp. n) tant loasis de
dpart (resp. darrive)). Le voyageur sait quil consomme exactement un litre deau au
kilomtre. Il est muni dune gourde pleine son dpart. Quand il arrive un puits, il
choisit entre deux possibilits : a) poursuivre sa route, ou b) remplir sa gourde. Sil fait le
second choix, il vide sa gourde dans le sable avant de la remplir entirement au puits afin
davoir de leau frache. larrive, il vide la gourde.
118 - Q 1 Question 1. Le voyageur veut faire le moins darrts possible. Mettre en vidence une
stratgie gloutonne (voir chapitre 7) optimale atteignant cet objectif.
118 - Q 2 Question 2. Le voyageur veut verser dans le sable le moins de litres deau possible. Mon-
trer que la stratgie gloutonne prcdente est toujours optimale.
118 - Q 3 Question 3. chaque puits, y compris celui de loasis darrive, un gardien lui fait payer
autant dunits de la monnaie locale que le carr du nombre de litres deau quil vient de
verser larrive du tronon quil a parcouru. Le problme est de choisir les puits o il
doit sarrter pour payer le moins possible. Montrer avec les donnes de lexemple de la
question 5 que la stratgie gloutonne prcdente nest plus optimale.
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 193
Question 4. Construire une solution fonde sur la programmation dynamique dont les 118 - Q 4
lments sont :
popt(i) : somme minimale paye au total depuis le puits numro 1 (loasis de
dpart) jusquau puits numro i, tant donn que le voyageur vide sa gourde
au puits numro i
d(i, j) : nombre de kilomtres entre le puits numro i et le puits numro j
D : volume de la gourde
Pour un logiciel de traitement de texte, on cherche disposer la suite des mots qui forment
un alina de manire rpartir au mieux les espaces dans un sens qui sera prcis ultrieu-
rement. Pour simplifier, on considre un texte sans signes de ponctuation, donc constitu
uniquement de mots (suites de lettres) et despaces. On se donne les rgles suivantes :
chaque mot inscable a une longueur gale son nombre de caractres
et infrieure ou gale celle dune ligne,
les mots dune ligne sont spars par une espace,
toute ligne commence par un mot cal gauche,
chaque espace a la longueur dune lettre,
on ne peut pas dpasser la longueur dune ligne.
Par exemple, pour des lignes de taille gale 26 caractres, on a les deux possibilits
suivantes, parmi un grand nombre (les espaces sont reprsentes par le caractre = ) :
Ce=court=texte=est=format Ce=court=texte=est========
de=deux=faons============ format=de=deux=faons====
diffrentes=============== diffrentes===============
Le premier formatage compte quatre espaces sur la premire ligne, 14 sur la seconde ligne
et 15 sur la troisime. Le second compte 11 espaces sur la premire ligne, sept sur la
194 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
seconde et 15 sur la dernire ligne. Ils comptent tous les deux 33 espaces, et lon souhaite
dpartager ce genre dgalit. cette fin, on mesure la qualit dun formatage par son cot
cf donn comme la somme des carrs du nombre total despaces sur chacune des lignes. Le
cot du premier formatage vaut 42 + 142 + 152 = 437, celui du second 112 + 72 + 152 = 395
et, en consquence, le second est meilleur que le premier.
Le but de cet exercice est de trouver, pour un texte et une longueur de ligne donns,
un (le) formatage de cot minimal.
119 - Q 1 Question 1. Que dire de deux formatages dun mme texte utilisant le mme nombre de
lignes, si lon prend comme cot cf 0 le nombre despaces et non pas cf ?
119 - Q 2 Question 2. On considre les deux formatages suivants (la longueur de ligne est gale
26) du texte : Ce court texte est format de deux faons trs diffrentes .
Ce=court=texte=est=format Ce=court=texte=est========
de=deux=faons=trs======= format=de=deux=faons====
diffrentes=============== trs=diffrentes==========
Que dire dun algorithme glouton (voir chapitre 7) consistant remplir chaque ligne le
plus possible ?
119 - Q 3 Question 3. On prend des lignes de longueur 10. Donner toutes les faons de formater
la phrase Racine est un musicien .
119 - Q 4 Question 4. On considre les N mots m1 , . . . , mN du texte formater, leur longueur
lg(m1 ), . . . , lg(mN ) et L la longueur de la ligne. On note ml(i, j) le cot qui rsulte de
lcriture des mots mi , . . . , mj sur la mme ligne. Compte tenu des principes voqus
prcdemment, on distingue deux cas :
P
on peut mettre mi , . . . , mj sur une ligne ( jk=i lg(mk ) + (j i) 6 L), alors
Pj
ml(i, j) = (L k=i lg(mk ))2 , le carr du nombre total despaces de la ligne,
P
les mots mi , . . . , mj ne tiennent pas sur une ligne ( jk=i lg(mk ) + (j i) > L),
alors ml(i, j) prend une valeur arbitrairement grande, dnote +.
On appelle fopt(i) le cot optimal de lcriture des mots mi , . . . , mN sous la contrainte
que mi soit au dbut dune ligne. Donner la formule de rcurrence qui calcule fopt(i).
119 - Q 5 Question 5. En dduire le principe dun programme qui, connaissant les valeurs de ml,
calcule le formatage dun texte de cot minimal et permet de lcrire ultrieurement. On
en prcisera les complexits spatiale et temporelle.
119 - Q 6 Question 6. Traiter lexemple de la question 3.
119 - Q 7 Question 7. Dans la dmarche propose, on est parti de fopt(i), le cot optimal de lcri-
ture de mi , . . . , mN . Aurait-on pu procder autrement ?
119 - Q 8 Question 8. On pourrait faire dautres choix concernant la comptabilisation des espaces,
par exemple prendre pour une ligne la somme des carrs des nombres despaces. Quel
impact cela aurait-il sur la solution propose prcdemment ?
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 195
Cet exercice illustre une application de compression optimale de texte tant don-
nes des squences de symboles dfinissant le code employ. Ltablissement de
la rcurrence est un peu plus ardu que dans les exercices prcdents. De plus, on
sintresse ici lexplicitation de la procdure de reconstitution du codage optimal.
Question 1. Donner une rcurrence pour calculer le nombre minimum doccurrences de 120 - Q 1
mots du code C ncessaires au codage de D. Par convention, ce nombre minimum vaut
+ si D ne peut tre cod avec C.
Question 4. Appliquer cet algorithme pour : i) le code C = {a, b, ba, abab} et le mot 120 - Q 4
D = bababbaababa, ii) le code C = {a, bc} et le mot D = abbc.
Le seul point de cet exercice mritant une attention particulire concerne lta-
blissement de la rcurrence.
tant donnes une barre de mtal de longueur n centimtres et une table des prix de
vente PR[i] croissants des segments de mtal pour les longueurs i = 1, . . . , n, on cherche
dcouper la barre en segments de faon maximiser le prix de vente. Soit, par exemple :
Longueur i du segment 1 2 3 4 5 6 7 8 9 10
Prix PR[i] 1 5 8 9 10 17 17 20 24 30
196 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
121 - Q 1 Question 1. Sur lexemple, quelle est la dcoupe optimale dune barre de longueur 4 ?
121 - Q 2 Question 2. Donner une formule de rcurrence pour le prix optimal pvopt(n) de la d-
coupe dune barre de longueur n.
121 - Q 4 Question 4. Comment connatre non seulement le prix optimal, mais aussi la longueur
des segments qui composent la dcoupe optimale ?
121 - Q 5 Question 5. Traiter le cas dune barre de longueur 9 avec le tableau de prix donn.
Le principal intrt de cet exercice rside dans lattention qui doit tre porte
ltablissement de la rcurrence, qui, sans tre difficile, rvle quelques particula-
rits.
dure d 1 2 3 4 5
i= 1 110 90 65 55 +
2 120 90 70 50 40
3 90 70 65 60 +
4 65 60 55 + +
la valeur + indiquant que la tche ne peut pas tre ralise avec cette dure. Ici, les
tches 1, 3 et 4 ne peuvent tre effectues en cinq units de temps, et la tche 4 ne peut
mme pas ltre en quatre.
Le problme rsoudre consiste trouver une affectation optimale de dure chacune
des tches considres au sens suivant : pour une dure globale fixe attribue lensemble
P Pn
des tches D = n i=1 di , la somme des cots SC = i=1 c(i, d) est minimale. On appelle
scopt(i, d) le cot associ laffectation optimale de d units de temps aux tches T1 Ti .
Exercice 123. Produit chan de matrices
Exercice 124. Dcoupe de planche
On dispose dune planche de longueur entire N que lon veut dcouper en n segments
P
de longueurs entires l1 , l2 , . . . , ln avec ni=1 li = N. Les segments doivent dcouper la
planche de gauche droite selon leur indice. Par exemple, si N = 10, l1 = 2, l2 = 5 et
l3 = 3, les dcoupes doivent se faire aux abscisses 2 et 7 sur la planche.
l1 = 2 l2 = 5 l3 = 3
l1 = 2 l2 = 5 l3 = 3
ou par le parenthsage (l1 (l2 l3 ))
124 - Q 1 Question 1. Quel est le nombre de dcoupes distinctes possibles ? quel autre problme
celui-ci fait-il penser en termes de combinatoire ?
124 - Q 2 Question 2. Donner la rcurrence qui calcule la valeur de la dcoupe optimale et prciser
la complexit de la procdure associe (qui nest pas demande). Lappliquer lexemple
de lnonc.
l3 = 2
l2 = 1
l4 = 3
l1 = 2
Exercice 125. Les pilleurs de coffres
Des voleurs rentrent dans la salle forte de la banque, o les coffres sont aligns le long du
mur. Ces voleurs veulent ouvrir tous les coffres en un minimum de temps. Le problme
est que les coffres proviennent de fabricants diffrents, ce qui fait quils ne prennent pas
tous le mme temps ouvrir. Chaque coffre est affect un voleur, et les voleurs sont
tous aussi habiles la tche. Ils dcident de diviser le mur en secteurs compss de coffres
contigus, et daffecter un secteur chacun dentre eux.
Exemple Pour illustrer, disons quil y a trois voleurs et neuf coffres, que lon peut numro-
ter de gauche droite le long du mur et dont le temps douverture, en minutes, se rpartit
ainsi :
Numro du coffre 1 2 3 4 5 6 7 8 9
Temps douverture 5 7 3 5 6 3 2 5 3
Exercice 126. Trois problmes dtagres
Une tagre sert ranger des livres dpaisseurs et hauteurs varies. La profondeur des
livres, ainsi que celle de ltagre, ne jouent aucun rle ici, elles sont donc ignores par la
suite. Ltagre est constitue dun ou plusieurs rayons de hauteur fixe ou variable ayant
une certaine largeur, sur lesquels sont poss les livres. Pour simplifier, on admet que les
planches qui forment les rayons ont une paisseur nulle. Le rayon du haut est surmont
dune planche qui dfinit la hauteur totale de ltagre.
On va considrer diffrents problmes de rangement selon les paramtres fixs au dpart
(nombre et hauteur(s) des rayons, largeur de ltagre, ordre des livres en particulier).
Dans la premire partie, on se donne N livres B1 , . . . , BN de diffrentes hauteurs ranger
dans cet ordre, une largeur donne de rayon L, et lon cherche le nombre de rayons (et la
hauteur totale minimale) de ltagre permettant de ranger tous les livres. Dans la partie
suivante, on cherche nouveau ranger lintgralit des livres B1 , . . . , BN dans cet ordre,
dans un nombre fix K de rayons. Ceux-ci ont mme hauteur, ainsi que les livres, et lon
cherche la largeur minimale de ltagre (et de ses rayons). Dans la troisime et dernire
partie, on considre N livres B1 , . . . , BN de mme hauteur et une tagre ayant K rayons
de largeur L donne. Le problme est ici de dterminer le nombre maximal de livres qui
peuvent tre rangs en respectant leur ordre.
ltagre (et donc chacun de ses rayons) a une largeur fixe L, mais le nombre
de rayons est rglable de mme que la hauteur de chaque rayon,
chaque livre Bi est caractris par sa hauteur hi et son paisseur ei .
La figure ci-dessous donne deux faons diffrentes de ranger N = 5 livres sur une tagre
de largeur L = 10 avec des livres dpaisseur ei et de hauteur hi suivantes :
Le problme est de trouver comment disposer les rayons de ltagre pour quelle ait
une hauteur totale minimale (peu importe le nombre de rayons).
Question 1. On note hgmin(i) la hauteur globale minimale dune tagre de largeur L sur 126 - Q 1
laquelle sont rangs les livres Bi , . . . , BN (1 6 i 6 N), avec la convention hgmin(N + 1) = 0
pour la hauteur de ltagre dans laquelle on ne met aucun livre. On note hr(i, j) la hauteur
du rayon o est range la suite de livres commenant par Bi et se terminant par Bj (avec
j > i). On a :
X j
max (h ) si ek 6 L
k
hr(i, j) = ki..j
k=i
+ sinon.
Trouver une relation de rcurrence descendante (ou arrire) dfinissant hgmin(i).
Question 2. En dduire les caractristiques dun algorithme de programmation dyna- 126 - Q 2
mique pour calculer hgmin(1). En donner la complexit temporelle.
Question 3. Appliquer cet algorithme sur lexemple suivant : 126 - Q 3
i 1 2 3 4 5 6
ei 1 2 1 1 2 1
hi 1 2 5 4 3 1
avec L = 4.
comme prcdemment (B1 doit se trouver lextrme gauche du rayon du haut, B2 est
serr droite de B1 ou lextrme gauche du rayon du dessous, etc.). Chaque livre Bi est
caractris par son paisseur ei , et, sans perte de gnralit, tous les livres sont supposs
de mme hauteur.
On cherche la valeur L la plus petite possible qui permet de ranger tous les livres B1 , . . . , BN .
Autrement dit, il sagit de partitionner B1 , . . . , BN en K sections de telle sorte que la lar-
geur de la plus large des sections soit la plus petite possible. Par exemple, avec K = 3
rayons et N = 6 livres dont les largeurs sont les suivantes :
i 1 2 3 4 5 6
ei 5 3 4 1 3 2
le rangement optimal est obtenu en mettant le premier livre sur le rayon du haut, les
second et troisime livres sur le suivant et les trois derniers sur le rayon du bas. La largeur
du rayon le plus large vaut 7. Notons que si lordre des livres navait pas dimportance, un
rangement sur trois tagres de largeur 6 serait possible, par exemple en mettant les livres
B1 et B4 sur la premire tagre, les livres B2 et B5 sur la seconde et, enfin, les livres B3
et B6 sur la dernire.
On note lgmin(n, k), avec 1 6 n 6 N la largeur minimale qui permet de ranger les
n premiers livres B1 , . . . , Bn dans une tagre compose de k rayons (qui sont donc de
largeur lgmin(n, k)). On note ep(i, j) = ei + + ej la somme des paisseurs des livres
Bi , . . . , Bj .
126 - Q 4 Question 4. Montrer que, pour tout n, avec 1 6 n 6 N, on a lgmin(n, 1) = ep(1, n).
126 - Q 5 Question 5. Soit une situation o lon a n livres et k rayons, avec n 6 k. Montrer que
lon peut faire en sorte quil ny ait quun seul livre par rayon. tablir que par consquent
lgmin(n, k) = max({e1 , . . . , en }).
126 - Q 7 Question 7. Dduire des questions prcdentes une relation de rcurrence pour calculer
lgmin(N, K).
i 1 2 3 4
ei 3 3 2 2
que L = 5 et K = 2, on ne peut ranger que trois (M = 3) des quatre livres de lune des
faons suivantes :
B1 sur la premire tagre, B2 et B3 sur la seconde,
B1 sur la premire tagre, B2 et B4 sur la seconde,
B1 sur la premire tagre, B3 et B4 sur la seconde,
B2 sur la premire tagre, B3 et B4 sur la seconde,
B1 et B3 sur la premire tagre, B4 sur la seconde,
B2 et B3 sur la premire tagre, B4 sur la seconde.
Pourtant, lpaisseur totale des livres est 10, et si lon avait le droit de changer leur ordre,
on pourrait tous les ranger en mettant par exemple B1 et B3 sur la premire tagre, B2
et B4 sur la seconde.
Cet exercice traite dun problme daffectation optimale de ressources avec deux
critres doptimalit voisins . La cl de loptimalit rside dans une proprit
simple de la fonction dattribution des paires de skis aux skieurs. Dans le cas
particulier o lon a autant de skieurs que de paires de skis, il savre que la
solution peut tre atteinte par un procd glouton (voir chapitre 7). Dans le cas
gnral dune rsolution par programmation dynamique, une simplification des
calculs est tudie.
On dispose de m paires de skis quil faut attribuer n skieurs, avec m > n > 1. Une
paire de skis et une seule doit tre attribue chaque skieur et on dsire maximiser
la satisfaction globale des skieurs, sachant quun skieur est dautant plus satisfait que la
longueur de la paire de skis quon lui attribue est proche de sa taille.
127 - Q 2 Question 2. Montrer quune fonction fa monotone permet toujours datteindre une af-
fectation optimale.
127 - Q 3 Question 3. En dduire quen prsence dautant de skieurs que de paires de skis (n = m),
un procd glouton ( expliciter) permet de rsoudre le problme.
127 - Q 4 Question 4. Notons affopt(i, j) la somme des carts (en valeur absolue) correspondant
laffectation optimale qui utilise les skis de rang 1 j pour quiper les skieurs de rang 1
i, avec 1 6 i 6 j. Soit la paire de skis de rang j est attribue un skieur, soit elle na pas
t attribue. Montrer que, dans le premier cas, cest obligatoirement au skieur de rang i
que la paire de skis de rang j doit tre attribue.
127 - Q 8 Question 8. Proposer une stratgie remplissant le tableau associ affopt de faon par-
tielle.
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 205
Exercice 128. Lchers dufs par la fentre (le retour)
Cet exercice revient sur le problme trait dans lexercice 112 page 166, au cha-
pitre Diviser pour Rgner . Cependant, on le renforce ici en exigeant que la
garantie de dterminer la rsistance des ufs soit obtenue avec le moins de l-
chers possible dans le pire cas. Aprs avoir examin deux approches fondes sur
des rcurrences, on les compare entre elles et la solution de type Diviser pour
Rgner appele radixchotomie. Enfin, on tablit un lien entre le problme de
lchers dufs et celui de lidentification de tout nombre dun intervalle dentiers
par un nombre fix de questions et un nombre limit de rponses ngatives.
Rappelons tout dabord le problme Lchers1, prsent dans lexercice 112 page 166,
au chapitre Diviser pour Rgner . On dispose dufs tous identiques et on cherche
connatre leur rsistance, cest--dire la hauteur (nombre f dtages) partir de laquelle
ils se cassent si lon les laisse tomber par la fentre dun immeuble. Un uf qui ne sest
pas cass peut tre rutilis, alors que sil sest cass, on lcarte dfinitivement. tant
donns un immeuble de n (n > 1) tages et un nombre initial k (k > 1) dufs, on cherche
la valeur de f. Si les ufs ne se brisent pas mme lchs du dernier tage, la valeur de
f est fixe n + 1, ce qui revient considrer que les ufs se cassent forcment avec un
immeuble ayant un tage de plus que rellement. Lun des objectifs de lexercice 112 page
166, tait aussi de limiter le nombre de lchers pour n et k donns, tout en garantissant
la dtermination de f puisque le nombre de lchers tait lopration lmentaire considre.
possde j tages. Montrer que nblmin peut tre dfini par la rcurrence :
nblmin(i, 0) = 0 16i6k
nblmin(i, 1) = 1 16i6k
nblmin(1, j) = j 1 <j6n
1<i6k
nblmin(i 1, p 1),
nblmin(i, j) = 1 + min max et
p1..j nblmin(i, j p)
1<j6n
128 - Q 2 Question 2. Proposer le principe dun algorithme LchDyn1 driv de faon canonique
de la rcurrence prcdente stockant les valeurs de nblmin dans le tableau NBLM[1..k, 0..
n]. Quelle en est la complexit temporelle ?
128 - Q 3 Question 3. Utiliser cet algorithme pour calculer nblmin(3, 8). Vrifier que nblmin(i, j)
est croissant avec j sur cet exemple, et le montrer dans le cas gnral. En dduire le principe
dun algorithme LchDyn2 calculant nblmin(k, n) en O(k n log2 (n)). Quen conclut-on
quant lintrt de lalgorithme LchDyn1 ?
128 - Q 4 Question 4. Afin de dterminer une squence de lchers associe toute valeur NBLM[i, j]
(ou tout couple (i, j), tel que i > 1, j > 0), on double NBLM dun tableau CH[1 .. k, 0 .. n]
dans lequel CH[i, j] vaut :
la (une) valeur de p associe la valeur optimale NBLM[i, j], pour 2 6 i 6 k
et 2 6 j 6 n,
la valeur 1 pour j = 1 et 1 6 i 6 k dune part, 1 < j 6 n et i = 1 dautre part.
Remarque Les cellules CH[i, 0] ne prsentent pas dintrt puisqualors il ne reste pas
dtages examiner.
j 0 1 2 3 4 5 6 7 8
i=1 / 1 1 1 1 1 1 1 1
2 / 1 1 2 1 2 3 1 2
3 / 1 1 2 1 2 3 4 1
Question 6. Discuter la cohrence des valeurs nblmin(i, j) (ou NBLM[i, j]) et himax(i, l) 128 - Q 6
(ou HIM[i, l]), o i est le nombre dufs, j le nombre dtages de limmeuble et l le nombre
de lchers.
Question 7. Montrer comment utiliser himax pour rsoudre le problme Lchers2 (iden- 128 - Q 7
tification de f coup sr en un nombre minimal de lchers au pire avec k ufs pour un
immeuble de n tages). Expliciter le principe de lalgorithme LchDyn3 ralisant le calcul
et en donner la complexit temporelle.
X
i
himax(i, j) = Cpj 1 6 j 6 n, 1 6 i 6 k.
p=0
Question 11. En dduire le principe de lalgorithme LchDyn4 calculant le nombre mi- 128 - Q 11
nimal de lchers au pire avec k ufs et un immeuble de n tages (au sens du problme
Lchers2 ) de complexit temporelle (k log2 (n)), sachant que lon a dune part liden-
tit Cp+1
n = (Cpn (n p))/(p + 1) pour 0 6 p 6 n et n > 0, dautre part himax(i, r) >
hmax(i, r 1) pour tout r > 1 (qui se dduit de Cpr > Cpr1 ).
Question 13. On va maintenant confronter les diffrentes mthodes de rsolution du pro- 128 - Q 13
blme de lcher dufs : approche DpR appele radixchotomie dans lexercice 112 page
166, et algorithmes fonds sur la programmation dynamique LchDyn2, LchDyn3 ou
LchDyn4. Argumenter le choix dune de ces approches (on pourra ignorer laspect li au
calcul de la squence de lchers).
128 - Q 15 Question 15. On considre lintervalle 1 .. N et on veut pouvoir identifier tout nombre
x de cet intervalle avec au plus Q questions du type x est-il suprieur v ? et au
plus RN rponses ngatives. Quel lien ce problme, appel IdentInterv, entretient-il avec
le problme Lchers3 ? Quand admet-il (au moins) une solution ? Quand cest le cas,
comment identifie-t-on la (une) squence de questions rpondant au problme ?
128 - Q 16 Question 16. On choisit de reprsenter la solution au problme IdentInterv par un arbre
binaire dont chaque nud est tiquet par la valeur v de la question pose et chaque
feuille est la valeur identifie. Complter (tiqueter) larbre partiel ci-dessous pour le cas
N = 299, Q = 12, RN = 3, la racine correspondant la premire question poser.
?
non oui
? ?
non oui non oui
? ? ? ?
non oui
? ?
128 - Q 17 Question 17. Si on considre non plus lintervalle 1 .. 299, mais 1 .. 296, quelle est la
premire question poser ?
128 - Q 18 Question 18. Caractriser les longueurs dintervalle pour lesquelles larbre des questions
est unique.
Exercice 129. Chemin de valeur minimale dans un graphe particulier
6 7
3
10 2
1 3 4
17 4
3
Dans la suite, on considre un graphe orient valu GV = (N, V, P) ayant en outre les
proprits suivantes :
le sommet 1 est point dentre et le sommet n est point de sortie,
tout autre sommet possde au moins un prdcesseur et un successeur,
chaque arc possde une valeur relle quelconque, GV tant reprsent par une
matrice MGV, n lignes et n colonnes, dans laquelle la valeur de llment
MGV[i, j] correspond celle de larc (i, j) (+ est la valeur conventionnelle
utilise si cet arc nexiste pas).
Question 3. Donner les caractristiques (rcurrence, structure tabulaire, stratgie de rem- 129 - Q 3
plissage) dun algorithme de programmation dynamique qui calcule la valeur du (dun)
chemin de valeur minimale entre les nuds 1 et n. Quelles sont ses complexits temporelle
et spatiale ?
Question 4. Traiter lexemple du graphe de la seconde question. 129 - Q 4
210 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Dans la suite, le graphe valu (sur R) GV = (N, V, P) considr ne possde aucune boucle,
et ses sommets sont tiquets de 1 n. Le sommet 1 joue un rle particulier et est appel
source, aussi dnot sc. On recherche la valeur du (dun) chemin de valeur minimale entre
sc et tout autre sommet du graphe GV (+ sil nexiste pas de chemin). La prsence
ventuelle dun circuit valeur positive ne gne pas, puisquun chemin de valeur minimale
ne peut inclure un tel circuit (il existe un chemin sans ce circuit de valeur moindre). Il
en va de mme dun circuit valeur ngative dont les sommets ne sont pas atteignables
partir de sc comme dans le graphe de la figure 9.2.
2 4
7
3
4 3
1 2 3 2
2
4
6 5
Fig. 9.2 Un circuit ngatif apparat dans ce graphe en remplaant larc (5, 6) par (6, 5).
3 6
2
2 4
1 2
1
4
6 2 1
1 5 1 3 4
2 2
5 1
3 8
3 5
3
GV1 GV2
Question 2. On considre un graphe valu GV ayant n sommets et m arcs reprsent par 130 - Q 2
la table de ses arcs AGV[1 .. m, 1 .. 2] et le vecteur de ses valeurs PGV[1 .. m]. AGV[p, 1]
est lorigine de larc p et AGV[p, 2] son extrmit, alors que PGV[p] est la valeur de larc
p. En dduire la version de lalgorithme de Bellman-Ford utilisant la structure tabulaire
VCHVMIN[1..n, 1..2]. Donner sa complexit temporelle en termes de nombre de conditions
values.
Question 3. Appliquer cet algorithme aux deux graphes de la figure 9.3, page 211. 130 - Q 3
Question 4. Expliciter le principe dune solution permettant de reconstruire le (un) che- 130 - Q 4
min optimal de la source sc tout autre sommet. Lillustrer sur le graphe GV1 de la figure
9.3, page 211.
1. constantes
2. n N1 et n = . . . et m N1 et m = . . . et
3. AGV 1 .. m 1 .. 2 N1 et AGV = [. . .] et PGV 1 .. m R et
4. PGV = [. . .] et EstSansCircuitNgatif(GV)
212 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
2
1
2 1
1 4 3
5 1
Quel(s) commentaire(s) lutilisation de cet algorithme sur les graphes GV1 , GV2 et GV3
inspire-t-elle ?
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 213
Question 9. Comparer linterprtation de la valeur VCHVMIN[s] aprs son calcul au pas 130 - Q 9
j avec son homologue dans lalgorithme donn en rponse la question 2.
Aspects complmentaires
Question 10. Comment pourrait-on complter ces algorithmes pour quils puissent aussi 130 - Q 10
rendre un boolen prcisant sil y a ou non (au moins) un circuit de valeur ngative
atteignable depuis la source ?
Question 11. Comment rsoudre le problme de recherche du (dun) chemin de valeur 130 - Q 11
minimale entre tout sommet et un sommet donn appel puits (par opposition source) ?
Question 12. Que penser du problme de recherche du (dun) chemin de valeur maximale 130 - Q 12
dune source donne tout sommet ?
Lalgorithme de Floyd est lui aussi lun des grands classiques des algorithmes
de programmation dynamique relatifs aux graphes orients valus. Il concerne un
problme de cheminement plus gnral que celui de lexercice prcdent, puisquici
on considre les chemins optimaux pour tous les couples de sommets. Lintrt
de cet exercice est double : 1) lalgorithme de Floyd est construit comme une
adaptation de lalgorithme de Roy-Warshall, qui calcule la fermeture transitive
dun graphe (mais ne relve pas de la programmation dynamique proprement
parler puisquil ny a pas recherche doptimum), et 2) il sert de base une famille
dalgorithmes de calcul de chemins optimaux des sens divers : le plus court, le
plus long, celui de probabilit ou de capacit minimale (ou maximale), etc.
chemin(x, y, 0) = (x, y) V 6 n et 1 6 y 6 n
16x
1 6 i 6 n et
chemin(x, y, i 1) ou
chemin(x, y, i) = chemin(x, i, i 1) et 1 6 x 6 n et
chemin(i, y, i 1) 16y6n
131 - Q 1 Question 1. Montrer que cette rcurrence prend en compte (on dit aussi voit ) tous
les chemins et circuits lmentaires, mme si au final elle se limite leurs origines et
extrmits.
131 - Q 2 Question 2. Concernant les chemins non lmentaires, certains sont vus , mais leur
prise en compte dpend de la numrotation des sommets. Les graphes G1 et G2 :
2 3
3 1 4 1 4 2
G1 G2
sont identiques, la numrotation des sommets prs. Expliquer pourquoi on voit le
chemin h3, 1, 2, 1, 4i dans G1 , mais pas son homologue h1, 4, 3, 4, 2i dans G2 .
131 - Q 3 Question 3. crire le code de lalgorithme driv de faon canonique de cette rcurrence,
en adoptant la reprsentation matricielle MG (resp. MG+ ) du graphe G = (N, V) (resp.
G+ = (N, V + )). Quelles en sont les complexits spatiale et temporelle en prenant laccs
aux graphes G et G+ comme opration lmentaire ?
131 - Q 4 Question 4. Vu que le calcul de chemin(x, y, i) nutilise que des lments de dernier
indice (i 1), on peut se contenter de deux tableaux deux dimensions 1 .. n 1 .. n,
lun relatif i et lautre (i 1). Mais, en fait, lalgorithme de Roy-Warshall nutilise
quun tableau 1 .. n 1 .. n et effectue un calcul sur place . Expliquer pourquoi une telle
structure suffit au calcul et tablir la nouvelle rcurrence rsultant de cette simplification.
Lalgorithme de Floyd
Le problme rsolu par lalgorithme de Floyd est le calcul de la valeur du (dun) chemin
optimal, cest--dire de valeur minimale pour tout couple de sommets dun graphe orient
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 215
10
5 3 10 1
1 2 4 1 5 1 2
5
-1 4
2 3
4
2
-3
2
-4
1
4
3 5 3 3
1 8
Question 10. Donner deux faons diffrentes, fondes sur le principe du Petit Poucet , 131 - Q 10
permettant didentifier un (le) chemin optimal pour tout couple de sommets. Les appliquer
au graphe GV2 .
Algbres de chemins
On vient de traiter une adaptation de lalgorithme de Roy-Warshall et on peut en imaginer
dautres qui soient intressantes . Par analogie avec lalgorithme de Floyd, une telle
adaptation est envisageable deux conditions :
Le problme considr consiste rechercher une valeur optimale relative
tous les couples de sommets dun graphe valu. Ceci permet, le cas chant,
de rpondre au problme pos pour des couples spcifiques de sommets, par
exemple : i) dun sommet fix tout autre sommet, ii) de tout sommet x 6= sk
un sommet fix sk , ou encore iii) dun sommet fix si un autre sommet
fix sj .
Le problme peut tre rsolu sur lespace des chemins lmentaires, cest--
dire quaucun circuit nest susceptible de compromettre le rsultat dlivr par
le programme adapt.
Dans lalgorithme de Roy-Warshall, on manipule les chemins au moyen de deux op-
rations, la disjonction ( ou logique) et la conjonction ( et logique), comme lillustre
la rcurrence donne dans lnonc. Ces oprateurs ont t remplacs dans lalgorithme
216 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
de Floyd par deux autres (minimum et addition) qui permettent le calcul appropri des
chemins de valeur minimale. On parle dalgbre de chemins associe au problme trait.
131 - Q 11 Question 11. Pour chacun des problmes suivants, discuter la possibilit dadapter lalgo-
rithme de Roy-Warshall en prcisant : 1) le couple doprateurs sappliquant aux chemins,
2) linitialisation du graphe utilis pour calculer le rsultat recherch, et 3) les types de
circuit posant problme :
la valeur du chemin de valeur maximale pour tout couple de sommets,
la longueur du chemin le plus court pour tout couple de sommets (la longueur
dun chemin tant le nombre darcs qui le composent),
la longueur du chemin le plus long pour tout couple de sommets,
sachant que la valeur dun arc reprsente une probabilit et que celle du
chemin correspondant la concatnation de plusieurs arcs est le produit des
probabilits qui leur sont attaches, la probabilit du chemin de probabilit
minimale (resp. maximale) pour tout couple de sommets,
sachant que la valeur dun arc reprsente une capacit (la capacit dun chemin
est celle de larc de moindre capacit le composant)
a) la capacit du chemin de capacit minimale pour tout couple de sommets,
b) la capacit du chemin de capacit maximale pour tout couple de sommets.
131 - Q 12 Question 12. Donner le principe de lalgorithme calculant le nombre de chemins pour
tout couple de sommets, puis son code.
131 - Q 13 Question 13. Pour tout couple de sommets, on souhaite calculer la valeur du (dun)
chemin de valeur minimale nempruntant pas le sommet intermdiaire de numro k donn.
Prciser quelle condition ce problme peut tre rsolu par un algorithme adapt de celui
de Floyd, puis donner la rcurrence associe.
131 - Q 14 Question 14. Pour tout couple de sommets (x, y), on souhaite calculer la valeur du (dun)
chemin de valeur minimale passant par le sommet intermdiaire de numro k donn. Que
penser dune adaptation de lalgorithme de Floyd ?
chaque case est dote dune valeur (un entier positif, ngatif ou nul), appele
pnalit par la suite, et que le cot dun chemin du tableau est la somme
des valeurs des cases quil emprunte,
un meilleur chemin est un chemin de cot minimal,
sans perte de gnralit, on suppose les lignes numrotes de 1 n du haut
vers le bas et de la gauche vers la droite,
on autorise les dplacements suivants :
a) (i, j) (i, j+1) () si la pr-condition (j+1 6 n) est satisfaite,
b) (i, j) (i 1, j 1) (-) si la pr-condition (1 6 i 1 6
n) et (1 6 j 1 6 n) est vrifie,
c) (i, j) (i 1, j + 1) (%) si la pr-condition (1 6 i 1 6
n) et (1 6 j + 1 6 n) est valide.
On notera quavec ces dplacements, aucun chemin de la case (n, 1) la case (1, n) ne peut
comporter de circuits.
Le chemin emprunt ci-dessus est : h(6, 1), (6, 2), (6, 3), (6, 4), (5, 5), (4, 4), (4, 5), (3, 6),
(2, 5), (1, 4), (1, 5), (1, 6)i. Son cot est de 28.
1 2 3 4
1 2 4 1 0
2 6 2 1 3
3 5 2 3 3
4 0 10 2 7
Question 2. Connaissant les valeurs associes aux cases du tableau T J, tablir la formule 132 - Q 2
de rcurrence pour calculer ccm(i, j), le cot associ au ( un) meilleur chemin allant de
la case (i, j) la case (1, n) avec 1 6 i 6 n, 1 6 j 6 n.
218 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
132 - Q 3 Question 3. Expliciter lvolution du calcul effectu par lalgorithme mettant en uvre
ces formules. Quelles sont les complexits spatiale et temporelle (en nombre de conditions
values) de lalgorithme de calcul de ccm(i, j). Comparer la complexit temporelle celle
des algorithmes gnraux de cheminement dans un graphe valu vus dans les exercices
130 page 210, et 131 page 213.
132 - Q 5 Question 5. Donner les valeurs de ccm, ainsi que le chemin optimal, dans le cas du
tableau T J de la question 1.
132 - Q 6 Question 6. Quaurait-on obtenu si les valeurs des cases (4, 1) et (1, 4) de T J avaient t
respectivement 9 et 5 ?
132 - Q 7 Question 7. Sur quelle autre rcurrence aurait pu tre fonde la solution de ce problme ?
Les arbres binaires de recherche (abr) sont une structure de donnes (voir cha-
pitre 1) permettant de grer lordre sur les valeurs portes par les nuds de
larbre, par exemple les valeurs infrieures (resp. suprieures) celle de la racine
dans le sous-arbre gauche (resp. droit). On tudie ici un problme particulier de
recherche de valeur dans un abr, avec une hypothse probabiliste sur les valeurs
qui sy trouvent. On met en vidence une certaine similitude entre cet exercice
et le produit chan de matrices (exercice 123, page 197).
On sintresse aux arbres binaires de recherche (abr) dont les valeurs sont les entiers
x1 , x2 , . . . , xn tels que x1 < x2 < < xn . Il existe de nombreuses manires diffrentes de
procder pour les construire. Par exemple, dans le cas particulier o pour tout i de 1
5, xi = i, au moins deux abr sont possibles :
A1 A2
4 2
2 5 1 3
1 3 4
Pour simplifier, on assimile tout nud dun tel abr la valeur xi quil renferme. Toute
valeur xi a la probabilit p(xi ) dtre recherche. On appelle cot dun abr A la valeur
P
cabr(A) = n k=1 p(xk ) (dk + 1), o dk est la profondeur de xk dans labr A (la profondeur
de la racine tant 0). La valeur cabr(A) est en fait lesprance du nombre de comparaisons
effectuer pour trouver un lment existant dans labr A. On cherche construire labr
de cot minimal, connaissant les couples (xi , p(xi )). Pour les abr de la figure 9.4, les cots
respectifs valent :
3 p(1) + 2 p(2) + 3 p(3) + p(4) + 2 p(5) pour A1 ,
2 p(1) + p(2) + 2 p(3) + 3 p(4) + 4 p(5) pour A2 .
Question 2. Soit sag(A) (resp. sad(A)) le sous-arbre gauche (resp. droit) dun abr A et 133 - Q 2
spr(A) la somme des probabilits associes aux valeurs des nuds de A. Si A est vide, on
pose spr(A) = 0. Montrer que :
i 1 2 3 4 5
xi 1 2 3 4 5
pi 0.05 0.1 0.2 0.15 0.5
Cet exercice se situe dans le cadre de lexploration dun arbre. Il prsente plusieurs
singularits par rapport la quasi-totalit de ceux du chapitre : i) les lments de
la rcurrence ne seront pas stocks dans une structure tabulaire, mais directement
dans larbre, ii) lalgorithme construit nest pas itratif mais rcursif, et iii) la
construction de la solution optimale elle-mme se fait en mme temps que le
calcul de la valeur qui lui est associe.
Soit un arbre a non vide, non ordonn (dont les fils dun nud sont considrs comme
un ensemble de nuds). Chaque nud u (feuilles comprises) possde un poids (entier
positif) not pds(u). On dfinit le poids P(S) dun sous-ensemble S de nuds de a comme
la somme des poids des nuds qui le composent :
X
P(S) = pds(u).
uS
On dit que deux nuds u et v sont adjacents quand u est le pre de v ou quand v est
le pre de u. Un ensemble de deux nuds ou plus est dit indpendant sil ne contient
aucun couple de nuds adjacents. On recherche S , un sous-ensemble indpendant de
poids maximal des nuds de a et son poids P(S ). La figure 9.5 donne un exemple darbre
et de sous-ensemble indpendant.
1 3
2 5 3 4
4 10 5 4 6 2 7 3 8 2
9 7 10 6
Fig. 9.5 Un exemple darbre. Le poids dun nud figure ct de son identifiant qui
est encercl. Lensemble indpendant {1, 4, 5, 6, 7, 8} a pour poids 24.
Dans la suite, on considre des arbres non ordonns quelconques o chaque nud u a
la structure suivante :
1. identifiant id,
2. poids pds,
3. valeur optimale vso du sous-arbre de racine u,
4. ensemble eso des identifiants des nuds du sous-ensemble indpendant de poids
maximal de racine u,
5. ensemble fls des identifiants des fils de u.
Ce type darbre est dfini de faon inductive, comme les arbres binaires (voir section
??, page ??). Le programme qui suit illustre lutilisation de larbre de la figure 9.6 page 221 :
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 221
1. constantes
2. aqe = {/} {(id, pds, vso, eso, fls) | id N1 et pds N1 et
3. vso N1 et eso N1 et fls aqe}
4. variables
5. t aqe
6. dbut
7. t (1, 7, 15, {1, 6},
8. {(2, 1, 1, {2}, /), (3, 4, 8, {6}, {(6, 8, 8, {6}, /)}), (4, 2, 2, {4}, /), (5, 2, 2, {5}, /)}) ;
9. pour e t.fls faire
10. crire(le nud didentit , e.id, a le poids , e.pds)
11. fin pour
12. fin
Ainsi, aqe tant lensemble de tous les arbres ayant la structure retenue, ce programme
crit lidentifiant et le poids de chacun des fils de la racine de larbre t de la figure 9.6,
page 221.
1 7
2 1 3 4 4 2 5 2
6 8
Fig. 9.6 Larbre du programme exemple o ne figurent que les identifiants et les poids
des diffrents nuds.
Question 3. On suppose disponible lopration procdure Collecte(a ; : modif vof, vopf, 134 - Q 3
eof, eopf) dlivrant pour larbre a de racine r :
P
vof la valeur ufils(r) P(Su ),
P
vopf la valeur upetitsfils(r) P(Su ),
eof les identifiants des nuds de lensemble indpendant de poids maximal
de chacun des fils de r,
eopf les identifiants des nuds de lensemble indpendant de poids maximal
de chacun des petits-fils de r.
222 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Cette procdure doit tre appele sur un arbre, dont les cinq composants num, pds, vso,
eso et fls sont renseigns pour tout nud autre que la racine. Ainsi, cette procdure se
limite extraire les valeurs quelle doit rendre, sans calcul proprement parler.
1 4, /, /, /
4 7, 7, {4}, 5 6, 6, {5},
o tout nud est tiquet par son identifiant et complt par ses quatre autres compo-
sants ; lappel de Collecte retourne 5 pour vof, 13 pour vopf, {2, 3} pour eof et {4, 5} pour
eopf.
134 - Q 4 Question 4. Appliquer cet algorithme larbre de la figure 9.5 page 220, pour en dter-
miner le (un) sous-ensemble indpendant de poids maximal.
9.1.4 Squences
Exercice 135. Plus longue sous-squence croissante
Outre le fait quil sagit dun problme classique sur les squences, cet exercice
illustre un cas o la valeur optimale recherche ne se trouve pas un emplacement
prdtermin de la structure tabulaire utilise.
On travaille sur des squences de nombres entiers positifs de longueur au moins gale
2. Par exemple, une telle squence est u = h11, 5, 2, 8, 7, 3, 1, 6, 4, 2i, de longueur 10. On
note de manire gnrale x = hx[1], . . . , x[i], . . . , x[n]i une squence de longueur n > 1. On
appelle sous-squence croissante (SSC) de x une squence de longueur infrieure ou gale
n, dont :
Par exemple, h2, 3, 4i et h1, 6i sont des SSC de u. La seconde est particulire, puisque
ses lments se suivent dans u. On dit quelle est une sous-squence croissante contigu
(SSCC) de u.
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 223
Le but de cet exercice est de trouver la longueur des plus longues SSCC et SSC dune
squence quelconque x, notes lsscc(x) et lssc(x). Par exemple, les plus longues SSCC de
u sont h2, 8i et h1, 6i, donc lsscc(u) = 2. Les plus longues SSC de u sont h2, 3, 4i et h2, 3, 6i,
ce qui conduit lssc(u) = 3. Lopration lmentaire pour lvaluation de la complexit
est la comparaison des nombres de la squence x considre.
Question 1. Montrer que, pour toute squence x, on a : lssc(x) > lsscc(x). 135 - Q 1
Question 2. Donner le principe dun algorithme en (n) pour calculer lsscc(x). 135 - Q 2
Question 3. Pourquoi nest-il pas possible de calculer lssc(x) en (n) avec un algorithme 135 - Q 3
analogue au prcdent ?
Question 4. On va construire un algorithme de programmation dynamique qui calcule 135 - Q 4
lssct(i) la longueur de la plus longue sous-squence de x dont le dernier lment est x[i].
Dans lexemple prcdent, on a :
i 1 2 3 4 5 6 7 8 9 10
u[i] 11 5 2 8 7 3 1 6 4 2
lssct(i) 1 1 1 2 2 2 1 3 3 2
Connaissant lssct(1), . . . , lssct(n), le calcul de lssc(x) est immdiat par une boucle recher-
chant le maximum de lssct(i) pour i 1 .. n. Donner la rcurrence dfinissant lssct(i).
En dduire le programme de calcul de lssc(x) pour toute squence x de longueur n, per-
mettant de plus didentifier ultrieurement une sous-squence de cette longueur. On en
prcisera les complexits spatiale et temporelle.
Question 5. Appliquer cet algorithme sur la squence u = h11, 5, 2, 8, 7, 3, 1, 6, 4, 2i. 135 - Q 5
Cet exercice est assez semblable celui trait en exemple dans lintroduction
de ce chapitre et peut tre vu comme son inverse . Lintrt principal porte
sur ltablissement de la rcurrence et de la proprit liant la longueur dune
plus longue sous-squence et dune plus courte sur-squence communes deux
squences.
136 - Q 1 Question 1. En sinspirant de celle tablie dans lexercice trait en dbut de chapitre,
donner une rcurrence complte de calcul de cssc.
136 - Q 2 Question 2. En dduire le principe dun algorithme calculant la longueur de la plus courte
sur-squence commune aux squences x et y (et cette sur-squence elle-mme). En prciser
les complexits spatiale et temporelle.
136 - Q 3 Question 3. Appliquer cet algorithme aux squences u = vache et v = veau.
136 - Q 4 Question 4. Montrer que pour tout couple de squences x, y tel que |x| = m et |y| = n,
on a :
lssc(n, m) + cssc(n, m) = m + n.
Cet exercice peut tre vu comme une variante de celui abord dans lintroduction
de ce chapitre. Il trouve son application dans le domaine des traitements de
chanes de caractres et du gnome.
Dfinitions
On admet que lon peut insrer autant de symboles que lon veut dans une squence x
sans en changer la signification, savoir celle de la squence sans symboles ; on appelle
super-squence de x la squence x 0 avec de telles insertions. Par exemple, si u = bcaa,
une super-squence de u est bcaa. Par abus de langage, on dira que la longueur de
cette super-squence est 7.
b c a a
| | | | | |
a c b c a
a c b c a
b c a a
Une trace doit tre telle que deux traits dassociation entre lettres ne se croisent ja-
mais. Sous cette contrainte, on peut construire un 1 alignement quivalent une trace et
construire de faon unique un alignement partir dune trace. Un alignement ou une trace
peut sinterprter comme une suite doprations lmentaires ddition entre squences :
insertions, suppressions et transformations de lettres pour former la seconde squence
partir de la premire. Dans lexemple prcdent, lalignement sinterprte comme la suite
de transformations suivante :
1. insertion de a 4. suppression de c
2. insertion de c 5. transformation de a en c
3. transformation de b en b 6. transformation de a en a
Pour donner une valeur aux cots des insertions, des suppressions et des transformations,
on utilise une matrice de nombres rels positifs ou nuls dfinie sur (|| + 1) (|| + 1)
qui correspond une distance : elle est symtrique, de diagonale nulle et vrifie lingalit
triangulaire. La valeur dun lment de cette matrice peut sinterprter comme le cot
pour transformer un symbole en lautre ou comme le cot de suppression et dinsertion
pour chaque symbole. Par exemple, sur lalphabet constitu des trois lettres a, b et c,
une telle matrice pourrait tre :
a b c
0 1 1 1
a 1 0 1.5 1.2
b 1 1.5 0 1.7
c 1 1.2 1.7 0
Dans cet exemple, le cot de suppression de a est 1 ([a, ] = 1), le cot dinsertion de
b est 1 ([, b] = 1) et le cot de transformation de a en c est 1.2 ([a, c] = 1.2).
On appelle cot dun alignement la somme des cots lmentaires des oprations qui
le constituent. Le cot de lalignement :
b c a a
| | | | | |
a c b c a
est donc : 1 (insertion de a) + 1 (insertion de c) + 0 (transformation de b en b) + 1
(suppression de c) + 1.2 (transformation de a en c) + 0 (transformation de a en a) = 4.2.
Un autre alignement entre les mots u = bcaa et v = acbca est par exemple :
b c a a
| | | | |
a c b c a
b c a a
| | | | | |
a c b c a
b c a a
| | | | | |
a c b c a
Dans la suite, on ne considre que des alignements nassociant aucune paire de symboles .
Le problme
Le problme est de trouver le cot dun alignement optimal, cest--dire le moins co-
teux, entre deux squences x et y. On appelle (x, y) le cot dun (de l)alignement op-
timal entre les squences x et y, et calopt(i, j) le cot de lalignement optimal entre le
prfixe de longueur i de y et le prfixe de longueur j de x. On cherche donc la valeur
(x, y) = calopt(|y|, |x|) = calopt(n, m).
137 - Q 1 Question 1. Cette question vise tablir une relation de rcurrence du calcul de calopt
(i, j). Pour ce faire, on va reformuler le problme comme un problme de recherche de che-
min de valeur minimale dans un graphe. Cependant, compte tenu de la forme particulire
du graphe traiter, on va dvelopper une solution spcifique (adapte la topologie
particulire du graphe), comme cela a dj t fait dans lexercice 132, page 216. On re-
marque en effet quun alignement peut sinterprter comme un chemin dans un graphe,
ainsi que lillustre lexemple qui suit. Le chemin entre le nud tiquet (0/0) et le nud
tiquet (4/5) (arcs en gras) dans le graphe ci-dessous reprsente lalignement :
a c b c a
| | | | | |
b c a a
a c b c a
a) Dfinir dans le cas gnral un tel graphe pour deux squences quelconques x et y (donner
en particulier la valeur attribue aux arcs) et montrer quun alignement optimal entre
deux squences correspond au calcul dun chemin de valeur minimale dans ce graphe.
b) Calculer le nombre dalignements diffrents entre deux squences x et y.
c) Compte tenu de la forme particulire du graphe, donner une relation de rcurrence
pour calculer calopt(i, j) comme la valeur dun chemin de valeur minimale entre le
nud (0/0) et le nud (i/j) de ce graphe.
Question 2. Donner lalgorithme (dit de Wagner et Fischer WF ) qui calcule le cot 137 - Q 2
(x, y) de l(un des) alignement(s) de cot minimal entre deux squences quelconques,
connaissant la matrice . Quelles en sont les complexits spatiale et temporelle en fonction
de m = |x| et n = |y| ? Quels algorithmes standard de calcul de plus court chemin
aurait-on pu envisager dutiliser ? Situer leur complexit temporelle par rapport celle de
lalgorithme WF.
Question 3. On prend lalphabet du franais, avec : 137 - Q 3
pour toute lettre : [, ] = [, ] = 2 ;
pour toute lettre : [, ] = 0 ;
si et sont deux consonnes ou deux voyelles diffrentes : [, ] = [, ] =
1;
si est une consonne et une voyelle : [, ] = [, ] = 3.
Calculer (coquine, malin).
Question 4. Comment est-il possible de reconstituer un alignement optimal ? Expliciter 137 - Q 4
un (l) alignement optimal pour lexemple prcdent, ainsi que pour les chanes u = est et
v = rien.
Question 5. Montrer que lon peut trouver une solution o la complexit en espace est 137 - Q 5
rduite (n). crire le programme correspondant, appel Wagner et Fischer linaire
(WFL).
Question 6. Si x et y dsignent les squences miroir de x et y, comment calculer un 137 - Q 6
alignement optimal entre x et y en fonction dun alignement optimal entre x et y ?
228 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
137 - Q 7 Question 7. Montrer que, puisque dfinit une distance, alors dfinit aussi une distance
(do le titre de cet exercice). Comment tirer parti de la proprit de symtrie pour
amliorer la complexit spatiale de lalgorithme WFL ?
Cet exercice est un problme classique sur les squences, dans lequel on cherche
dterminer un cot optimal de transformation dune squence en une autre. La
base des associations entre symboles des squences diffre quelque peu de celle de
lexercice prcdent, ce qui constitue en partie loriginalit de cet exercice.
On cherche calculer une association optimale entre deux chanes dfinies sur un al-
phabet . cet effet, on dispose dune distance sur qui se reprsente par une matrice
dfinie sur || ||, symtrique, de diagonale nulle et vrifiant lingalit triangulaire. On
appelle association entre deux chanes x = x[1], . . . , x[m] et y = y[1], . . . , y[n] une suite
de couples (k, l), o k indice un symbole de x et l un symbole de y, qui doit respecter les
contraintes suivantes :
aucun symbole ne peut tre dtruit ou insr, chaque symbole de x doit
donc en correspondre au moins un dans y et rciproquement,
si plusieurs symboles de x (respectivement y) correspondent un symbole
de y (respectivement x), ils doivent tre contigus,
le couple (k, l) est suivi du couple (k 0 , l 0 ) tel que k 0 = k + 1 ou (non exclusif)
l 0 = l + 1.
Par exemple, entre les squences u =bcaa et v =acbca, on peut tablir, parmi beaucoup
dautres, lassociation :
h(b, a), (b, c), (b, b), (c, b), (c, c), (a, a), (a, a)i
qui se dcrit sur les indices par :
h(1, 1), (1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5)i
ou par la figure qui suit :
b c a a
a c b c a
De manire plus formelle, une association est une suite de couples dindices telle que :
le premier terme de la suite est le couple (1, 1) ,
le dernier terme de la suite est le couple (m, n) ,
le terme (k, l), lexception de (m, n), ne peut tre suivi que de lun des
trois termes (k, l + 1), (k + 1, l) ou (k + 1, l + 1).
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 229
chaque couple (k, l) composant une association correspond une valeur de la matrice
: la distance entre les lettres de rang k (x[k]) et l (y[l]) dans . Le cot de lassociation
est dfini comme la somme des valeurs de tous ses couples. Par exemple, pour la matrice
suivante dfinie sur = {a, b, c} :
a b c
a 0 2 1.5
b 2 0 1
c 1.5 1 0
2 + 1 + 0 + 1 + 0 + 0 + 0 = 4.
La dissemblance entre deux squences est dfinie comme le cot de lassociation qui a
le cot le plus faible parmi toutes les associations possibles entre ces deux squences. On
cherche un algorithme efficace pour la calculer.
Question 1. Quelle est la dissemblance entre les squences u = a et v = aa pour la 138 - Q 1
matrice donne prcdemment ? Entre les squences u = aab et v = abb ? Entre les
squences u = ab et v = bac ? Donner un exemple non trivial dun couple de squences
de dissemblance nulle.
Question 2. Proposer une relation de rcurrence calculant la dissemblance entre deux 138 - Q 2
squences x et y. Indication : utiliser le fait que, pour tout couple de squences, le dernier
symbole de la premire est associ au dernier symbole de la seconde.
Question 3. Dfinir la structure de donnes utiliser et la progression de son remplissage, 138 - Q 3
puis crire le programme effectuant le calcul de la dissemblance entre deux squences. Quels
en sont les complexits spatiale et temporelle ?
Question 4. Appliquer lalgorithme avec u =acbca et v =bcaa pour la matrice donne 138 - Q 4
auparavant.
Question 5. Expliquer comment reconstituer une (l)association optimale. En donner une 138 - Q 5
pour lexemple prcdent.
Question 6. Comment un tel programme pourrait-il servir dans un correcteur orthogra- 138 - Q 6
phique de traitement de texte (dont on mettra en vidence les limites) ?
230 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Lintrt principal de cet exercice rside dans le fait quil peut tre assez aisment
rsolu pour peu que lon pense le reformuler comme un problme de squences.
On considre un ensemble de n lphants (n > 2). Chaque lphant est reprsent par
un triplet (pds(i), int(i), val(i)), o pds(i) est le poids de llphant i, int(i) est une
mesure de son intelligence (plus son intelligence est grande, moins llphant est balourd)
et val(i) est sa valeur. On suppose toutes les intelligences et tous les poids diffrents et
on cherche le sous-ensemble des lphants caractris par le sous-ensemble S des entiers
de lintervalle 1 .. n, qui satisfait aux deux conditions suivantes :
1. pour tout couple (i, j) de S, (pds(i) < pds(j)) (int(i) < int(j)),
2. pour tous les sous-ensembles qui respectent la condition prcdente, la valeur totale
P
val(i) est maximale.
iS
i 1 2 3 4 5 6
pds 2300 2000 2800 2100 2500 2600
int 7 14 13 11 6 9
val 10 80 40 50 20 15
huit sous-ensembles dau moins deux lphants vrifient la premire condition : {1, 3}, {1, 6},
{3, 4}, {3, 5}, {3, 6}, {5, 6}, {1, 3, 6}, {3, 5, 6}. Parmi eux, le meilleur est {3, 4} pour une valeur
totale de 90.
139 - Q 1 Question 1. Donner le principe dune solution par essais successifs. Quelle en est la com-
plexit au pire ?
139 - Q 2 Question 2. Proposer une solution fonde sur la programmation dynamique ce pro-
blme. Comparer sa complexit celle de la solution prcdente.
139 - Q 3 Question 3. Appliquer la solution dveloppe la question prcdente lexemple des
six lphants ci-dessus.
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 231
9.1.5 Images
Exercice 140. Triangulation optimale dun polygone convexe
Cet exercice traite dune question dont une application se situe dans le domaine
de limagerie 3D. Ltablissement de la rcurrence ncessite au pralable de trou-
ver une bonne stratgie de triangulation, ce qui constitue un des points cls
de la rsolution.
s5 (22, 12)
s0 (0, 10)
s6 (10, 0)
` partir des coordonnes des n sommets dun polygone convexe P, on dfinit la longueur
dune triangulation de P comme la somme des longueurs des cordes qui la composent. Le
problme est le suivant : tant donn un polygone convexe P, trouver une triangulation
minimale de P, cest--dire une triangulation de P de longueur minimale. Nous suppo-
serons par la suite que le polygone tudi possde n sommets tiquets dans le sens des
aiguilles dune montre (appel aussi sens rtrograde ou contraire du sens trigonomtrique)
nots s0 , s1 , . . . , sn1 .
nbtr1(3) = 1
nbtr1(4) = 2
nbtr1(n) = n nbtr1(n 1) n>5
s2 s3
s1 s4
s0 s5
s6
Il faut donc chercher une stratgie alternative UnTrUnPol vitant lcueil prcdent,
cest--dire prenant toujours en compte toutes les triangulations possibles (compltude),
mais sans doublons (minimalit). On remarque tout dabord que tout ct du polygone
initial appartient un et un seul des triangles dune triangulation. On se fixe un ct
not (si , si+1 ) et on considre la stratgie UnTrDeuxPol consistant tracer depuis tout
sommet autre que si et si+1 , un triangle dont (si , si+1 ) est un ct, ce qui est rsum dans
la figure 9.9. Nous laissons au lecteur le soin de vrifier que lensemble des triangulations
obtenues possde bien les deux proprits voulues (compltude et minimalit).
si+k
Question 2. La stratgie UnTrDeuxPol propose vaut en particulier si lon choisit comme 140 - Q 2
ct de rfrence (sn1 , s0 ) qui dcompose le polygone initial en :
un triangle de sommets s0 , sj (j 1 .. n 2) et sn1 ,
un polygone de sommets s0 sj (inexistant pour j = 1),
un polygone de sommets sj sn1 (inexistant pour j = n 2).
Les deux polygones ainsi engendrs ayant des sommets de numros croissants, on est libr
de la gestion de questions lies la circularit du problme. Donc, de faon gnrale, on va
considrer la triangulation minimale du polygone de sommets si , . . . , si+t1 ayant t cts
tel que i + t 1 < n, en prenant le ct de rfrence (si , si+t1 ), comme le montre la figure
suivante :
si+k
si+t1
si
o k varie de 2 (t 2). Expliquer pourquoi le polygone P doit tre convexe pour que
cette stratgie soit convenable.
Question 4. Donner les lments (structure tabulaire, stratgie de remplissage, emplace- 140 - Q 4
ment de la solution recherche) dun algorithme dcoulant de la formule prcdente. En
prciser les complexits spatiale et temporelle.
s3 (8, 22)
s4 (16, 20)
s5 (20, 17)
s2 (2, 13) s6 (21, 13)
s1 (0, 4) s7 (20, 5)
s0 (5, 0) s8 (15, 1)
234 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Lintrt de cet exercice rside dans la comparaison entre deux approches pour
rsoudre le problme pos, lune itrative, lautre fonde sur la programmation
dynamique.
Soit une image rectangulaire de largeur n et de hauteur m compose de pixels noirs (1)
et blancs (0) reprsente par la matrice IMG[1 .. m, 1 .. n]. On cherche le ct c de la plus
grande sous-image carre de IMG compltement noire. Par exemple, dans limage de la
figure 9.10 page 234, o m = 6 et n = 8, le plus grand carr noir est unique. Il a pour ct
3 et stend sur les lignes 2 4 et les colonnes 2 4 (avec la convention de numrotation
des lignes de bas en haut et des colonnes de gauche droite qui est utilise tout au long
de lexercice).
6 5 5 5
5 5 5 5
4 5 5 5 5
3 5 5 5 5 5
2 5 5 5 5
1 5 5 5 5 5
1 2 3 4 5 6 7 8
Fig. 9.10 Une image noir et blanc 6 8 et son plus grand carr noir (encadr)
141 - Q 1 Question 1. On va tout dabord construire une solution itrative en utilisant la procdure
dfinie dans lexercice 114 page 173, calculant le ct du plus grand carr sous un histo-
gramme. Prciser le principe de cette solution et en dterminer la complexit temporelle
en termes de nombre de conditions values. Lappliquer limage de la figure 9.11, page
235.
141 - Q 2 Question 2. On entreprend maintenant la rsolution du problme dans le cadre de la
programmation dynamique. On appelle cpgcn(i, j) le ct du plus grand carr noir de
coin nord-ouest de coordonnes (i, j). tablir la rcurrence calculant cpgcn.
141 - Q 3 Question 3. Expliciter la structure tabulaire utiliser pour la mise en uvre et la stra-
tgie permettant de la remplir.
141 - Q 4 Question 4. Donner lalgorithme de programmation dynamique correspondant, en prci-
sant ses complexits spatiale et temporelle. Comparer la complexit temporelle celle de
la solution itrative.
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 235
8 5 5 5
7 5 5 5 5 5 5 5
6 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5
4 5 5 5 5 5 5 5
3 5 5 5 5 5 5 5 5 5 5
2 5 5 5 5 5
1 5 5 5 5 5 5 5 5
1 2 3 4 5 6 7 8 9 10
Exercice 142. Segmentation dune image
Loriginalit de cet exercice rside dans le fait quil est le seul de cet ouvrage dans
lequel les complexits spatiale et temporelle dun algorithme de programmation
dynamique sont certes polynomiales, mais de degr suprieur 3.
5 5 5 5
5 5 5
5 5
5 5 5
236 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
142 - Q 1 Question 1. Reprsenter la segmentation prcdente par un arbre dont chaque nud
(feuilles comprises) est associ lun des rectangles (par exemple en coordonnes cart-
siennes). Larbre est-il unique ? Combien de nuds internes (non feuilles) possde-t-il ?
Quelle proprit ont les feuilles ?
142 - Q 2 Question 2. Comment peut-on introduire dans cet arbre une numrotation des coups de
guillotine ?
142 - Q 3 Question 3. tablir une relation de rcurrence pour calculer le nombre minimal de coups
de guillotine ncessaires pour segmenter une image quelconque de m lignes et n colonnes
(m, n > 1).
142 - Q 4 Question 4. Proposer une structure tabulaire et expliciter la stratgie gouvernant son
remplissage.
5 5
5
5 5 5
9.1.6 Jeux
Exercice 143. Empilement de briques
Cet exercice, comme quelques autres, ncessite une tape pralable danalyse me-
nant une nouvelle formulation du problme. En effet, le problme initial consi-
dre un nombre infini de briques, qui ne peut donc tre gr dun point de vue
algorithmique. Aprs avoir identifi un nombre utile fini de briques, il devient as-
sez ais dtablir la rcurrence servant de base la rsolution par programmation
dynamique.
On dispose de briques de n types diffrents, et pour chaque type dun nombre illimit
dexemplaires. Une brique de type i est un paralllpipde rectangle dont les cts ont
pour longueur c1i , c2i et c3i , avec c1i 6 c2i 6 c3i .
Question 1. Montrer quil y a au plus trois faons rellement diffrentes de poser une 143 - Q 1
nouvelle brique sur une brique dj pose.
Question 2. Montrer que, dans un empilement, il ne peut y avoir au plus que deux briques 143 - Q 2
dun type donn.
Question 3. Reformuler le problme comme un empilement optimal, avec un choix non 143 - Q 3
plus parmi un nombre illimit de briques, mais parmi 3n objets diffrents.
Question 4. Donner la formule de rcurrence permettant de construire lempilement le 143 - Q 4
plus haut. Prciser la structure tabulaire utilise dans lalgorithme associ et la progression
du calcul. Donner la complexit temporelle de cet algorithme en nombre de conditions
values.
Question 5. Traiter la situation avec les trois briques B1, B2 et B3 de dimensions respec- 143 - Q 5
tives 10 12 16, 8 9 18 et 4 6 25.
Dans cet exercice, on revient sur le jeu patagon dj abord dans lexercice 18,
page 11. Lobjectif de ce jeu est de maximiser le gain du joueur qui choisit des va-
leurs dans un tableau de faon successive (ou tire des cartes values disposes
face expose), sans pouvoir en prendre deux conscutives.
On a vu lexercice 18 page 11, la dfinition du jeu patagon. Sous une forme un peu
diffrente, on peut dire quil consiste, tant donn un tableau T [1 .. n] dentiers strictement
P
positifs, trouver la valeur maximale, sopt(n) = iI T [i], obtenue partir dun ensemble
I dindices entre 1 et n (n > 1) tel que I ne contient pas deux indices conscutifs.
Dans ce jeu, il sagit dliminer un maximum des robots ennemis qui attaquent une pla-
nte. Les robots arrivent par groupes, chaque groupe de robots tant espac dune unit
de temps (ou instant). On sait combien vont arriver et quels instants. Par exemple,
linstant 1 va arriver un robot, suivi de dix linstant 2, de dix autres linstant 3 et dun
dernier robot qui arrivera seul linstant 4.
La dfense de la plante est constitue dune machine vaporiser les robots (MVR).
Quand, linstant t, la MVR est charge au niveau M, elle est capable de faire disparatre
dans latmosphre M des N robots arrivant cet instant (tous, si M > N). Ainsi, si dans
lexemple dattaque dcrit prcdemment la MVR est dclenche linstant 3 avec un
niveau de charge M = 4, elle fera disparatre quatre des dix robots arrivant linstant 3.
Si elle nest dclenche qu linstant 4, le seul robot arrivant cet instant sera vaporis.
Il est noter que la MVR se dcharge compltement chaque tir, quelle que soit la
taille du groupe de robots venant darriver. Il faut alors la laisser se recharger ; son niveau
de charge est une fonction croissante du temps. La fonction de chargement de la machine
dont on dispose, est par exemple la suivante :
i 1 2 3 4 5
f(i) 1 2 4 8 14
Dans cet exemple, il faut trois units de temps la MVR pour se recharger au niveau 4,
quatre units pour se recharger au niveau 8, etc.
Question 2. Dfinir nbrvopt(j) (j > 0) en fonction de nbrvopt(i) pour 0 6 i < j, qrob(j) 145 - Q 2
et f. En dduire la rcurrence complte permettant le calcul de nbrvopt(n).
Cet exercice concerne un jeu deux joueurs pour lequel deux stratgies de jeu
sont successivement tudies. La premire vise dterminer le gain maximal du
joueur commenant en premier. Ce gain constitue une borne suprieure celui
qui peut tre atteint dans lautre stratgie (classique) dans laquelle chaque joueur
cherche amasser un gain maximal. Les algorithmes obtenus dans chacun des
cas se rvlent simples et assez voisins.
On a deux joueurs et, sur une table, une ligne de 2n (n > 1) cartes avec un nombre crit
sur chacune delles. Lensemble des cartes est tout moment visible des deux joueurs.
Chaque joueur, tour de rle, prend une des deux cartes situes aux extrmits de la
ligne. La carte disparat alors du jeu, et le gain du joueur augmente du nombre crit sur
la carte.
Approche collaborative
On se pose dabord la question de savoir quel gain maximal pourrait rcuprer le joueur
qui joue le premier, ce qui revient supposer que son adversaire collabore au maximum
avec lui.
240 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
146 - Q 1 Question 1. Montrer sur un exemple que le gain maximal nest pas toujours gal la
somme des n plus grandes valeurs des cartes.
146 - Q 2 Question 2. Donner une rcurrence qui permet de calculer le gain final maximal du joueur
qui joue le premier.
146 - Q 3 Question 3. En dduire un algorithme de complexits spatiale et temporelle en (n2 )
pour calculer cet optimum.
146 - Q 4 Question 4. Fournir une trace de lexcution de cet algorithme avec la ligne de cartes :
12 7 6 10 8 5
146 - Q 5 Question 5. Montrer que, dans cette approche, le joueur jouant en premier ne peut faire
moins bien que match nul avec lautre joueur.
Approche comptitive
On suppose maintenant que chacun des deux joueurs cherche gagner.
146 - Q 6 Question 6. Donner une rcurrence qui permet de calculer le gain final maximal du joueur
qui joue le premier, en tenant compte du fait que chaque joueur cherche maximiser son
propre gain.
146 - Q 7 Question 7. Dcrire le principe de lalgorithme calculant cet optimum. Prciser o se
trouvent, dans la structure tabulaire utilise, le gain maximal du joueur dbutant le jeu
et celui de son adversaire. Situer lalgorithme par rapport celui de la question 3.
146 - Q 8 Question 8. Appliquer cet algorithme sur la ligne de six cartes donne prcdemment.
146 - Q 9 Question 9. Proposer une stratgie gloutonne selon laquelle le joueur jouant en premier
gagne ou fait match nul. En dduire quil en va de mme avec la stratgie fonde sur la
programmation dynamique. La stratgie gloutonne conduit-elle au gain maximal ?
CHAPITRE 9. PROGRAMMATION DYNAMIQUE 241
Dans cet exercice qui est un standard, on tudie la composition dune somme
fixe avec un systme montaire donn. On cherche principalement construire
une solution de type programmation dynamique telle que le nombre de pices
rendu est minimal, et ce pour un systme montaire quelconque. Cette solution
se rvle simple et efficace pour autant que lon reste raisonnable quant aux
montants considrs.
On sintresse au rendu de monnaie (avec des pices uniquement) lorsquun client paie
un petit commerant avec une somme suprieure au montant de son achat. Le problme est
darriver exactement une somme N donne en choisissant dans la caisse un multiensemble
de pices dont chacune possde une valeur fixe. Par exemple, dans le systme numraire
de la zone euro, si le client effectue un achat de 810 et donne 10, le problme consiste
pour le commerant composer un multiensemble de pices qui totalise 190. Il y a un
grand nombre de solutions, parmi lesquelles :
une pice de 1, une pice de 50c, deux pices de 20c,
deux pices de 50c, quatre pices de 20c, deux pices de 5c,
19 pices de 10c, etc.
On appelle C = {c1 , . . . , cn } lensemble des pices du systme montaire utilis compor-
tant n pices diffrentes. On suppose que le commerant dispose dun nombre illimit de
chacune dentre elles. La pice ci a pour valeur di . Dans la zone euro, on a lensemble C
de taille 8, avec les valeurs : d1 = 2, d2 = 1, d3 = 50c, d4 = 20c, d5 = 10c, d6 = 5c,
d7 = 2c, d8 = 1c, ou, en centimes : d1 = 200, d2 = 100, d3 = 50, d4 = 20, d5 = 10, d6 = 5,
d7 = 2, d8 = 1. Pour reprendre lexemple prcdent, la premire solution peut se noter
par le multiensemble Jc2 , c3 , c4 , c4 K ou encore par un vecteur de dimension n indiquant
combien de pices de chaque type ont t prises pour la solution, ici [0, 1, 1, 2, 0, 0, 0, 0].
147 - Q 1 Question 1. Montrer quil ne rsout pas le problme RLMMO quand C = {c1 , c2 , c3 }, avec
d1 = 6, d2 = 4, d3 = 1 et N = 8. Trouver un autre couple (C, N) non trivialement dduit
de celui-ci pour lequel cet algorithme ne convient pas non plus.
Note On peut montrer que cet algorithme rsout le problme RLMMO seulement quand
C prsente certaines proprits que possde en particulier le systme de pices europen
ou les systmes du type {1, 2, 4, 8, . . .}. On ne sintresse pas ici ces proprits.
Un algorithme exact
En sinspirant de la mthode utilise dans lexercice 20 page 14, relatif aux pices jaunes,
on dfinit nbpmin(i, j) comme le nombre minimal de pices ncessaires pour former la
somme j en ne sautorisant que le sous-ensemble des pices {c1 , . . . , ci }. Si cest impossible,
nbpmin(i, j) prend une valeur arbitrairement grande. On cherche donc nbpmin(n, N).
Les pices de C ne sont pas supposes ranges par ordre dcroissant (ou croissant).
147 - Q 2 Question 2. Donner la rcurrence complte dfinissant nbpmin.
147 - Q 3 Question 3. En dduire le principe dun algorithme pseudo-polynomial (voir section ??,
page ??) dont on prcisera la complexit temporelle, fond sur la programmation dyna-
mique, dterminant le nombre de pices que comporte la solution optimale.
147 - Q 4 Question 4. Lappliquer pour N = 12 avec le systme montaire C = {c1 , c2 , c3 }, avec
d1 = 4, d2 = 5, d3 = 1.
147 - Q 5 Question 5. Comment complter lalgorithme pour savoir quelles pices sont rendues et
en quelles quantits ?
Notations
exp1 =
b exp2 dfinition
ident exp1 exp2 quantification universelle
ident exp1 et exp2 quantification
existentielle
X Variante du quantificateur daddition.
exp2 Somme des valeurs exp2
exp1 lorsque exp1 est satisfaite.
#ident exp comptage : nombre de fois o le prdicat exp est satisfait
dexpe oprateur plafond : plus petit entier suprieur ou gal exp
bexpc oprateur plancher : plus grand entier infrieur ou gal exp
|exp| valeur absolue ou taille dune entit (liste, sac, etc.)
{exp1 , . . . , expn } ensemble dfini en extension
{ListeIdent | exp} ensemble dfini en comprhension
exp1 .. exp2 intervalle de relatifs
exp1 exp2 soustraction densembles
exp1 exp2 produit cartsien
(exp1 , exp2 ) couple (lment dun produit cartsien)
(exp1 , . . . , expn ) nuplet (extension de la notion de couple)
exp1 exp2 composition de relations
exp1 : intervalle ou produit cartsien dintervalles,
exp1 exp2 exp2 : ensemble quelconque,
ensemble des fonctions de exp1 dans exp2
ident[exp1 , . . . , expn ] lment du tableau ident, n dimensions
ident[exp .. exp] tranche de tableau une dimension
[exp1 , . . . , expn ] constante de tableau une dimension
exp1,1 exp1,n
.. ..
. .
constante de tableau deux dimensions
expm,1 expm,n
constante reprsentant le sac vide
exp1 < exp2 prdicat dappartenance un sac
Jexp1 , . . . , expn K dfinition dun sac en extension
exp1 exp2 soustraction de sacs
exp1 u exp2 intersection de sacs
exp1 t exp2 union de sacs
exp1 < exp2 prdicat dinclusion stricte de sacs
exp1 6< exp2 prdicat de non inclusion stricte de sacs
exp1 v exp2 prdicat dinclusion au sens large de sacs
exp1 6v exp2 prdicat de non inclusion au sens large de sacs
hexp1 , . . . , expn i liste de n valeurs
B ensemble des boolens ({vrai, faux})
C nombres complexes
card(exp) | cardinal dun ensemble
chane ensemble des chanes de caractres
chane(exp) ensemble des chanes de caractres sur le vocabulaire exp
codom(exp) codomaine de la relation exp
dom(exp) domaine de la relation exp
im(exp) partie imaginaire du complexe exp
max(exp) plus grand lment dun ensemble numrique (si vide : )
244 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Quantificateur max. Plus grand lment dune expression exp2
max (exp2 )
exp1 lorsque exp1 est satisfaite.
min(exp) plus
petit lment dun ensemble numrique (si vide : )
Quantificateur min. Plus petit lment dune expression exp2
min (exp2 )
exp1 lorsque exp1 est satisfaite.
mult(exp1 , exp2 ) multiplicit de llment exp1 dans le sac exp2
N entiers naturels
N1 N {0}
pred(exp1 , exp2 ) prdcesseur de llment exp1 dans la relation binaire exp2
P(exp) ensemble des parties finies de lensemble exp
R rels numriques
R+ rels positifs ou nuls numriques
R+ rels strictement positifs numriques
re(exp) partie relle du complexe exp
sac(exp)
ensemble des sous-sacs finis du sac exp
exp
instruction qui permet de spcifier les variables v1 , . . . , vn
dbut
instr
fin
smax(exp) plus grand lment dun sac numrique (si vide : )
smin(exp) plus petit lment dun sac numrique (si vide : )
succ(exp1 , exp2 ) successeur de llment exp1 dans la relation binaire exp2
Z entiers relatifs
dxe pour x rel, dxe =b min({m Z | m > x}) (voir [31])
bxc
[ pour x rel, bxc =b max({m Z | m 6 x}) (voir [31])
exp2 quantificateur gnralisant loprateur (union ensembliste)
exp1
\
exp2 quantificateur gnralisant loprateur (intersection ensembliste)
exp1
Remarques
1. La notation densemble dfini en comprhension ({ListeIdent | exp}) est utilise pour
dfinir des enregistrements . Ainsi, {x, y | x R et y R} dfinit lensemble des
points du plan, pt {x, y | x R et y R} dclare une variable (ou une constante)
ayant comme premier champ l abscisse x et comme second champ l ordonne
y. Par convention, pt.x (resp. pt.y) dsigne alors cette abscisse (resp. cette ordonne).
2. La dfinition des structures inductives (listes, arbres binaires, etc.) se fait gale-
ment partir de la notion densembles dfinis en comprhension. Ainsi, liste =
{/} {val, suiv | val N et suiv liste} dfinit liste comme lunion entre la liste
vide (note /) et lensemble des couples constitus dun entier et dune liste dentiers.
Il est ncessaire dajouter que lon ne sintresse quaux structures finies et quune
structure liste ainsi dfinie est le plus petit ensemble satisfaisant lquation en liste
liste = {/} {val, suiv | val N et suiv liste}.
3. Loprateur de comptage # dlivre un entier naturel. Ainsi, si elle est dfinie, lex-
pression #i(i 1..10 et T [i] = 0) dnombre les 0 de la tranche T [1..10] du tableau T .
4. Par abus de notation, dans certains programmes, la rubrique variables (resp. constantes)
contient, outre la dclaration des variables (resp. des constantes), une proposition
qui tient lieu de prcondition (resp. de contrainte).
Liste des exercices
Chapitre 1. Mathmatiques et informatique : quelques notions utiles 1
1 lment neutre unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 lment minimum dun ensemble muni dun ordre partiel . . . . . . . . . . . . 1
3 Factorielle et exponentielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4 Par ici la monnaie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
5 Nombres de Catalan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
6 Dmonstrations par rcurrence simple errones . . . . . . . . . . . . . . . . . . 4
7 Dmonstration par rcurrence forte errone dune formule pourtant exacte . . 5
8 Schma alternatif de dmonstration de rcurrence deux indices . . . . . . . . 6
9 De 7 77 et plus si . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
10 Une petite place svp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
11 Suite du lzard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
12 propos de la forme close de la suite de Fibonacci . . . . . . . . . . . . . . . 8
13 Nombre darbres binaires n nuds . . . . . . . . . . . . . . . . . . . . . . . 8
14 Identification dune forme close . . . . . . . . . . . . . . . . . . . . . . . . . . 9
15 Dplacements dun cavalier sous contrainte . . . . . . . . . . . . . . . . . . . . 9
16 Nombre de partitions p blocs dun ensemble n lments . . . . . . . . . . 10
17 La monte de lescalier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
18 Le jeu patagon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
19 Le jeu deux tas de jetons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
20 Les pices jaunes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
21 Mlange de mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
40 lment majoritaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
41 Cherchez la star . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
42 Affaiblissement de la prcondition . . . . . . . . . . . . . . . . . . . . . . . . . 35
43 Meilleure division du primtre dun polygone . . . . . . . . . . . . . . . . . . 37
[51] A. Mirzaian, A Halving Technique for the Longest Sluttering Sequence, Informa-
tion Processing Letters, 26 (1987), p. 7175.
[52] C. Morgan, Programming from Specifications, Prentice-Hall, 1990.
[53] P. Naudin et C. Quitt, Algorithmique algbrique, Masson, 1992.
[54] R. Neapolitan et K. Naimipour, Foundations of Algorithms, Jones and Barlett,
2004.
[55] I. Parberry, Problems on Algorithms, Prentice-Hall, 1995.
[56] M. Quercia, Nouveaux exercices dalgorithmique, Vuibert, 2000.
[57] S. Russel et P. Norvig, Intelligence artificielle, Pearson, 2011.
[58] R. Sedgewick, Algorithmes en C++, Pearson, 2004.
[59] J. D. Smith, Design and Analysis of Algorithms, PWS-Kent, 1989.
[60] C. Villani, Thorme vivant, Grasset, 2012.
[61] N. Wirth, Systematic Programming. An Introduction, Prentice-Hall, 1973.
[62] N. Wirth, Algorithms + Data Structures = Programs, Prentice-Hall, 1976.
Index
A btire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
A? (algorithme) . . . . . . . . . . . . . . . . . . . . 114 boucle
abr. . . . . .voir arbre binaire de recherche affaiblissement de prcondition. .67
affaiblissement exercices de construction . . . . 5572
de la prcondition . . . . . . voir boucle
algbre de chemins . . . . . . . . . . . . . . . . . 245 C
algorithme calcul
A? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 des prdicats . . . . . . . . . . . . . . . . . . . . . 2
de Bellman-Ford . . . . . . . . . . . . . . . 242 des propositions . . . . . . . . . . . . . . . . . 2
de Dijkstra . . . . . . . . . . . . . . . . . . . . 122 carr
de Floyd. . . . . . . . . . . . . . . . . . . . . . .245 latin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
de Hirschberg . . . . . . . . . . . . . . . . . .176 magique . . . . . . . . . . . . . . . . . . . . . . . 139
de Huffman . . . . . . . . . . . . . . . . . . . . 126 noir . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
de Roy-Warshall . . . . . . . . . . . . . . . 245 sous un histogramme . . . . . . . . . . 205
cases de courrier (principe des) . . . . . 202
de Wagner et Fischer . . . . . . . . . . 256
cavalier (jeu dchecs) . . . . . . . . . . . . 78, 85
algorithmes gloutons . . . . . . . . . . . . . . . 119
chane . . . . . . . . . . . . . . . . . . . . voir squence
exercices . . . . . . . . . . . . . . . . . . 119146
miroir . . . . . . . . . . . . 21, 177, 178, 259
appel rcursif
chemin dans un graphe . . . . . . . . . . . . . . 24
double . . . . . . . . . . . . . . . . . . . . . . . . . . 73
de valeur minimale . . 122, 240, 242,
approximation dune fonction . . . . . . . 220
245, 248
arbre
eulrien . . . . . . . . . . . . . . . . . . . . . . . . . 25
binaire . . . . . . . . . . . . . . . . . . . . . 42, 152
hamiltonien . . . . . . . . . . . . 25, 91, 144
binaire de recherche . . . . . . . . 31, 119
chemin dans un tableau . . . . . . . . . . . . 248
pondr . . . . . . . . . . . . . . . . . . . . . 250
circuit dans un graphe . . . . . . . . . . . . . . . 25
complet. . . . . . . . . . . . . . . . . . . . . . . . .32
eulrien . . . . . . . . . . . . . . . . . . . . . . . . . 89
dfinition . . . . . . . . . . . . . . . . . . . . . . . 29
codage optimal . . . . . . . . . . . . . . . . . . . . . 227
de dcision . . . . . . . . . . . . . . . . . 31, 149
codomaine dune relation . . . . . . . . . . . . 19
de frquences . . . . . . . . . . . . . . . . . . 129
coloriage dun graphe . . . . . . . . . . . 96, 134
diamtre dun . . . . . . . . . . . . . . 31, 152
complexit
filiforme . . . . . . . . . . . . . . . . . . . . . . . . 31
en moyenne . . . . . . . . . . . . . . . . 51, 149
hauteur dun . . . . . . . . . . . . . . . . . . . 30
pseudo-polynomiale. . . . . . . . . . . .273
minimum local dans un . . . . . . . . 152
compression de donnes . . . . . . . . . . . . 126
parfait . . . . . . . . . . . . . . . . . . . . . . . . . . 31
construction de boucle
plein. . . . . . . . . . . . . . . . . . . . . . . . . . . .31
exercices . . . . . . . . . . . . . . . . . . . . 5572
poids dun . . . . . . . . . . . . . . . . . . . . . . 30 principes . . . . . . . . . . . . . . . . . . . . . . . 55
arc dun graphe . . . . . . . . . . . . . . . . . . . . . . 23 Coulomb, C.-A. (loi de). . . . . . . . . . . . .197
valu . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 courbes
assignation de tches . . . . . . . . . . . . . . . 111 de Hilbert . . . . . . . . . . . . . . . . . . . . . . 79
autorfrence de Sierpinski . . . . . . . . . . . . . . . . . . . . 80
dun tableau . . . . . . . . . . . . . . . . . . . 109 crypto-arithmtique . . . . . . . . . . . . . . . . . 97
dans un index . . . voir autorfrence cyclique (tableau) . . . . . . . . . . . . . . . . . . 150
B D
Bachet, C.-G.. . . . . . . . . . . . . . . . . . . . . . .139 dcoupe
254 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS
Gries, D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 N
gu dans le brouillard . . . . . . . . . . . . . . . . 52 n reines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
guillotine . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 nud dun graphe . . . . . . . . . . . . . . . . . . . 23
nid de pigeon . . . . . voir cases de courrier
H (principe des)
hauteur dun arbre . . . . . . . . . . . . . . . . . . 30 nombre
Hilbert, D. (courbes de) . . . . . . . . . . . . . 79 entier (dcomposition) . . . . . . . . . 102
Hirschberg, D. . . . . . . . . . . . . . . . . . . . . . . 176 nombres
Huffman, D. A. . . . . . . . . . . . . . . . . . . . . . 126 dAckerman . . . . . . . . . . . . . . . . . . . . . 11
de Catalan . . . . . . . . . . . . . . . . . . 10, 37
I de Delannoy . . . . . . . . . . . . . . . . . . . . 14
identification des nombres dun intervalle de Stirling . . . . . . . . . . . . . . . . . . 11, 44
240 triangulaires . . . . . . . . . . . . . . . . . . . 201
implication logique . . . . . . . . . . . . . . . . . . . 3 numrotation conforme . . . . . . . . . . . . . 241
induction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
induction de partition . . . . . . . . . . . . . . . . 7 O
inversion . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 ufs par les fentres . . . . . . . . . . . 198, 237
optimisation
isomorphisme de graphes . . . . . . . . . 27, 94
de la triangulation . . . . . . . . . . . . . 263
de rpartition de tches . . . . . . . . 228
J
du codage . . . . . . . . . . . . . . . . . . . . . 227
jeu
du placement de stations-service223
deux tas de jetons . . . . . . . . . . . . 46
ordonnancement . . . . . . . . . . . . . . . . . . . . 121
des mots cass . . . . . . . . . . . . . . . . . 107
ordre dun graphe . . . . . . . . . . . . . . . . . . . 23
du Master Mind . . . . . . . . . . . . . . . 104
ordre partiel . . . . . . . . . . . . . . . . . . . . . . . . 140
des extrmes. . . . . . . . . . . . . . . . . . .271
ordre total . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
du carr latin . . . . . . . . . . . . . . . . . . . 99
du sudoku . . . . . . . . . . . . . . . . . . . . . 100 P
du taquin. . . . . . . . . . . . . . . . . . . . . .114 palindrome . . . . . . . . . . . . . . . . . . . . . . . . . . 59
patagon . . . . . . . . . . . . . . . . . . . . 45, 269 parcours en largeur dabord. . . . . . . . .134
partition
L dun nombre entier . . . . . . . . . . . . 103
cher dufs par les fentres . . 198, 237 optimale dun tableau . . . . . . . . . 119
ligne brise . . . . . . . . . . . . . . . . . . . . . . . . . 220 partitions
liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 nombre de . . . . . . . . . . . . . . . . . . . . . . 44
loi de Coulomb . . . . . . . . . . . . . . . . . . . . . 197 pavage dun chiquier . . . . . . . . . . . . . . . 159
permutation
M nombre dinversions . . . . . . . . . . . 162
mlange de mots . . . . . . . . . . . . . . . . . . . . . 48 sous contrainte . . . . . . . . . . . . . . . . 103
majoritaire (lment) . . . . . . . . . . . . . . . 169 petit Poucet (mthode du) . . . . . . . . . 247
Master Mind . . . . . . . . . . . . . . . . . . . . . . . 104 photocopieur . . . . . . . . . . . . . . . . . . . . . . . 142
meilleur intervalle . . . . . . . . . . . . . 157, 222 pic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
mmosation. . . . . . . . . . . . . . . . . . . . . . . .167 pilleurs de coffres . . . . . . . . . . . . . . . . . . . 231
minimum pivot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
local dans un arbre . . . . . . . . . . . . 152 plus court chemin . . . . . . . . . . . . . . . . . . 122
Morgan, C. . . . . . . . . . . . . . . . . . . . . . . . . . 213 plus lourd et moins balourd . . . . . . . . 262
mot . . . . . . . . . . . . . . . . . . . . . . voir squence poids dun arbre . . . . . . . . . . . . . . . . . . . . . 30
mots cass . . . . . . . . . . . . . . . . . . . . . . . . . . 107 point fixe . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
multiensemble . . . . . . . . . . . . . . . . . . voir sac point simple . . . . . . . . . . . . . . . . . . . . . . . . . 30
256 CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS