You are on page 1of 271

# Conception dalgorithmes

## Principes et 150 exercices non corrigs

Patrick Bosc, Marc Guyomard et Laurent Miclet
Le 15 fvrier 2016

## Prfac par Colin de la Higuera,

Prsident (2012 2015) de la Socit des Informaticiens de France

II

## Your total ignorance of that

which you profess to teach merits
the death penalty. I doubt
whether you would know that St
Cassian of Imola was stabbed to
death by his students with their
styli.
(J. K. Toole)
There is a computer disease that
anybody who works with
computers knows about. Its a
very serious disease and it
interferes completely with the
work. The trouble with computers
is that you play with them !

## Computer Science is no more

about computers than astronomy
(E. W. Dijkstra)

## However beautiful the strategy,

you should occasionally look at
the results.
(W. Churchill)

## Solving problems is a practical

skill like, let us say, swimming.
(G. Plya)

(R. Feynman)
The Richard Feynman
Problem-Solving Algorithm :
1. write down the problem ;
2. think very hard ;
3. write down the answer.
(M. Gell-mann)
Please do not ask me for solutions
to the exercises. If youre a
student, seeing the solution will
rob you of the experience of
solving the problem yourself,
which is the only way to learn the
material. If youre an instructor,
you shouldnt assign problems
that you cant solve yourself !
(J. Erickson)

## Carotte et bton sont les deux

mamelles de la pdagogie.
(P. Struillou)

## Students identify computer

science with a computer driving
(J. Hromkovi
c)

## An here I sit so patiently

Waiting to find out what price
You have to pay to get out of
Going thru all these things twice
(B. Dylan)

Prface
Computational thinking is the
thought processes involved in
formulating problems and their
solutions so that the solutions are
represented in a form that can be
effectively carried out by an
information-processing agent.

## La pense algorithmique est

lensemble des processus mentaux
permettant de formuler les
problmes et leurs solutions dans
une forme qui rend possible la
rsolution par un agent de
traitement de linformation.
(Jeannette M. Wing, 2006)

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 numrique, 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 tlphone 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 forms 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 linformatique !
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 applications 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, introduisons cette question de changement de paradigme avec un exemple emprunt Seymour
Papert. Il sagit de rsoudre la multiplication suivante :
XLIV ? XVII
La mthode de rsolution que lon peut imaginer consiste transformer la notation
romaine en notation arabe, de poser 44*17 et probablement dutiliser un outil numrique
pour finir.
Mais on peut galement se demander comment faisaient les Romains de lpoque, puis
les Europens qui jusquau Moyen ge ont eu utiliser les nombres romains. . .
Pour rsoudre des questions faisant intervenir de larithmtique, il tait ncessaire de
recoder linformation autrement, dune faon permettant lutilisation dalgorithmes appropris que chacun pouvait utiliser. Le dveloppement du commerce a entran, au Moyen
ge, le remplacement de la numration romaine par la numration arabe. Adieu les chiffres
romains, bienvenue aux chiffres arabes.
Cest une rvolution similaire qui est ncessaire aujourdhui : celle-ci nest pas technologique. Elle se situe au niveau de nos faons de raisonner, de rsoudre des problmes.
On constate maintenant quun nombre sans cesse croissant de problmes se rsolvent
en passant par trois tapes : transformation des donnes du problme en information,
traitement algorithmique de cette information, restitution de la solution sous une forme
utile, acceptable, agrable.
Cette faon de rsoudre un problme, en passant par la transformation en information
et sa rsolution informatique sappelle le computational thinking en anglais. En franais,
plusieurs traductions existent : la pense informatique, la pense computationnelle, la
pense algorithmique 1 .
Les exemples sont trs nombreux. . . Les mcanismes de freinage ou de direction dune
voiture ne sont plus des liaisons physiques entre le conducteur et les roues, mais des
systmes captant le geste du conducteur et transformant celui-ci en donnes informatiques,
puis optimisant en fonction de ces donnes de faon minimiser les risques, et transformant
enfin linformation rsultante en force exerce sur les objets physiques finaux (les roues).
Le rsultat est celui que lon veut, mais en plus, cette information peut tre exploite : il
est possible de vrifier la constance de certains paramtres, de calculer la date de remplacement, de transmettre des informations au programme qui gre de son ct la puissance
du moteur. . .
Il suffit de regarder autour de nous. . . les articles de presse, les emplois du temps dun
lyce, les horaires de notre bus, le contrle arien, la gestion dun match de rugby, de
1. https://interstices.info/jcms/c_43267/la-pensee-informatique

PRFACE

## trs nombreux problmes du domaine mdical. . . Tout y passe : on capte, on travaille

linformation, on restitue.
Or, la seconde tape de cette construction nobit pas la simple logique du codage : elle
repose pour beaucoup sur lalgorithmique. La transformation de nos donnes en rsultats,
quelle se fasse en une passe ou de faon continue, ncessite lemploi dalgorithmes, de
savoir choisir parmi ceux-ci, de les prouver aussi.
La pense algorithmique repose donc de manire forte sur une culture algorithmique. Et
celle-ci sacquiert en utilisant des livres comme ce Conception dalgorithmes : Principes
et 150 exercices corrigs que jaccueille avec plaisir, et qui doit devenir une rfrence en
matire denseignement de lalgorithmique dans le monde francophone.
Lalgorithmique, pour beaucoup dinformaticiens, est un art : lcriture de lalgorithme
est le moment o lon cherche trouver lide gniale, la structure cache, celle qui va permettre de rsoudre la question. Les auteurs nous invitent conserver cet aspect artistique,
mais dvelopper aussi une approche systmatique. . . La mme ide gniale se retrouvet-elle dans plusieurs algorithmes correspondant des problmes diffrents ? Quest-ce qui,
au niveau de lanalyse, permet daborder ces problmes, finalement, de faon homogne ?
Un enjeu pdagogique particulier est trs bien dfendu dans ce livre : celui dcrire des
algorithmes prouvables. Si trouver des ides algorithmiques permettant de rsoudre un
problme est tout fait amusant, quil est difficile ensuite de prouver que lalgorithme qui
vient dtre crit rsout bien le problme !
Patrick Bosc, Marc Guyomard et Laurent Miclet, enseignants chevronns, ont bti sur
leur exprience devant des tudiants dIUT, dcole dingnieur, duniversit, et proposent
ici une approche tout fait intressante : plutt que de proposer un cours avec quelques
exercices, les auteurs ont choisi ici de rsumer le cours en retenant les lments les plus
pertinents, de proposer des exercices et surtout de concentrer la plus grande partie de leur
analyse dans les corrections de ceux-ci : en fait, ce sont ces corrections qui constituent le
fil conducteur de louvrage.
Pour conclure, on peut se poser la question du public de ce livre ? Si en 2015 ce public
peut tre constitu denseignants et dtudiants des filires informatiques des universits
et des coles dingnieurs, qui auront intrt ltudier dans le cadre de leurs tudes,
mais galement comme livre de rfrence de leur vie professionnelle si dans celle-ci ils
sont conduits rsoudre des problmes avec des algorithmes, on peut aussi prsager quun
public bien plus large sera bientt confront des questions similaires. . . La prise de
conscience du phnomne informatique a t, en France, soudaine : en lespace de trois
ou quatre annes, linformatique sest installe au lyce (ISN, puis ICN), dans les classes
prparatoires, au collge et on parle mme de lcole primaire ! Pour faire face ces besoins, il est envisag de former des ducateurs, animateurs enseignants, des professeurs de
toutes les disciplines. . . Bien entendu, un texte comme celui-ci na pas immdiatement sa
place : sil est prvu de commencer enseigner linformatique tous les niveaux, il nen
demeure pas moins que les enseignants vont sadresser, un peu partout, des dbutants.
Mais lenfant de six ans qui va commencer coder avec Scratch en 2016. . . aura besoin
un moment ou un autre de connaissances plus tendues, et dune enseignante ou dun
enseignant qui les matrisera.
Je souhaite que cet enseignant francophone ait appris avec ce livre.
Bonne lecture
Colin de la Higuera
Professeur lUniversit de Nantes
Prsident (2012-2015) de la Socit informatique de France

1

## Mathmatiques et informatique : notions utiles

1.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.1 Dmonstrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2 Dnombrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

## Complexit dun algorithme

17
2.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

## Spcification, invariants, itration

23
3.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

## Diminuer pour rsoudre, rcursivit

41
4.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Essais successifs
49
5.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

PSEP
79
6.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Algorithmes gloutons
87
7.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

## Diviser pour Rgner

115
8.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

Programmation dynamique
9.1 Exercices . . . . . . . . . . . . . . . . .
9.1.1 Dcoupe - Partage : problmes
9.1.2 Dcoupe - Partage : problmes
9.1.3 Graphes - Arbres . . . . . . . .
9.1.4 Squences . . . . . . . . . . . . .
9.1.5 Images . . . . . . . . . . . . . .
9.1.6 Jeux . . . . . . . . . . . . . . . .
9.1.7 Problmes pseudo-polynomiaux

. . . . . . . . . .
une dimension .
deux dimensions
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

1
1
1
9

187
187
188
196
208
222
231
236
241

Notations

243

## Liste des exercices

245

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 chapitre 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 propose. Les corrigs sont dtaills afin de rendre le plus explicite possible les points cls
du raisonnement suivi.

## ce quil nest pas,

Cet ouvrage nest ni un cours de Structure de Donnes et Algorithmes ni mme un cours
dAlgorithmique. En effet, premirement, il naborde pas les problmes de lorganisation
efficace des donnes. Les structures de donnes ne sont prcises que lorsquelles jouent
un rle central dans lefficacit de lalgorithme. Pour lessentiel, on suppose que le lecteur
connat le sujet et sait employer les bons outils (ou les bons paquetages ou les bonnes
classes). On parlera donc de tableaux, de squences, de graphes et autres structures sans
gnralement prciser la manire dont elles sont implantes.
Deuximement, il vise enseigner la conception et les stratgies algorithmiques, mais
pas sous la forme dun cours complet. Il essaye plutt de proposer des exemples qui aident
comprendre pourquoi et comment telle mthode peut tre applique tel problme.

## et ce quil vise tre.

Lalgorithmique est, avons-nous dit, lart et la science dcrire un algorithme. Nous
souhaitons augmenter ces deux qualits chez le lecteur. Nous voudrions que, face un
nouveau problme, il puisse dvelopper, grce aux exemples quil aura vus, une sorte
dintuition de la mthode employer (cest le ct artiste, ou artisan). Mais nous dsirons
aussi quil sache prouver que lemploi de cette mthode est effectivement plus efficace que
celui dune technique nave (cest le ct scientifique). Enseigner par lexemple ne veut pas
dire sacrifier la rigueur. Beaucoup de constructions dalgorithmes se font partir de notions
bien fondes, comme la rcurrence ou le raisonnement par labsurde. Cependant, trop

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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.

## qui sadresse cet ouvrage ?

Ce livre est destin tous ceux qui, pour une raison ou pour une autre, sont concerns
par les sciences du numrique et veulent apprendre ou enseigner lalgorithmique. Il sera
videmment utile aux lves et aux tudiants en sciences du numrique, non pas comme
un ouvrage dinitiation, mais plutt comme un manuel de rfrence destin accompagner
son lecteur non seulement pendant lapprentissage, mais aussi dans sa vie professionnelle.
Nous pensons particulirement aux lves de terminale en spcialit ISN, ou dans certains
BTS, aux tudiants en IUT Informatique, Rseaux et Tlcom, GEII, aux tudiants en
licence informatique ou connotation informatique, aux lves des classes prparatoires
scientifiques et des coles dingnieurs.
Ce livre est galement destin aux enseignants, qui trouveront au fil des pages quantit
de matriel pour les cours et les sances dexercices (sans parler des examens). Ils utiliseront
les introductions, les exercices et les corrections pour montrer leurs apprenants comment
se modlise un problme et comment se construit rationnellement une solution. Enfin, il
est aussi destin, en dehors du systme denseignement classique, tous ceux qui veulent se
munir de connaissances solides sur une des bases de la science informatique : la construction
des algorithmes.

Plan
Comme nous lavons dit, cet ouvrage a t organis pour prsenter successivement diffrentes mthodologies de construction dalgorithmes. Cependant, il commence par un chapitre intitul Mathmatiques et informatique : notions utiles , dans lequel sont rappeles
un certain nombre de bases mathmatiques (essentiellement les principes de dmonstration, 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 algorithme , 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 dizaine 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

XI

PRSENTATION

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 mthodologies. 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

## . 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
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
que lon commence la question 3 de lexercice 42. Sa rponse est signale par la mme
note, avec R la place de Q.

42 - Q 3

XII

## Commentaires sur les sources et sur la bibliographie

La bibliographie situe en fin douvrage est volontairement limite des livres, ou
presque. Autrement dit, nous ne renvoyons jamais aux articles originaux o ont t publis (sil lont t) les algorithmes que nous prsentons ici. Cest en effet le rle dun
livre complet sur le sujet que de citer exhaustivement ses sources, plutt que celui dun
livre dexercices. Nous renvoyons donc aux livres de la bibliographie les lecteurs soucieux
de connatre lhistorique des algorithmes prsents. De ce point de vue, les ouvrages de
D. Knuth [44], de G. Brassard et P. Bratley [15], de T. Cormen et al. [17] et de E. Horowitz
et al. [39] sont particulirement conseills.
Aucun des algorithmes prsents ici ne se veut original. Pour lessentiel, les sujets des
exercices proviennent des livres de la bibliographie que nous prsentons ci-dessous. Ils ont
t souvent rcrits des fins pdagogiques. Les autres ont pour origine des sources varies,
en particulier le patrimoine commun des cours et travaux dirigs enseigns lUniversit
de Rennes 1 et lENSSAT de Lannion. Notre originalit nest pas dans la cration de
nouveaux problmes. En revanche, elle rside dans la construction de lnonc des exercices
et dans la rigueur de llaboration et de la description des solutions.
Dans son excellent petit livre dexercices, I. Parberry [55] donne son jugement sur une
trentaine de livres denseignement dalgorithmique. Nous y renvoyons volontiers le lecteur
pour quil se fasse un avis sur la bibliographie de langue anglaise datant davant 1995. Pour
notre part, outre les ingalables ouvrages de T. Cormen et al. [17] et de D. Knuth [44],
nous avons une prfrence pour les livres crits par U. Manber [48], par D. Gries [33], et
plus rcemment par J. Kleinberg et E. Tardos [43] et par J. Edmonds [27]. Les livres de
R. Johnsonbaugh et M. Shaeffer [40], de E. Horowitz et al. [39], de S. Baase et A. Van
Gelder [8], de R. Neapolitan et K. Naimipour [54], de A. Levitin [46] et de T. Goodrich
and R. Tamassia [30] sont galement des ouvrages rcents recommander.
La bibliographie en langue franaise sur lalgorithmique est plus mince. La rfrence
(surtout pour les structures de donnes, moins pour lalgorithmique proprement dite) a
longtemps t louvrage de C. Froidevaux et al. [28]. La traduction franaise du livre dj
cit de T. Cormen et al. [17] peut dsormais lui tre prfre. Une autre traduction est
signaler : celle des livres de R. Sedgewick, par exemple [58]. Les livres de M. Quercia [56],
de J.-M. Lry [47] et de J. Courtin et I. Kowarsky [19] (ce dernier est le plus complet)
traitent plus de structures de donnes que dalgorithmique au sens strict. Le livre dexercices dalgorithmique de L. Boug et al. [14] et celui de A. Darte et S. Vaudenay [21]
sont des recueils de problmes du concours de lENS Lyon, trs intressants, mais assez
elliptiques sur la construction des solutions. Lexcellent livre dexercices et de problmes
dalgorithmique de B. Baynat et al. [9] est organis par structures de donnes, non pas
par types dalgorithmes. Il donne des solutions dtailles et des rappels de cours. Nous le
conseillons bien volontiers, de mme que le trs bon livre de J. Beauquier et al. [10], organis selon le mme principe et dsormais disponible gratuitement sur le web. On trouve
aussi en franais de remarquables livres sur les algorithmes dans les graphes (par exemple
celui de M. Gondran et M. Minoux, [29]), dans les squences (M. Crochemore, [20]) et
pour des problmes dalgbre et danalyse (P. Naudin et C. Quitt, [53]).
Un ouvrage concis, mais de rfrence, sur la construction de programmes est celui de
P. Berlioux et Ph. Bizard [13]. Le livre de J. Arsac [5] mrite aussi dtre lu avec attention.
Le livre rcent de J. Julliand [41] est un excellent document dintroduction aux mthodes
formelles de conception de programmes.

Remerciements
Ce livre doit tout, ou presque, nos tablissements denseignement et de recherche :
lIUT de Lannion, lENSSAT et lUniversit de Rennes 1. Nous sommes redevables en
particulier aux cours et travaux dirigs d algorithmique avance qui ont t enseigns
notamment par Andr Couvert, Jean-Michel Hlary, Ren Pdrono, Sophie Pinchinat et
Michel Raynal. Nous remercions particulirement Nelly Barbot, Arnaud Delhay, Allel Hadjali, Amaury Habrard et Damien Lolive pour leur aide lors de la rdaction de cet ouvrage.

Ce livre a t compos en LATEX par les auteurs avec les logiciels libres TeXstudio, Texmaker, TeXnicCenter, TeXShop et MiKTeX. Les figures ont t faites avec PGF/TikZ. Le code comporte environ
2.400.000 signes.

CHAPITRE

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

## Cet exercice vise essentiellement pratiquer la dmonstration par labsurde de

faon rigoureuse.
Soit un ensemble S muni dun oprateur interne . Soit u S un lment neutre
gauche pour , autrement dit :
x (x S u x = x).
Soit v un lment neutre droite pour .
Question 1.

## Dmontrer de faon directe que si loprateur est commutatif, on a u = v.

Question 2.
Dmontrer par labsurde cette proprit en relchant la proprit de commutativit de loprateur .

1-Q1
1-Q2

## Lintrt de cet exercice est de procder la dmonstration dune mme proprit

la fois par labsurde et par rcurrence.
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.

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 relation dordre partiel  dfinie par :
(a, b)  (c, d) =
b a 6 c et b 6 d.
Soit F( E) = {(a, b) | a 1 .. 3 et b 1 .. 2 et a 6= b}. Dnombrer les lments minimaux
de F.

## Dans cet exercice, on tablit deux rsultats sur la comparaison de valeurs de

factorielles et dexponentielles. Le premier constitue un rsultat utile sur lordre
des deux classes de complexit associes (voir chapitre 2).

3-Q1

Question 1.

## Dmontrer par rcurrence simple que :

n (n N1 n! > 2n1 ).

3-Q2

Question 2.

## Pour quelle valeur minimale n0 a-t-on :

n ((n N1 et n0 N1 et n > n0 ) n! > 22n ) ?

## Dans cet exercice, on commence par valider un nouveau schma de dmonstration

par rcurrence simple. Ensuite, on lapplique une proprit sur la construction
dune somme montaire. On demande galement den faire la preuve au moyen du
schma habituel de dmonstration par rcurrence simple. On peut alors constater

## CHAPITRE 1. MATHMATIQUES ET INFORMATIQUE : NOTIONS UTILES

si une mthode est plus commode que lautre, lobservation faite nayant pas
vertu tre gnralise.

Question 1.
Dmontrer la validit du schma alternatif de dmonstration par rcurrence
simple ci-dessous :

4-Q1

Base

Rcurrence

## n ((n > n0 et P(n)) P(n + 2))

alors :
Conclusion n (n > n0 P(n))
Question 2.
Dmontrer laide de ce schma que toute somme n de six centimes ou plus
peut tre obtenue avec des pices de deux et de sept centimes.
Dmontrer ce mme rsultat en utilisant le schma de dmonstration par
Question 3.
rcurrence simple de la section ??, page ??.
Question 4.
Quel est le nombre maximum de pices de sept centimes utilises en sappuyant sur chacun de ces schmas ?
Question 5.

Selon vous, laquelle de ces deux preuves est-elle la plus simple tablir ?

## Exercice 5. Nombres de Catalan

4-Q2

4-Q3

4-Q4

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 rcurrence (voir page ??) :
Cat(1) = 1
4n 6
Cat(n) =
Cat(n 1)
n

n > 1.

Question 1.
Montrer par rcurrence simple que cette relation de rcurrence admet comme
forme close pour tout entier n positif (voir page ??) :
Cat(n) =

(2n 2)!
.
(n 1)! n!

5-Q1

4
5-Q2

Question 2.

Cat(n) 6

4n1
.
n

## Exercice 6. Dmonstrations par rcurrence simple errones

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 :
Tout couple dentiers naturels est constitu de deux entiers gaux.
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.
6-Q1

Question 1.

O est lerreur ?

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). Montrons 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

## donc forcment confondues. On a (d1 ) = (d2 ) = (A2 A3 ) et les points A1 , A2 , A3 , . . . ,

Ap , Ap+1 sont donc aligns.
Conclusion la proposition P2 est vraie pour tout nombre de points suprieur ou gal 2.
Question 2.

Exercice 7.
exacte

Trouver la faille.

6-Q2

## Dmonstration par rcurrence forte errone dune formule pourtant

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
et lgalit est donc vrifie.
Hypothse de rcurrence Pour tout n > 1 :
s
r
(n 1) =

1 + (n 2)

1 + (n 1)

q
p
1 + n 1 + (n + 1) . . . .

Rcurrence On a :
s
(n 1) =

r
1 + (n 2)

1 + (n 1)

p
1 + n 1 + (n + 1) . . .
lvation au carr

r
(n 1)2 = 1 + (n 2)

q
p
1 + (n 1) 1 + n 1 + (n + 1) . . .

r
n2 2n + 1 = 1 + (n 2)

identit remarquable
q
p
1 + (n 1) 1 + n 1 + (n + 1) . . .
arithmtique

r
n(n 2) = (n 2)

q
p
1 + (n 1) 1 + n 1 + (n + 1) . . .
division des deux membres par n 2

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

n(n 2)
=
n2

r
n=

r
1 + (n 1)

q
p
1 + n 1 + (n + 1) . . .
arithmtique

1 + (n 1)

p
1 + n 1 + (n + 1) . . . .

7-Q1

Question 1.

7-Q2

Question 2.

## On a vu la section ??, page ??, un schma de dmonstration par rcurrence

deux indices entiers. Le but de cet exercice est den valider un autre.
Montrer que le schma de dmonstration ci-aprs est correct :
Si lon peut dmontrer les deux proprits suivantes :
Base P(i, 1) est vraie pour tout i > 1 et
P(1, j) est vraie pour tout j > 1

i N1 et
P(i + 1, j) et
Rcurrence (i, j) j N1 et P(i, j + 1) et
P(i, j)
P(i + 1, j + 1)
alors :
Conclusion P(m, n) est vraie pour tous les couples dentiers tels que m > 1
et 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.
Soit lentier A(n, p) dfini par :
A(n, p) = 32n 2np
9-Q1

n N1 et p N et n > p.

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

Question 2.
Que dire de la divisibilit par 7 des nombres des suites A(n, 0), A(n, 1),
A(n, 2) et A(n, 3) ?

9-Q2

## On sintresse ici une suite de nombres. On en dmontre deux proprits,

une par rcurrence simple, la seconde de faon directe, la dmonstration par
rcurrence napparaissant pas dans ce cas la plus aise.
On dfinit la suite rcurrente de nombres A(n) par :
A(1) = 1
A(n) = A(n 1) +

n2 3n + 1
(n 1)2 n2

n > 2.

Question 1.
Montrer par rcurrence simple que la forme close des nombres A(n) est
(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 1

10 - Q 2

## Exercice 11. Suite du lzard

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 uniquement 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 :
S/3 = h1, 0, 0, 1, . . .i

et

## S S/3 = h0, 0, 1, 0, 1, 1, 0, 1, . . .i.

Question 1.
Donner un raisonnement par rcurrence permettant de construire les deux
suites S1 et S2 (autres que h0, 0, 0, . . .i et h1, 1, 1, . . .i) telles que S = S/3 = S S/3. On les
appelle les suites du lzard (voir [22]).
Question 2.

11 - Q 1

11 - Q 2

## Exercice 12. propos de la forme close de la suite de Fibonacci

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)
et quelle admet la forme close :
"
!n
1+ 5
1

F(n) =
2
5
12 - Q 1

12 - Q 2

n>2

!n #
1 5
2

n > 1.

Question 1.
Expliquer pourquoi en pratique on nutilise pas la formule ci-dessus pour
calculer F(n) avec n fix.
Question 2.

## Proposer un algorithme itratif de calcul du ne nombre de Fibonacci.

Remarque Dans lexercice 103, page 135, plusieurs autres faons deffectuer ce calcul sont
examines.

## Exercice 13. Nombre darbres binaires n nuds

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 rcurrence :
nbab(0) = 1
n1
X
nbab(n) =
nbab(i) nbab(n i 1)

n > 1.

i=0

13 - Q 1

Question 1.

## Montrer que cette rcurrence scrit aussi sous la forme :

nbab(n) = Cat(n + 1)

n>0

Question 2.

## Exercice 14. Identification dune forme close

13 - Q 2

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.
On considre la suite rcurrente deux indices dfinie par :
a(0, j) = j + 1
a(i, 0) = 2 a(i 1, 0) + a(i 1, 1)
a(i, j) = a(i 1, j 1) + 2 a(i 1, j) + a(i 1, j + 1)

j>0
i>0
i > 0 et j > 0.

Question 1.
Calculer a(3, 2). Proposer une structure tabulaire et dcrire la progression
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.

Proposer une forme close pour a(i, j) et la dmontrer par rcurrence. Quel
Question 3.
intrt cette expression prsente-t-elle dun point de vue algorithmique ?

14 - Q 1

14 - Q 2
14 - Q 3

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
menant la case (i, j). tablir la relation de rcurrence complte du calcul de nparc(i, j).

15 - Q 1

10

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

ZnZ0Z0Z0Z
6
0Z0M0Z0Z0
5
Z0M0Z0M0Z
4
0Z0Z0Z0M0
3
Z0Z0ZnZ0Z
2
0Z0Z0Z0M0
1
Z0Z0Z0M0Z
7

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.

15 - Q 2

Question 2.
crire lalgorithme itratif associ au calcul de nparc(n, m) pour n et m
fixs. Donner la valeur de nparc(5, 7).

## Exercice 16. Nombre de partitions p blocs dun ensemble n lments

Lobjectif essentiel de cet exercice est dtablir la rcurrence des nombres de Stirling.
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

16 - Q 2
16 - Q 3

16 - Q 4

Question 1.
Donner toutes les partitions un, deux, trois et quatre blocs de cet ensemble
quatre lments (un bloc ne peut pas tre vide).
Question 2.

## Quelle est la relation de rcurrence dfinissant S(p, n) ?

Question 3.
Proposer une progression du calcul de S(p, n), puis lalgorithme itratif correspondant.
Question 4.

11

## Exercice 17. La monte de lescalier

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 1.
Donner deux faons de gravir exactement un escalier de 12 marches en exactement trois sauts de a1 = 2 ou a2 = 3 ou a3 = 5 marches.
Question 2.

## Donner la formule de rcurrence du calcul de nbf(s, m).

17 - Q 2

Question 3.
Proposer une progression permettant le calcul de nbf(s, m). En dduire le
programme itratif associ.
Question 4.

17 - Q 1

## Calculer les valeurs nbf(s, m) pour m 6 12, s 6 6, n = 2, a1 = 2, a2 = 5.

Question 5.
On remarque dans lexemple prcdent que certaines zones du tableau associ nbf valent 0. Expliquer pourquoi et proposer une amlioration de lalgorithme.

17 - Q 3

17 - Q 4
17 - Q 5

## Exercice 18. Le jeu patagon

Cet exercice introduit le jeu patagon, auquel on joue seul pour amasser un montant 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 permettant 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
sera le meilleur choix ?
23

41

40

21

42

24

18 - Q 1

12
18 - Q 2

18 - Q 3

18 - Q 4

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Question 2.
On convient de reprsenter le choix du joueur par le vecteur caractristique
de taille n associ ses choix. Dans lexemple prcdent, le vecteur [0, 1, 0, 1, 0, 1] reprsente
un jeu qui rapporte 0 + 41 + 0 + 21 + 0 + 24 = 86 units de monnaie patagone. Montrer que
pour n > 1, il y a strictement moins de 2n faons diffrentes de jouer.
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 ?
Question 4.
La suite de lexercice a pour but de dnombrer les faons raisonnables de
jouer, autrement dit le nombre de vecteurs binaires raisonnables de taille n. Pour un jeu
de taille n, on dfinit nfr0 (n) comme le nombre de faons raisonnables de jouer dont la
valeur en position n du vecteur associ vaut 0. De mme, on dfinit nfr1 (n) comme le
nombre de faons raisonnables de jouer dont la valeur en position n du vecteur associ
vaut 1. Pour un jeu de taille n, le nombre total nfr(n) de faons raisonnables de jouer
vaut donc la somme de ces deux valeurs.
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 5

Question 5.

Montrer que :

## nfr(1) = 1, nfr(2) = 2, nfr(3) = 2

et que pour n > 3 :
nfr(n) = nfr(n 2) + nfr(n 3).
18 - Q 6

18 - Q 7

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 7.

## Dans cet exercice, on sintresse au nombre nfg de faons de gagner dans un

jeu o lon ajoute et soustrait des jetons situs sur deux tas. Une proprit du
nombre nfg est mise en vidence et prouve par rcurrence.

## CHAPITRE 1. MATHMATIQUES ET INFORMATIQUE : NOTIONS UTILES

13

On considre un jeu o lon dispose de deux tas de jetons P et Q contenant respectivement p et q jetons (p, q > 1). Le but est datteindre une des deux situations, (p = 0, q = 1)
ou (p = 1, q = 0), appele tat gagnant dans la suite. On passe dun tat des tas un
autre de la faon suivante : on enlve deux jetons P (resp. Q), puis on jette un jeton et
on ajoute lautre Q (resp. P).
Exemple. (p = 4, q = 6) (p = 2, q = 7) ou (p = 5, q = 4).
On veut calculer le nombre de faons diffrentes nfg(p, q) permettant datteindre lun des
deux tats gagnants partir dune situation o le tas P a p jetons et le tas Q en a q.
Question 1.

## Donner la formule de rcurrence exprimant nfg(p, q).

Question 2.
Proposer une structure tabulaire associe au calcul de nfg ainsi quune volution de son remplissage.
Question 3.
En dduire un algorithme itratif de calcul du nombre de faons diffrentes
permettant datteindre lun des deux tats gagnants du jeu.
Question 4.

## Appliquer cet algorithme au calcul de la valeur nfg(4, 2).

Question 5.
Montrer que tout lment nfg(i, j), tel que |i j| est multiple de 3, prend la
valeur 0 ( lexclusion de nfg(0, 0), qui na pas de sens).

19 - Q 1
19 - Q 2

19 - Q 3

19 - Q 4
19 - Q 5

14

## Exercice 20. Les pices jaunes

Cet exercice pose un problme apparemment simple, le dnombrement des diffrentes faons de former un euro avec des pices jaunes. On montre que la dmarche intuitive visant tablir une rcurrence un indice nest pas approprie
et quil est judicieux de recourir une rcurrence deux indices. La dmarche
retenue ici trouve un prolongement dans lexercice 147, page 241.
On souhaite connatre le nombre de faons diffrentes de former la somme dun euro
avec des pices jaunes, autrement dit en utilisant des pices de un, deux, cinq, dix, 20 et
50 centimes.
20 - Q 1

Raisonnons dabord pour former non pas un euro, mais toute somme allant
Question 1.
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)
nbf(5) = 1 + nbf(4) + nbf(3)
nbf(i) = nbf(i 5) + nbf(i 2) + nbf(i 1)

36i64
6 6 i 6 9.

20 - Q 2

20 - Q 3

20 - Q 4

20 - Q 5

20 - Q 6

## Proposer une rcurrence deux indices calculant le nombre de faons de

Question 2.
former un euro avec les pices jaunes.
Question 3.
Vrifier quil y a deux faons de former trois centimes avec lensemble des
pices jaunes.
Question 4.
crire le programme itratif effectuant le calcul du nombre de faons de
former un euro avec les pices jaunes.
Question 5.
jaunes ?

Quel est le nombre de faons diffrentes de former un euro avec les pices

Question 6.
Prouver que le nombre de faons de former un montant m avec lensemble
des pices jaunes croit avec m.

15

## On se dfinit une opration de mlange de deux mots et on veut dune part

dterminer le nombre de mlanges possibles de deux mots donns, dautre part
dcider si un mot est ou non un mlange de deux autres.
On se donne trois mots : u de longueur m, v de longueur n et w de longueur (m + n).
Le mot w est appel mlange des mots u et v sil est form en mlangeant les lettres de u
et de v tout en prservant lordre des lettres de u et de v. Par exemple, pour u = lait et
v = cafe, le mot w = calfaite est un mlange de u et de v, alors que le mot aclfatie nen
est pas un.
Question 1.
Donner une relation de rcurrence pour le calcul du nombre nbmlg(m, n)
de mlanges diffrents que lon peut construire partir de u et v, ou plus gnralement
partir de tout couple de mots de longueurs m et n. Calculer nbmlg(5, 4).
Montrer par rcurrence que nbmlg(m, n) = (m + n)!/(m! n!). Aurait-on pu
Question 2.
trouver directement ce rsultat ?
Question 3.
Donner un algorithme permettant de dcider si un mot w est un mlange
des mots u et v. Lappliquer au cas des mots u = abc, v = db et w = dabbc.

21 - Q 1

21 - Q 2

21 - Q 3

CHAPITRE

## Complexit dun algorithme

Fools ignore complexity.
Pragmatists suffer it. Some can
avoid it. Geniuses remove it.
(Alan Perlis)

2.1

Exercices

## Exercice 22. propos de quelques fonctions de rfrence

Cet exercice permet de savoir si des fonctions de rfrence voisines caractrisent (ou non) le mme ordre de grandeur de complexit.
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 ).

## Dans cet exercice, on tablit une proprit intressante relative la somme de

deux fonctions dont on connat lordre de grandeur maximal ou exact. Ce rsultat
est utile en pratique pour dcider de lordre de grandeur maximal ou exact dun
programme obtenu par composition squentielle de plusieurs composants.
Soit f1 (n) et f2 (n) deux fonctions de N dans R+ telles que :
n (n > n0 f1 (n) 6 f2 (n)),
comme f1 (n) = log2 (n) et f2 (n) = n ou encore f1 (n) = n2 et f2 (n) = 2n .

18
23 - Q 1

23 - Q 2

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Question 1.
O(f2 (n)).

Montrer que si g(n) O(f1 (n)) et h(n) O(f2 (n)) alors g(n) + h(n)

Question 2.
(f2 (n)).

Montrer que si g(n) (f1 (n)) et h(n) (f2 (n)) alors g(n) + h(n)

## Exercice 24. Variations sur les ordres de grandeur O et

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.
Statuer sur les deux affirmations suivantes :
1. f (s) et g (s) f g (s)
2. f O(s) et g O(r) f g O(s r).

## Exercice 25. Ordre de grandeur : polynmes

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.
On considre un algorithme A dont la complexit sexprime par un polynme. On
cherche situer la complexit de A en termes de classe de complexit par un polynme
simplifi . On va dabord considrer deux cas particuliers avant de passer au cas gnral.
25 - Q 1

25 - Q 2

25 - Q 3

Question 1.
On considre les fonctions f de N1 dans R+ et g de D dans R+ (avec D =
N 0 .. 2) suivantes : a) f(n) = n3 + 3n2 + 6n + 9, b) g(n) = n3 3n2 + 6n 9. Montrer
que f et g appartiennent toutes deux (n3 ).
Question 2.
Soit f(n) = ap np + ap1 np1 + + a1 n + a0 une fonction de D dans
R+ , avec ai N et D lensemble N ventuellement priv de ses premiers lments pour
lesquelles f ne prend pas une valeur positive. Prouver que pour ap > 0, f(n) (np ).
Question 3.

ak + bk >

a+b
2

k
.

## En dduire que pour k N et n N1 , on a :

f(n, k) = 1k + 2k + + nk (nk+1 ).

(2.1)

19

## Exercice 26. Ordre de grandeur : paradoxe ?

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.
Question 1.

Montrer que :

26 - Q 1
n
X

i = (1 + 2 + + n) O(n2 ).

i=1

Question 2.

n
X
i=1

Or :

n
X

i=

26 - Q 2

n (n + 1)
.
2

i O(1 + 2 + + n)

i=1

et

Donc :

n (n + 1)
O(n).
2

O est lerreur ?

## Cet exercice a pour but de procder un calcul de complexit en moyenne. On y

met en vidence un rsultat qui, sans tre inattendu, nest pas celui quannoncerait
lintuition.
Lalgorithme ci-dessous, voisin de celui vu pour la recherche squentielle dans un dictionnaire, recherche la valeur x dans un tableau dentiers T dont les n premiers lments
sont tous diffrents, le dernier jouant le rle de sentinelle (auquel sera affecte la valeur x
recherche). Si x est dans T [1 .. n], le rsultat est lindice o x se trouve, sinon la valeur
(n + 1) est retourne.

20

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
27 - Q 1

27 - Q 2

constantes
x N1 et x = . . . et n N1 et n = . . .
variables
T 1 .. n + 1 N1 et T = . . . et i N1
dbut
i 1 ; T [n + 1] x ;
tant que T [i] 6= x faire
ii+1
fin tant que ;
crire(i)
fin

Question 1.
Donner les complexits minimale et maximale de cet algorithme, en nombre
de comparaisons.
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 quiprobablement entre 1 et N. Quelle est la complexit en moyenne de lalgorithme ?

## Exercice 28. Trouver un gu dans le brouillard

Cet exercice, qui traite dun problme plus courant que sa prsentation peut le laisser 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 :

21

## Supposons que le gu se trouve gauche 15 pas. Pour le trouver, le nombre de pas

effectus est
1 + (1 + 1) + (1 + 2) + (2 + 2) + (2 + 3) + + (14 + 15) + (15 + 15)
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
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
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

2 1

1 2

28 - Q 1

28 - Q 2

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
un peu rustique . La modifier pour atteindre lobjectif vis, savoir un nombre de pas
infrieur 10 n.

28 - Q 3

CHAPITRE

## Spcification, invariants, itration

Le bonheur est dsir de
rptition.
(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 algorithme (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 1.

Pourquoi sarrte-t-on ?

29 - Q 1

Question 2.

29 - Q 2

## Exercice 30. On a trouv dans une poubelle . . .

Cet exercice met en vidence limportance dune construction correcte.
On a trouv le texte suivant dans une poubelle dune cole dinformatique :
Prcondition : (T un tableau constant de N entiers naturels) et (N > 1).

24

## Postcondition : La variable sup contient la plus grande valeur de T .

1. Invariant : (i 1 .. N) et (j (j 1 .. i 1 T [j] 6 sup)).
2. Condition darrt : (i = N).
3. Progression :
1. si T [i] > sup alors
2.
sup T [i]
3. fin si ;
4. i i + 1
4. Initialisation : i 2 ; sup T [1]
5. Terminaison : (N + 1 i)
30 - Q 1

Question 1.

30 - Q 2

Question 2.

## Exercice 31. Somme des lments dun tableau

Cet exercice est une application simple du principe dclatement de la postcondition pour trouver un invariant, une fois cette dernire convenablement reformule
pour la mettre sous forme constructive.

31 - Q 1

Question 1.

## Prcondition : (T est un tableau dentiers naturels constant de longueur N) et (N > 0).

Postcondition : s reprsente la somme des N lments du tableau T .
31 - Q 2

Question 2.

25

## Cet exercice sintresse au problme lmentaire de recherche dune valeur

dans un tableau deux dimensions. Si une solution naturelle utilise deux
boucles, on montre quil est ais et lgant de procder avec une seule. La dmarche propose stend sans difficult un nombre de dimensions plus lev.
On utilise lhypothse du travail ralis en partie.
On considre la spcification suivante :
Prcondition : (T est un tableau constant dentiers naturels ayant L lignes et C colonnes)
et (L > 0) et (C > 0) et (V est un entier naturel prsent dans T ).
Postcondition : (i, j) dsigne une occurrence de V dans T , cest--dire que T [i, j] = V.
Question 1.
Proposer les lments dune boucle unique rpondant cette spcification,
en appliquant lhypothse du travail ralis en partie.
En dduire le programme associ et prciser sa complexit en termes de
Question 2.
comparaisons.
Remarque Nous invitons le lecteur construire le programme quivalent compos de deux
boucles imbriques afin de le comparer au prcdent, en particulier quant la facilit de
conception.

## On prsente maintenant un programme ralisant un tri. Sil ne figure pas parmi

les tris efficaces , il nen demeure pas moins intressant au plan pdagogique.
De plus, la diffrence de lexercice prcdent, il sappuie sur limbrication de
deux boucles avec une dmarche se rvlant ici simple et progressive.

## On souhaite construire le programme spcifi par :

Prcondition : (T est un tableau de N entiers naturels) et (S est le sac des valeurs contenues
dans T ) et (N > 1).
Postcondition : (T est tri par ordre croissant) et (S est le sac des valeurs contenues dans T ).
Le second conjoint de la postcondition exprime que globalement les valeurs prsentes
dans le tableau ne changent pas. On va en assurer le respect en ne modifiant T quavec la
procdure changer(i, j) qui change les lments de T dindices respectifs i et j. De cette
faon, on peut dfinitivement abandonner ce conjoint.
La postcondition ntant pas sous forme constructive, on la renforce :
Postcondition : (i 1 .. N + 1) et (T [1 .. i 1] est tri) et (i = N + 1).

32 - Q 1

32 - Q 2

26

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Si lon suppose le travail ralis en partie, on est dans la situation reprsente ci-dessous :
1

tri
On entrevoit dj que la progression vise faire en sorte que T [1 .. i] soit tri. On a le
choix entre : i) insrer T [i] sa place dans T [1 .. i], et ii) ne pas modifier T [1 .. i 1] en
supposant toutes les valeurs de T [i .. N] suprieures ou gales celles de T [1 .. i 1]. La
premire option correspond au tri par insertion ; nous allons choisir la seconde, appele
tri par slection, car il faut slectionner la plus petite valeur de T [i .. N].
33 - Q 1

33 - Q 2

## Donner la postcondition associe cette option, puis les constituants de la

Question 1.
boucle en rsultant, en ne spcifiant pas la partie relative lidentification de la position
m du minimum de T [i .. N].
Il reste maintenant construire la boucle correspondant lidentification
Question 2.
de la position m du minimum du sous-tableau T [i .. N]. Ce fragment de programme est
spcifi par :
Prcondition : (i constant) et (i 1 .. N) et (T [i .. N] est un tableau dentiers non vide)
identifier la position m du minimum du sous-tableau T [i .. N]
Postcondition : (m i .. N) et (T [m] = minji..N (T [j])).
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 :
m
1
i
N
T

## T [m] = minji..N (T [j])

Renforcer cette postcondition afin de la mettre sous forme constructive en introduisant
une variable k dans la quantification du minimum en lien avec N.
33 - Q 3

Question 3.

33 - Q 4

Question 4.

33 - Q 5

Question 5.

27

## On illustre ici lutilisation du patron propos pour la recherche linaire borne

(voir section ??, page ??) sur un exemple simple.
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.
Montrer que, si T reprsente un palindrome, on a la proprit :
j ((1 6 j 6 N) (T [j] = T [N + 1 j])).

Question 1.

34 - Q 1

Question 2.
Prciser pourquoi et comment on peut rsoudre ce problme en adaptant le
patron prsent en section ??, page ??.

34 - Q 2

Question 3.

34 - Q 3

Question 4.

34 - Q 4

## Cet exercice illustre lutilisation de lhypothse du travail ralis en partie. Le

drapeau hollandais est un problme classique, ainsi dnomm par son auteur,
E.W. Dijkstra, parce que la version originale consiste reconstituer les couleurs
du drapeau de son pays. La version traite ici est lgrement diffrente puisque
sont considrs des entiers naturels et non des couleurs. Le fait que cet algorithme
soit au cur de lalgorithme de tri rapide ( quick sort) en fait tout lintrt.
On souhaite construire le programme spcifi par :
Prcondition : (T est un tableau de N entiers naturels) et (S est le sac des valeurs contenues
dans T ) et (N > 1) et (V = T [1]).
Postcondition : (S est le sac des valeurs contenues dans T ) et (T se compose de trois parties,
gauche les valeurs infrieures V, droite les valeurs suprieures V et au centre
toutes les occurrences de la valeur V).
Schmatiquement, la postcondition se prsente comme suit (la zone du milieu nest pas
vide puisque quelle contient au moins un exemplaire de V) :
p

1
<V

q
=V

N
>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

## la postcondition. La complexit de la (des) solution(s) se fait en dnombrant les appels

la procdure changer. Tout dabord, formalisons lexpression de la postcondition :
Postcondition (version formalise) :
(p, q) ((p 1 .. N) et (q p + 1 .. N + 1) et (j (j 1 .. p 1 T [j] < V)) et
(j (j p .. q 1 T [j] = V)) et (j (j q .. N T [j] > V))
Cette version de la postcondition nest pas utilisable telle quelle pour un clatement. On
la transforme (renforce) en remplaant les variables de quantification existentielle p et q
par les variables de programmation b et w (voir section ??, page ??), do :
Postcondition (seconde version) :
(b 1 .. N) et (w b + 1 .. N + 1) et (j (j 1 .. b 1 T [j] < V)) et
(j (j b .. w 1 T [j] = V)) et (j (j w .. N T [j] > V)).
ce stade, on ne peut toujours pas procder un clatement. On envisage dintroduire
une variable r en association avec lune des variables b, w et N afin de faire apparatre un
nouveau conjoint.
35 - Q 1

35 - Q 2

35 - Q 3

Question 1.
Exprimer la postcondition rsultant de lassociation de r w, puis linvariant
dont on donnera une reprsentation graphique.
Question 2.
Poursuivre la construction de la boucle en identifiant les cas ne demandant
aucun change et de sorte que lon effectue au plus un change dans un pas de progression.
Question 3.
Donner le programme rsultant de cette construction et prciser sa complexit en nombre dchanges.

## Cet exercice est un autre exemple dutilisation de lhypothse du travail ralis

en partie. Ici, la condition darrt mrite une attention particulire.
Soit T [1 .. N] un tableau dentiers, avec N > 0. On veut construire un programme qui
permet dobtenir dans T une permutation des valeurs initiales de sorte que tous les 7
soient situs avant les 23. Cette permutation ne doit diffrer de la configuration initiale
que par la position des valeurs 7 et 23. Comme dans lexercice prcdent, la procdure
changer(i, j) est suppose disponible.
36 - Q 1
36 - Q 2

36 - Q 3
36 - Q 4

Question 1.

Question 2.
darrt ?

Question 3.

## Donner les trois autres constituants de la boucle.

Question 4.
En dduire la complexit du programme associ, la fois en termes de comparaisons et dchanges.

29

## Dans cet exercice, on illustre un cas o un renforcement de la postcondition est

effectu par introduction de variable en prsence dune quantification de dnombrement.
On souhaite construire le programme spcifi par :
Prcondition : (M constant) et (M N1 ) et (T est un tableau constant de N entiers) et (T
contient au moins M zros).
Postcondition : i dsigne la position du Me zro dans T .
Notons tout dabord que la prcondition implique que N > M. Le quantificateur #
dnote le dnombrement. Ainsi :
#j ((j 1 .. N) et (T [j] = 0))
dnombre les zros prsents dans T . La postcondition se formalise alors de la manire
suivante :
Postcondition : (i 1 .. N) et (#j ((j 1 .. i 1) et (T [j] = 0)) = M 1) et (T [i] = 0).
Bien que cette postcondition soit sous forme constructive, on peut penser que la prsence
de la quantification de dnombrement va tre gnante pour identifier un invariant efficace.
Question 1.
Donner une version renforce de la postcondition dans laquelle lexpression
quantifie est identifie une variable p.
Question 2.

## Construire la boucle sur la base de cette nouvelle postcondition.

37 - Q 2

Question 3.
En dduire le programme associ la boucle et en donner la complexit en
termes de comparaisons.

## Exercice 38. Alternance pair impair

37 - Q 1

Cet exercice illustre la mthode dclatement de la postcondition aprs une succession de renforcements dont un de nature logique.
On considre un tableau contenant autant de nombres pairs que de nombres impairs et
on veut placer chacun des nombres pairs (resp. impairs) en position dindice pair (resp.
impair). Notons que si tous les nombres pairs sont correctement placs, il en est de mme
des nombres impairs (et rciproquement), do la spcification suivante :
Prcondition : (T est un tableau de 2N entiers naturels) et (S est le sac des valeurs contenues
dans T ) et (N > 0) et (T contient N entiers pairs et N entiers impairs).
Postcondition : (S est le sac des valeurs contenues dans T ) et ((les positions dindice pair
contiennent les valeurs paires) ou (les positions dindice impair contiennent les valeurs impaires)).

37 - Q 3

30

## Comme dans lexercice prcdent, les volutions du tableau T soprent exclusivement au

moyen de la procdure changer, ce qui permet de ne plus se proccuper du premier
conjoint de la postcondition. Celle-ci ne se prsente pas sous forme conjonctive, mais il est
facile de la renforcer en prservant sa symtrie :
Postcondition (deuxime version qui implique la premire) : ((p 2 .. 2N + 2) et (p est
pair) et (les positions dindice pair de lintervalle 2 .. p 2 contiennent des valeurs
paires) et (p = 2N + 2)) ou ((i 1 .. 2N + 1) et (i est impair) et (les positions dindice
impair de lintervalle 1 .. i 2 contiennent des valeurs impaires) et (i = 2N + 1)).
Cependant, il ne sagit toujours pas dune forme conjonctive, et il faut nouveau renforcer
cette version. Pour ce faire, posons :

(p 2 .. 2N + 2) et (p est pair) et
P=
b (les positions dindice pair de lintervalle 2 .. p 2
contiennent des valeurs paires)

(i 1 .. 2N + 1) et (i est impair) et
Q=
b (les positions dindice impair de lintervalle 1 .. i 2
contiennent des valeurs impaires)
ce qui permet de rcrire la postcondition en :
Postcondition (deuxime version rcrite) :
(P et (p = 2N)) ou (Q et (i = 2N + 1)).
38 - Q 1

Question 1.

Montrer que :

A et B et (C ou D) (A et C) ou (B et D).
En dduire une nouvelle version de la postcondition sous forme constructive impliquant
la seconde.
Question 2.
condition.

38 - Q 3

Question 3.

38 - Q 4

Question 4.

## Quelle en est la complexit en nombre de conditions values et dchanges ?

Question 5.
condition :

Justifier le fait que lon peut aussi construire une boucle partir de la post-

38 - Q 2

38 - Q 5

## (p 2 .. 2N) et (p est pair) et (les positions dindice pair de lintervalle 2 .. p 2

contiennent des valeurs paires) et (i 1..2N+1) et (i est impair) et (les positions
dindice impair de lintervalle 1 .. i 2 contiennent des valeurs impaires) et (p =
2N) et (i = 2N + 1).
38 - Q 6

Question 6.

31

## Cet exercice illustre le cas dun double renforcement, savoir de la postcondition

dune part (ce qui est classique), de linvariant exig par la progression de lautre.
De plus, on y met en vidence le fait que la dmarche de construction propose
ne soppose pas des modifications visant amliorer lefficacit du programme
obtenu.
On souhaite construire le programme spcifi par :
Prcondition : (T un tableau constant dentiers de N lments) et (N > 0).
Postcondition : lg est la longueur de la plus longue succession de zros conscutifs dans T.
La postcondition nest pas sous forme conjonctive ; pour y parvenir, on peut introduire la
variable i de la manire suivante :
Postcondition (version issue du renforcement de la prcdente) : (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) et (i = N + 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 constituer 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
T

i
0

lg
2. Condition darrt On retient le conjoint cart : i = N + 1.
3. Progression Il faut rechercher un fragment de programme spcifi par :
Prcondition : (lg est la longueur de la plus longue succession de 0 contenue dans le
sous-tableau T [1 .. i 1]) et (i 1 .. N + 1) et non(i = N + 1)
Progression
Postcondition : (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).
La valeur T [i] existe puisque i 6= N + 1. Si T [i] 6= 0, il ny a rien faire dautre
qu incrmenter i. Sinon (T [i] = 0), il faut exprimer que T [i] peut faire partie de la
plus longue chane de zros du sous-tableau T [1 .. i] (avant de rtablir linvariant),
ce qui peut se faire en calculant, par une boucle rtrograde, la longueur p de la plus

32

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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
39 - Q 2

39 - Q 3
39 - Q 4

Question 1.

## Expliciter le nouvel invariant.

Question 2.
En prenant comme condition darrt (i = N + 1), poursuivre la construction
de la boucle (progression, initialisation et expression de terminaison).
Question 3.

## crire le programme. Donner sa complexit en nombre de comparaisons.

Question 4.
Proposer et justifier une autre condition darrt susceptible damliorer lefficacit de la boucle.

## Exercice 40. lment majoritaire

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 exploite 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, efficace et lgante.
Si V est un tableau ou un sac, lexpression mult(x, V) reprsente la multiplicit (cest-dire le nombre doccurrences) de la valeur x dans V. On considre un sac S de cardinal N
(N > 1) dentiers strictement positifs. S est dit majoritaire sil existe un entier x tel que :
 
N
mult(x, S) >
+ 1;
2
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 ) rsolvant 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.

## Une seconde approche

Afin damliorer la complexit au pire, on envisage une solution en trois temps : tout
dabord un raffinement de S par un tableau T suivi dun tri de T , puis la recherche dune
squence de valeurs identiques de longueur suprieure bN/2c. La premire tape est
en (N), la seconde en O(N log2 (N)) et la troisime de complexit linaire, do une
complexit au pire en O(N log2 (N)).

## Une solution itrative efficace

La solution envisage maintenant se fonde sur une structure de donnes abstraite constitue de quatre sacs. Aprs avoir propos un invariant pour litration, certaines proprits
de cet invariant sont mises en vidence afin de permettre la construction dun programme
correct. On effectue ensuite un raffinement de la structure de donnes abstraite en liminant trois des quatre sacs initiaux et en nutilisant quun tableau constant et des variables
scalaires dans lalgorithme final.
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.
Exemple

S
P

(1, 3)

(4, 1)
5

(1, 3)

2
1

suivantes :

34

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Proprit 1 :
|S| = 2 |P| + |C| + |R|.
Cette proprit est triviale, et nous ne la dmontrons pas.
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).

40 - Q 1
40 - Q 2

40 - Q 3

40 - Q 4

40 - Q 5

Question 1.

## Dmontrer les proprits 2 et 3.

Question 2.
On va construire une boucle dont linvariant correspond une situation o
S est partitionn en P, C et R et dans laquelle la condition darrt survient quand R est
vide. Quelle conclusion peut-on tirer alors ?
Question 3.
Prciser la prcondition et la postcondition de la boucle abstraite construite
sur linvariant propos. Comment peut-on rpondre au problme initial partir de cette
boucle ?
Question 4.
Complter la construction de la boucle abstraite (progression, initialisation,
terminaison).
Question 5.
Comment peut-on raffiner la structure de donnes sur la base de variables
scalaires et dun tableau ? En dduire un algorithme itratif rsolvant le problme de la
recherche de llment majoritaire dun sac S. Quelle en est la complexit en nombre de
comparaisons ?

## De faon analogue lexercice relatif llment majoritaire (voir exercice 40,

page 32), on cherche une solution en affaiblissant la postcondition. La solution
retenue fait, pour partie, appel la recherche linaire borne (voir section ??,
page ??). La solution obtenue se rvle lgante et de complexit linaire.
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

35

## une personne i et de lui demander si elle connat la personne j (diffrente delle-mme).

Lopration Connat(i, j) rend vrai ou faux en fonction de la rponse (obligatoire et sincre)
de la personne interroge.
Comme il y a N(N 1)/2 paires de personnes, le problme peut tre coup sr rsolu
par au plus N(N 1) oprations. Cependant, on cherche effectuer moins doprations, si
possible un (petit) multiple de N.
Question 1.

41 - Q 1

Question 2.
Connat(i, j) :

41 - Q 2

## a) si la rponse est vrai, alors j peut tre la star, mais pas i,

b) si la rponse est faux, alors i peut tre la star, mais pas j.
Question 3.
Donner la prcondition et la postcondition du programme rsolvant le problme pos.
Question 4.
Spcifier les constituants dune boucle identifiant une personne susceptible
dtre la star du groupe et appele star potentielle .
Question 5.
Spcifier les autres composants du programme trouvant la star du groupe ou
prouvant labsence de star dans le groupe et donner le programme rsolvant le problme
initial.
Question 6.
Quelle est la complexit de ce programme en prenant Connat (i, j) comme
opration lmentaire ?

## Dans cet exercice, on sintresse laffaiblissement de la prcondition. Cette

dmarche qui est lgitime, consiste rsoudre un problme en se reportant un
problme plus gnral dont on connat la solution. Laffaiblissement est ralis par
limination dune hypothse et on tudie limpact de ce choix sur les performances
travers deux exemples.
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.

## Tri croissant dun tableau tri par ordre dcroissant

On souhaite construire le programme spcifi par :
Prcondition : (T est un tableau de N entiers naturels) et (S est le sac des valeurs contenues
dans T ) et (N > 1) et (T est tri par ordre dcroissant).

41 - Q 3

41 - Q 4

41 - Q 5

41 - Q 6

36

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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 1

42 - Q 2

Question 1.
Proposer le principe dune solution de complexit linaire dans le cadre de
la premire option.
Question 2.
Quelle complexit atteint-on si lon utilise lalgorithme propos dans lexercice 33, page 25 ? Peut-on esprer mieux en recourant un algorithme de tri classique ?
Conclure.

## Tableau variation contrainte

On considre le programme dont la spcification est :
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 plus 1).
Postcondition : La variable i dsigne le zro de plus petit indice de T .
Cette spcification diffre de celle de lexemple trait page ??, puisque lon dispose dune
proprit sur la variation des nombres prsents dans T . Ici encore, deux stratgies sont
envisageables : programme spcifique ou utilisation de lalgorithme propos page ??. Cette
seconde option correspond laffaiblissement de la prcondition du problme pos dont
on ignore le troisime conjoint.
42 - Q 3

Question 3.
Montrer que si T est tel que lcart entre deux lments conscutifs de T est
dau plus 1, alors :
(T [i] > 0) j (j i .. i + T [i] 1 T [j] > 0).

42 - Q 4

Dvelopper la solution spcifique fonde sur une boucle dont on donnera les
Question 4.
constituants.

42 - Q 5

Question 5.

42 - Q 6

Question 6.

## 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 ).
0-R7

Question 7.

37

## Exercice 43. Meilleure division du primtre dun polygone

Le problme trait ici est une variante assez sophistique de la recherche squentielle. Habituellement, dans un problme de ce type, lemploi de la technique
darrt au plus tt na pas dincidence sur la complexit asymptotique. Ce nest
pas le cas ici, o elle est la cl de vote de lamlioration defficacit obtenue par
rapport une mthode nave. Par ailleurs, ce problme trouve une formulation
dans un espace deux dimensions gnralement rsolue par deux boucles imbriques. Ici, comme dans lexercice 32 page 25, lutilisation dune seule boucle rend
la construction plus simple.
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.

## Dfinitions Notations Reprsentation

Dans la suite, |a| dnote la valeur absolue de a. Le ct qui a comme origine le sommet
i est not (i). La corde qui joint les sommets i et j est note (i, j). Larc qui va du sommet
y

i au sommet j est not (i, j). La longueur dun arc a est note kak.
Un polygone dordre N est reprsent par un tableau d (d 1 .. N R+ ) tel que d[i]
est la longueur du ct (i). La figure 3.1, illustre le cas dun polygone dordre 9.
4

1.6

5
1. 1

1.6

1.3

.9

2.

1.8

.7 8
.6 9

d[1]
d[2]
d[3]
d[4]
d[5]
d[6]
d[7]
d[8]
d[9]

=
=
=
=
=
=
=
=
=

2.2
0.9
1.6
1.6
1.1
1.3
1.8
0.7
0.6

## Plus formellement, si loprateur dnote la concatnation darcs adjacents, un arc (non

vide) se dfinit de faon inductive de la manire suivante comme une succession de cts.
Dfinition 1 (Arc) :
Cas de base :

38

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

y
(i, i + 1)

= (i)

(N, 1)

= (N).

i 1 .. N 1

Cas inductif :
y
y
y
(i, j)
= (i, i + 1) (i + 1, j)
y
y
y
(N, j) = (N, 1) (1, j))

j 6= i + 1 et i 6= N
j 6= 1.

## De mme, la longueur dun arc se dfinit comme suit.

Dfinition 2 (Longueur dun arc) :
Cas
deybase :
k(i, i + 1)k = d[i]
k(N, 1)k

i 1 .. N 1

= d[N].

Cas inductif :
y
y
k(i, j)k
= d[i] + k(i + 1, j)k
y
y
k(N, j)k = d[N] + k(1, j))k

j 6= i + 1 et i 6= N
j 6= 1.

## Dfinition 3 (Corde localement optimale) :

La corde (j, k) est localement optimale par rapport son origine j si :


 y
y
y

y
k(j, i)k k(i, j)k .
k(j, k)k k(k, j)k = min

i1..N{j}

## Dfinition 4 (Corde globalement optimale) :

La corde (j, k) est globalement optimale si :

y
y

k(j, k)k k(k, j)k =
min

u 1 .. N et
v 1 .. N et
u 6= v


 y
y

k(u, v)k k(v, u)k .

(3.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) :

y

y

y
k(i, j)k k(j, i)k = 2 k(i, j)k p .

2

(3.2)

Les couples de sommets (j, k) qui satisfont la formule (3.1) sont galement ceux qui vrifient :

39

## CHAPITRE 3. SPCIFICATION, INVARIANTS, ITRATION

y
y

k(j, k)k k(k, j)k

2

min

u 1 .. N et
v 1 .. N et
u 6= v

y
k(u, v)k p .

2

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

y
k(u, v)k p .
=
min

2
2
u 1 .. N et
v u + 1 .. N {1}

## Si (j, k) est une corde localement optimale issue de j, la valeur


 y

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

k(1, 2)k

k(1, 3)k

.........

k(1, 1)k

.........
..
.

k(2, 1)k

k(2, 3)k
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 :
1
2
3
4
5
6
7
8
9

2
2.2

3
3.1
0.9

4
4.7
2.5
1.6

5
6.3
4.1
3.2
1.6

6
7.4
5.2
4.3
2.7
1.1

7
8.7
6.5
5.6
4.0
2.4
1.3

8
10.5
8.3
7.4
5.8
4.2
3.1
1.8

9
11.2
9.0
8.1
6.5
4.9
3.8
2.5
0.7

1
11.8
9.6
8.7
7.1
5.5
4.4
3.1
1.3
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
43 - Q 2

Question 1.

## Dmontrer lidentit 3.2, page 38.

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.

43 - Q 4

Question 4.

## Dmontrer la proposition relative la troisime observation ci-dessus.

43 - Q 5

43 - Q 6

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 ?
Question 6.

## Considrons lexemple suivant :

5

1
3

2
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

43 - Q 8

Question 7.
On dcide de construire une solution algorithmique sur la base dune seule
boucle. Proposer un invariant pour cette boucle.
Question 8.
Complter la construction de la boucle (condition darrt, progression, initialisation, 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

## Diminuer pour rsoudre, rcursivit

Le camlon na la couleur du
camlon que lorsquil est pos
sur un autre camlon.
(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.
On considre la fonction Calc dont le code figure en dbut de chapitre. On va montrer
que cette fonction retourne la valeur 91 pour tout paramtre dappel strictement infrieur
102.
Question 1.

## tablir que Calc(100) = Calc(101) = 91.

44 - Q 1

Question 2.
Montrer par induction (rcurrence simple sur k N) que, pour tout n de
lintervalle (90 11k) .. (100 11k), lappel Calc(n) retourne la valeur 91.
Question 3.

## Exercice 45. Complexit du calcul rcursif de la suite de Fibonacci

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

44 - Q 2

42

## F(n) = F(n 1) + F(n 2)

45 - Q 1

n > 2.

Question 1.
crire une fonction rcursive FiboR(n) calque sur la dfinition rcurrente
pour calculer F(n).

45 - Q 2

Question 2.

45 - Q 3

Question 3.

43

## Cet exercice sinscrit dans le domaine de la gomtrie euclidienne et ne prsente

aucune difficult notable, si ce nest que, la valeur associe la base du raisonnement inductif utilis, nest pas 0 ou 1, cas annoncs comme habituels dans la
prsentation de ce chapitre.
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
le principe dune fonction boolenne den-tte :

46 - Q 1

MmeCt(xA , yA , xB , yB , xC , yC , xD , yD ) rsultat B
dcidant si les points C et D, de coordonnes (xC , yC ) et (xD , yD ), sont du mme ct de
la droite (AB). Quelle en est la complexit en termes de conditions valuer ?
noncer une proprit dinclusion dun point dans un triangle et crire une
Question 2.
fonction den-tte :

46 - Q 2

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
dcidant si le point P est inclus dans le polygone convexe n sommets de coordonnes
(x1 , y1 ), (x2 , y2 ), . . ., (xn , yn ) avec n > 3.
Question 4.
Donner la complexit temporelle au pire de cette fonction en termes de
nombre de conditions values.
Question 5.

## Exercice 47. Dessin en doubles carrs imbriqus

46 - Q 4

46 - Q 5

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

## Fig. 4.1 Un dessin ayant quatre doubles carrs imbriqus

la fin du trac, la plume se trouve au point de dpart,
la plume ne doit pas tre leve en cours de dessin et aucun trait ne doit tre fait
plusieurs fois (ni temps mort, ni travail inutile).
On cherche raliser le dessin grce une procdure de type Diminuer pour rsoudre
respectant ces contraintes. Ici, la taille n du problme (n N) correspond au nombre de
doubles carrs que lon souhaite imbriquer.
47 - Q 1
47 - Q 2

47 - Q 3

Question 1.

## Proposer une stratgie de type Diminuer pour rsoudre qui permet de

Question 2.
raliser ce dessin. En dduire le modle de rsolution par diminution associ.
Question 3.

## crire la procdure ralisant ce dessin, dont lappel se fait par la squence :

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
o x0 et y0 dsignent les coordonnes du point de dpart du trac et c0 la longueur du
ct du carr extrieur .
47 - Q 4

Question 4.
Quelle en est la complexit en termes de nombre dappels la fonction tracer
et quelle est la longueur du trac ?

45

## Exercice 48. Dessin en triangles

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 .
On veut tracer la figure suivante :

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 Diminuer 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.
squence :

## Donner le code de la procdure correspondante dont lappel est fait par la

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

48 - Q 1

48 - Q 2

46

## o m est le nombre de couches de triangles, (x0 , y0 ) reprsente les coordonnes du sommet

associ langle droit (bas du dessin) et d0 est la hauteur du triangle lmentaire.
48 - Q 3

48 - Q 4

48 - Q 5

Question 3.
Quelle est la complexit de cette procdure en termes dappels la fonction
tracer et de nombre de triangles de taille 1 tracs ?
Question 4.
Afin de gagner en efficacit en vitant des tracs inutiles, on demande de
rviser la stratgie prcdente et de proposer le principe dune solution dans laquelle la
plume nest pas leve en cours de dessin et tout segment nest trac quune seule fois.
Question 5.
Donner le code de la nouvelle procdure den-tte Triangle2(n, x, y, d) et
montrer quelle est optimale.

## Exercice 49. Parcours exhaustif dun chiquier

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.
On considre un chiquier de ct c = 4m + 1 (avec m > 0). On va montrer quun
cavalier peut en effectuer le parcours exhaustif en ne visitant chaque case quune seule
fois. Notons quil est possible que ce problme ait une solution pour certains chiquiers de
ct autre, mais ceci reste hors du champ de cet exercice. Le cavalier respecte ses rgles
de dplacement au jeu dchecs, cest--dire que sil est sur la case (i, j), il peut aller sur
les huit cases :
(i 2, j 1)
(i 1, j 2)

(i 2, j + 1)
(i 1, j + 2)

(i + 2, j 1)
(i + 1, j 2)

(i + 2, j + 1)
(i + 1, j + 2)

pour autant quil ne sorte pas de lchiquier. Dans cet exercice, i dsigne lindice de ligne
et j lindice de colonne.
49 - Q 1

49 - Q 2

49 - Q 3

Question 1.
Proposer un parcours exhaustif dun chiquier de ct c = 5 (m = 1) en
partant de la case (1, 1).
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.
Question 3.

47

o
o

A(1)

o
B(1)

C(1)

D(1)

o
o

A(2)

o
B(2)

C(2)

D(2)

## Exercice 50. Courbes de Hilbert et W-courbes

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.

## Les courbes de Hilbert

On considre les courbes de la figure 4.2, dont les points de dpart sont reprsents par
un petit cercle. On dispose de la fonction tracer dfinie dans lexemple 1 page ??.
Question 1.
En partant de ces courbes, donner lexpression de A(i + 1), B(i + 1), C(i + 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.
Question 2.

## Dessiner la courbe A(3) appele courbe de Hilbert de niveau 3.

Question 3.
Donner le code dune procdure effectuant le trac de la courbe de Hilbert
de niveau n correspondant A(n).
Question 4.
Quelle est la complexit CA (n) du trac de A(n) en nombre dappels la
fonction tracer ?
Question 5.
.

## Dterminer la hauteur et la largeur du trac ralis en fonction de n et de

Les W-courbes
On considre les courbes dfinies comme suit :
A(1)

B(1)

C(1)

D(1)

50 - Q 1

50 - Q 2
50 - Q 3

50 - Q 4

50 - Q 5

48

et pour i > 1 :
A(i + 1)
B(i + 1)
C(i + 1)
D(i + 1)
W(i)

=
=
=
=
=

A(i)
B(i)
C(i)
D(i)
A(i)

b
g
h
d
b

d
b
g
h
d

B(i)
C(i)
D(i)
A(i)
B(i)

d
b
g
h
g

D(i)
A(i)
B(i)
C(i)
b

d
b
g
h
C(i)

h
d
b
g
h

A(i)
B(i)
C(i)
D(i)
g

D(i)

50 - Q 6
50 - Q 7

Question 6.

## Tracer les courbes W(1) et W(2).

Question 7.
tablir la complexit du trac de la courbe W(n) (n > 1) en termes dappels
la procdure tracer en fonction de n et .
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

Essais successifs
Though patience be a tired mare,
yet she will plod.
(William Shakespeare)

5.1

Exercices

## Il sagit dun exercice classique de programmation, trait ici selon le paradigme

essais successifs . Le problme consiste tenter de placer n reines sur un chiquier n n, sans quaucune de ces pices ne soit en prise. Deux solutions sont
tudies. La premire solution utilise comme structure dnumration une matrice carre destine reprsenter toutes les fonctions totales de lchiquier vers
les boolens. Cette solution fait lobjet dune optimisation. La seconde solution
utilise comme structure dnumration un vecteur destin reprsenter toutes
les bijections de lintervalle 1 .. n sur 1 .. n.
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

0ZqZ0Z0Z
Z0Z0ZqZ0
6
0Z0l0Z0Z
5
ZqZ0Z0Z0
4
0Z0Z0Z0l
3
Z0Z0l0Z0
2
0Z0Z0ZqZ
1
l0Z0Z0Z0
8
7

(a)

0l0Z
Z0Zq
2
qZ0Z
1
Z0l0
4
3

(b)

## Dans la suite, on souhaite obtenir toutes les configurations de lchiquier rpondant au

problme pos.
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) ?

## Une premire version

Dans cette premire version, on choisit comme structure dnumration le tableau X,
dfini sur le produit cartsien 1 .. n 1 .. n et valeur dans B (faux (resp. vrai) signifiant
labsence (resp. la prsence) dune reine sur la position considre). Si X est une solution,
X est une fonction totale (chaque cellule de X est lorigine dun couple) surjective (il
y a n couples ayant comme extrmit vrai et (n2 n) couples ayant comme extrmit
faux). Un tableau X en cours dlaboration est une fonction totale non surjective a priori
puisquil peut ny avoir aucune cellule qui dsigne faux. Cependant, si X est une solution,
X satisfait la contrainte propre qui prcise que les n reines attaquent toutes les cases vides
de lchiquier mais quelles ne sont pas elles-mmes en prise. Cette contrainte entrane la
surjectivit de X. Il est donc inutile de vrifier la surjectivit (comme le ferait le patron
TTS, page ??), celle-ci tant un sous-produit de la solution. Le patron appropri est donc
TT (toujours page ??), amnag partir du squelette T2D (page ??) afin de tenir compte
du caractre bidimensionnel du domaine de dfinition de la structure dnumration.
51 - Q 2

51 - Q 3

Question 2.
Identifier les lagages possibles et tracer une portion significative de larbre
de rcursion pour le cas n = 4.
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.

51

## CHAPITRE 5. ESSAIS SUCCESSIFS

c
n

1
1

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
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.

51 - Q 4

## Une seconde version

On souhaite amliorer la version prcdente en raffinant la structure de donnes de la
manire suivante (voir aussi [35]). Si lon considre la fonction X utilise ci-dessus, on
peut constater que lon ne perd pas dinformation en ne conservant que les couples du
domaine de X qui sont en relation avec la valeur vrai. Puisquune solution, si elle existe,
doit comporter une reine et une seule par ligne, cette relation, X, est une bijection de
lintervalle 1 .. n sur lui-mme (ou si lon prfre, une permutation de lintervalle 1 .. n).
Nous sommes alors dans la situation o le patron appropri est TTI de la page ??, appliqu
au cas o le domaine et le codomaine de X sont 1 .. n. Il nous faut donc produire, non plus
toutes les fonctions totales comme prcdemment, mais uniquement toutes les bijections de
1..n sur 1..n. Par construction, rapporte leur interprtation chiquenne, ces bijections
reprsentent une configuration dchiquier comprenant une reine par ligne et une reine par
colonne. Reste cependant raliser le filtrage qui se rapporte aux diagonales. Pour ce faire,
on propose de reprendre la technique des tableaux boolens utilise dans la question 4 cidessus.
Question 5.
Identifier les lagages possibles et dessiner une portion significative de larbre
de rcursion pour le cas n = 4.
Question 6.
Mettre en uvre cette solution travers la procdure NReines3(l) dans
laquelle le paramtre l est lindice de remplissage du vecteur dnumration X.
Question 7.

## 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

51 - Q 5

51 - Q 6

51 - Q 7

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 algorithmes 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.
On veut placer un nombre minimal de reines sur un chiquier n n de sorte que :
1. elles ne sont pas en prise,
2. lensemble des cases de lchiquier est sous leur contrle.
On rappelle quune reine contrle les cases de la colonne et de la ligne sur laquelle elle
se trouve, ainsi que les cases des deux diagonales passant par la case o elle est situe.
Lchiquier (a) de la figure 5.1, page 52, illustre une premire configuration avec six reines
contrlant toutes les cases dun chiquier 8 8 sans quaucune delles ne soit attaque.
Lchiquier (b) montre une autre configuration, cinq reines cette fois.

0l0Z0Z0Z
Z0Z0l0Z0
6
0ZqZ0Z0Z
5
Z0Z0Z0Z0
4
0Z0Z0ZqZ
3
Z0Z0Z0Z0
2
0Z0l0Z0Z
1
l0Z0Z0Z0

0Z0Z0Z0Z
Z0Z0Z0Z0
6
0Z0Z0Z0Z
5
Z0ZqZ0Z0
4
0l0Z0Z0Z
3
Z0Z0l0Z0
2
0ZqZ0Z0Z
1
l0Z0Z0Z0

(a)

(b)

## Fig. 5.1 Deux exemples dchiquiers avec sentinelles

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 affirmation 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 solutions, la premire fonde sur une matrice dnumration (voir questions 2 et 3, page 50),

53

## CHAPITRE 5. ESSAIS SUCCESSIFS

dont lefficacit est perfectible, et la seconde, fonde sur un vecteur dnumration reprsentant 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 solution. 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 colonne. 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 rcursion incluant au moins une situation dlagage et une situation de succs, pour un chiquier
5 5.
On sinspire du patron OPI (figure ??, page ??) pour dfinir la procdure
Question 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.
La solution prcdente conduit refaire plusieurs fois les mmes calculs
Question 4.
(comme le dnombrement des cellules libres ds lajout dune nouvelle reine). Nous souhaitons 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 inutiles.
Rpertorier et spcifier les oprations ncessaires la gestion du tableau Prise, puis dfinir
la procdure Sentinelles2, instance du patron OPI. Fournir son code.

## Exercice 53. Parcours dun cavalier aux checs

Encore un problme sur le thme des chiquiers. Cette fois, le rsultat ne consiste
pas obtenir une configuration particulire mais dterminer un ordre de placement 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

52 - Q 2

52 - Q 3

52 - Q 4

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.

## Dtermination de tous les dplacements dun cavalier

On considre un chiquier n n vide (n > 1, typiquement n = 8), un cavalier, d et
a deux cases diffrentes de lchiquier. On recherche tous les parcours lmentaires 2 que
peut emprunter le cavalier pos sur la case de dpart d pour atteindre la case darrive a,
en respectant les rgles du dplacement des cavaliers au jeu dchec.
Dans la suite, on utilise indiffremment la notation chiquenne (chiffres en ordonne,
lettres en abscisse, positions sous la forme lettre/chiffre) ou cartsienne pour reprer une
case de lchiquier.
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 + 1, j 2)

(i 2, j + 1)
(i + 1, j + 2)

(i 1, j 2)
(i + 2, j 1)

(i 1, j + 2)
(i + 2, j + 1),

(5.1)

## condition videmment de ne pas sortir de lchiquier. Le schma (a) de la figure 5.2

reprsente les dplacements possibles en un coup pour un cavalier plac initialement sur
la case (4, 4).
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).

55

## CHAPITRE 5. ESSAIS SUCCESSIFS

0Z0Z0Z0Z
Z0Z0Z0Z0
6
0ZNZNZ0Z
5
ZNZ0ZNZ0
4
0Z0M0Z0Z
3
ZNZ0ZNZ0
2
0ZNZNZ0Z
1
Z0Z0Z0Z0

0Z0Z0Z0Z
Z0Z0Z0Z0
6
0ZNZNZ0Z
5
M0Z0Z0Z0
4
0Z0M0M0Z
3
ZNZNZ0Z0
2
0Z0Z0Z0Z
1
Z0M0Z0Z0

(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).

0Z0Z
Z0Z0
2
0Z0Z
1
Z0Z0
4
3

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 :

0Z0Z
2
Z0Z0
2
3
0Z0Z
1 1 4
Z0Z0
4
3

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 :

(a, 1)

(b, 3)

(d, 2)

(b, 1)

Ce faisant, nous avons nanmoins introduit une difficult supplmentaire, quil va falloir 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 consisterait 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.

53 - Q 1

Question 1.
On considre un chiquier 4 4, un cavalier pos sur la case de dpart a1
et destin atteindre la case b1. Poursuivre le dveloppement de la branche gauche de
larbre de recherche ci-dessous :

57

## CHAPITRE 5. ESSAIS SUCCESSIFS

a1
a1
b3
a1
b3
c1

a1
b3
d2

a1
b3
c1
a2
a1
b3
c1
a2
b4

a1
b3
c1
d3
a1
b3
c1
a2
c3

a1
c2

a1
b3
c1
d3
b4

a1
b3
d4

a1
b3
d2
b1
a1
b3
c1
d3
b2

a1
b3
d2
c4
a1
b3
d2
c4
a3

a1
c2
a3

a1
b3
d4
c2
a1
b3
d2
c4
b2

a1
b3
d4
c2
a3

a1
c2
a3
b1
a1
b3
d4
c2
b4

a1
c2
b4
a1
c2
a3
c4

a1
c2
a3
c4
b2

a1
c2
d4

a1
c2
b4
a2
a1
c2
a3
c4
d2

a1
c2
b4
a2
c1

a1
c2
b4
d3
a1
c2
b4
a2
c3

a1
c2
b4
d3
b2

a1
c2
d4
b3
a1
c2
b4
d3
c1

a1
c2
d4
b3
c1

Question 2.
Effectuer lanalyse du problme pos en prcisant les constituants du patron
TTI. Fournir dune part le code de la procdure Cavalier1, instance du patron TTI, et
dautre part le code dune squence dappel. valuer la complexit au pire en nombre de
nuds de larbre de rcursion.

53 - Q 2

## Dtermination du parcours optimal dun cavalier

On sintresse maintenant au problme suivant : en combien de coups minimum un
cavalier peut-il aller de la case d = (i, j) la case a = (k, l) (en supposant toujours ces
deux cases diffrentes) ? Pour ce faire, on se propose de rechercher le parcours optimal (ou
lun des parcours optimaux) dun cavalier en instanciant le patron OPI (voir figure ??,
page ??). On conserve la mme structure dnumration que dans la premire partie.
Question 3.
Spcifier les divers lments instancier dans le patron OPI permettant de
rsoudre ce problme.
Donner lalgorithme CavalierOpt qui permet de connatre lun des parcours
Question 4.
optimaux du cavalier.

## Exercice 54. Circuits et chemins eulriens tracs dun seul trait

53 - Q 3

53 - Q 4

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.
eulriens.

Pour chacun des graphes ci-dessous, fournir, sil en existe, lun des circuits

54 - Q 1

58

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

a
a

(a)
54 - Q 2

54 - Q 3

54 - Q 4

(b)

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.
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.
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).
a

(a)

21

12

20

22
14

15

28

13

23

24
4

16

17

o
11
19

10
18

g
27

25

c
26

(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.
Expliquer les modifications quil faut apporter lalgorithme de la troisime question
pour rsoudre cette variante du problme initial.

59

## Lintrt de cet exercice est dtudier un algorithme de type essais successifs

pour le problme classique de la recherche dun chemin hamiltonien dans un
graphe.
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) :
TELE
SETE

TETE
LESE

MELE
LEVE

MERE
MISE

CURE
MITE

CUBE
MILE

SEVE

## 2. les six dominos suivants, numrots de 1 6 :

1
BETE

2
SEME

3
VECU

4
LESE

5
TELE

6
REMI

Par exemple, le domino SEME peut tre mis aprs le domino REMI, puisque MISE est
un mot du lexique.
On reprsente un tel jeu par un graphe : les six dominos correspondent aux six nuds
du graphe, et un arc relie deux nuds sil est possible de juxtaposer le nud origine au
nud extrmit.
Exemple

1 : BETE
TELE

4 : LESE
CUBE
SEVE
MILE

SETE
3 : VECU

MELE
CURE

LEVE

6 : REMI
MITE

MERE

5 : TELE
MISE
2 : SEME
LESE

TETE

60

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Ltiquette place sur chaque arc correspond au mot du lexique form par la concatnation 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 ?
Dans la suite, on suppose disponible lensemble M des nuds du graphe (numrots
de 1 n) ainsi que la fonction Succ(s) (voir dfinition ??, page ??), qui est telle que
Succ 1 .. n P(1 .. n) et qui, pour chaque nud s, fournit lensemble Succ(s) des
successeurs de s (cest--dire lensemble des mots juxtaposables s). Ainsi, dans lexemple
de lnonc, on a :

55 - Q 2

55 - Q 3

55 - Q 4

Succ(s)

{4,5}

{4,6}

{1,6}

{3,5}

{2,3}

{2,4,5}

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.
Question 3.
Pour lexemple ci-dessus, fournir larbre de rcursion obtenu partir du
nud 1 (le domino BETE) comme racine.
Question 4.
Fournir une instance du patron ToutesSolutions qui trouve tous les chemins
hamiltoniens dans un graphe de n nuds.

61

## Exercice 56. Le voyageur de commerce

Exemple classique dapplication du principe de la recherche dune solution optimale par essais successifs, cet exercice est dun abord simple. Lexistence dalgorithmes plus efficaces (comme lalgorithme de Held-Karp ou une approche de
type PSEP voir exercice 70, page 81) rduit cependant son intrt pratique.
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 programme 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

7
5

17

8
1

(a)

12

6
9

(b)

5
(c)

## Fig. 5.4 Exemples de rseaux de villes

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
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
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.

56 - Q 1

56 - Q 2

62
56 - Q 3

56 - Q 4

56 - Q 5

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Question 3.
Proposer une structure dnumration X pour rsoudre le problme considr
et fournir ses proprits. En dduire le patron dalgorithme qui convient et fournir son
code gnrique sil nest pas disponible dans lintroduction.
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.
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.

## Exercice 57. Isomorphisme de graphes

Cet exercice porte sur des graphes orients. Lalgorithme considre deux graphes
entre lesquels on recherche un isomorphisme. Il opre sur deux niveaux : il recherche une bijection des nuds, qui sous-tend une bijection des arcs. Cette caractristique 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.
a

H
Fig. 5.5 Deux exemples de graphes

63

## CHAPITRE 5. ESSAIS SUCCESSIFS

B=

1
c

2
a

3
b

4
e

5
d

En effet, cette relation induit bien une bijection sur les arcs, que lon peut reprsenter par
le tableau suivant :
(1, 2)
(c, a)

(1, 3)
(c, b)

(1, 4)
(c, e)

(2, 3)
(a, b)

(3, 4)
(b, e)

(3, 5)
(b, d)

(5, 1)
(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

VG B

B VH

## On constate que les deux compositions de relations VG B et VG B sont identiques : les

graphes G et H sont isomorphes.
Dans les exemples de la figure 5.5, page 62, le nud 1 du graphe G a pour demi-degr
extrieur 3 et pour demi-degr intrieur 1. Il en est de mme du sommet c du graphe H.
Question 1.

57 - Q 1

## On sintresse lcriture dun algorithme qui lon fournit un couple de graphes

(G1 , G2 ) ayant le mme nombre n de sommets et le mme nombre darcs, et qui dlivre le
nombre disomorphismes possibles entre G1 et G2 .
Question 2.
On considre les deux graphes G et H de la figure 5.5, page 62. numrer
toutes les bijections entre NG et NH qui se limitent prserver larit des sommets.
Obtient-on systmatiquement des isomorphismes entre G et H ? En dduire une stratgie
dlagage.
Question 3.
Dans le cadre du dnombrement des isomorphismes, proposer une structure
dnumration X et fournir ses proprits.
Question 4.

Fournir larbre de rcursion lagu pour lexemple de la figure 5.5, page 62.

Question 5.
Fournir un algorithme essais successifs pour rsoudre cet exercice. On
sintressera au traitement effectuer pour sassurer que le vecteur dnumration construit
corresponde un isomorphisme entre G1 et G2 . La fonction d+ (s) (resp. d (s)) dlivre le
demi-degr extrieur (resp. intrieur) du sommet s (voir dfinition ?? page ??).

57 - Q 2

57 - Q 3

57 - Q 4
57 - Q 5

64

## Cet exercice aborde le problme du coloriage de graphes. On se limite concevoir

un algorithme qui dtermine si le graphe peut-tre colori avec m couleurs.
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

2
a

3
c

(a)

(b)

## La fonction de coloriage peut tre reprsente par le vecteur dnumration X[1 .. 5] =

[1, 2, 3, 1, 3] dont le premier lment est la couleur du premier nud a, le second, la couleur
du second nud b, et ainsi de suite pour les cinq nuds.
58 - Q 1

58 - Q 2

58 - Q 3

58 - Q 4

58 - Q 5

Question 1.
Pour le graphe (a) ci-dessus, proposer un coloriage X0 (diffrent de X) obtenu
par une permutation P des couleurs (X0 = P X). Proposer un second coloriage X00 qui ne
soit pas obtenu par une permutation des couleurs.
Question 2.
Soit G = (N, V) un graphe et Z une peinture de G (cest--dire une fonction
totale de N vers un ensemble de couleurs). Fournir une expression ensembliste (exprime
sur la base des relations Z et V) de la condition qui exprime que Z est un coloriage de G.
Question 3.
Dfinir le vecteur dnumration X et ses proprits pour le problme de la
recherche dun coloriage. En dduire le patron qui sapplique si lon dcide de sarrter au
premier coloriage trouv (voir tableau ??, page ??).
Question 4.
Fournir larbre de rcursion lagu parcouru pour la recherche du premier
coloriage du graphe (a) ci-dessus.
Question 5.
On ne connat pas de proprit ncessaire et suffisante de coloriage dun
graphe G par les m couleurs de lensemble C. En consquence, pour dterminer si un
graphe donn G quelconque peut ou non tre colori laide dun ensemble de m couleurs
donnes, il est ncessaire de renforcer lobjectif atteindre en recherchant explicitement
un coloriage. Fournir le code de lalgorithme et un exemple dappel (on suppose disponible
la fonction Succ(s) voir dfinition ?? page ?? , qui dlivre les voisins du sommet s).

65

## Dans cet exercice, on sintresse aux situations o le scrutin prsidentiel des

tats-Unis ne permet pas llection dun candidat pour cause dgalit de voix.
Les dernires questions portent sur un lagage rendu possible par lexploitation
dune symtrie.
Les lections prsidentielles amricaines se droulent approximativement de la faon
suivante : dans chacun des 50 tats, les lecteurs votent pour lun des deux candidats la
prsidence, dmocrate ou rpublicain. Si cest le candidat rpublicain qui dpasse lautre
en nombre de voix dans cet tat, ltat enverra Washington des grands lecteurs ,
tous rpublicains. Si cest le candidat dmocrate qui gagne dans cet tat, ltat enverra
Washington le mme nombre de grands lecteurs, tous dmocrates 3 . Le nombre de grands
lecteurs dpend de la population de ltat.
Pour ltape finale du scrutin, les grands lecteurs se retrouvent Washington et votent
conformment leur tiquette. Le prsident lu est celui qui obtient le plus de voix de
grands lecteurs. En pratique, sur un total de 538 grands lecteurs, la Californie en a 54,
le Texas en compte 32, ltat de New York 33, la Floride 25, la Pennsylvanie 23, lIllinois
22, etc.
Dans la suite, les tats sont cods sur lintervalle 1 .. n (n > 1) ; GE est le tableau qui
associe au code de chaque tat le nombre de grands lecteurs attribus cet tat, et T est
le total de grands lecteurs sur tout le pays.
Le rsultat dune lection peut tre reprsent par un vecteur caractristique dfini sur
lintervalle 1 .. n et valeur sur 0 .. 1. La valeur 0 (resp. 1) signifie par convention que les
dmocrates (resp. les rpublicains) sont les vainqueurs dans ltat considr. La solution
notre problme consiste passer en revue lensemble des parties de 1..n afin de dterminer
sil existe des cas dgalit.
Question 1.
Dfinir le vecteur dnumration X et fournir ses proprits. En dduire le
patron qui sapplique (voir tableau ??, page ??).
Question 2.
Dcrire les constituants de la procdure lections qui numre toutes les
configurations o les deux candidats se retrouvent avec le mme nombre de voix. Quel est
le code obtenu ? Fournir un exemple dappel.
Question 3.

## Montrer que le nombre de telles configurations est pair.

Question 5.
Proposer une modification trs simple de la constitution amricaine pour
que llection soit toujours effective, cest--dire que les deux candidats ne puissent pas
avoir le mme nombre de voix de grands lecteurs.

## 3. On suppose qu ce stade du scrutin il ny a jamais galit des voix.

59 - Q 2

59 - Q 3

Question 4.
Proposer une modification de lalgorithme qui ne produit que lune des deux
configurations de lappariement.

59 - Q 1

59 - Q 4

59 - Q 5

66

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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.
Soit lalphabet latin de 26 lettres : = {A,B, . . . , Z}. Soit L un ensemble de n
lettres de lalphabet (n 6 10) et + une addition formelle, exprime avec ces lettres comme
par exemple :

NEUF + UN + UN = ONZE

## que lon peut aussi crire :

+

U
U
U

F
N
N

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}
de {E, F, N, O, U, Z} dans {1, 2, 4, 7, 8, 9}, puisque :
1987 + 81 + 81 = 2149.
En revanche, la solution correspondant :
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

## Donner le principe dun algorithme permettant de trouver toutes les soluQuestion 1.

tions tout problme de crypto-arithmtique. Quel est le patron appropri (voir tableau
??, page ??) ? Dans un premier temps, on ne cherche pas effectuer dlagages.

67

## CHAPITRE 5. ESSAIS SUCCESSIFS

Question 2.
Dfinir les instances des diffrents composants du patron utilis (Satisfaisant, 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 amliorer la complexit temporelle en introduisant des lagages ? Peut-on dcouvrir des conditions gnrales dlagage ?

## Exercice 61. Carrs latins

60 - Q 2

60 - Q 3

Loriginalit de cet exercice rside dans le fait que, bien que le vecteur dnumration 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.
Sachant que lon recherche tous les carrs latins pour un n donn, dfinir la
Question 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 ?

61 - Q 1

Question 2.

61 - Q 2

Question 3.

## Fournir le code de la procdure CarrLatin, ainsi quun exemple dappel.

61 - Q 3

Question 4.
Dans la version de la question prcdente de la procdure CarrLatin, on
exploite le fait que lensemble parcouru par la variable j est un intervalle trous, sousensemble fini de N (et non un intervalle complet). Cette caractristique nexiste pas dans

61 - Q 4

68

## la plupart des langages de programmation classiques. Dans la procdure PartEns3 de

lexemple introductif (page ??), nous avons vu comment contourner ce problme en renforant linvariant par une structure de donnes (SomCour pour lexemple en question)
redondante par rapport la structure X. En sinspirant de cet exemple, amnager la procdure CarrLatin de faon disposer dune version efficace CarrLatin2 (on veillera
viter des recherches squentielles dans X).
61 - Q 5

61 - Q 6

Question 5.
Dmontrer qu lexception du carr latin dordre 1, il nexiste pas de carr
latin antidiagonal dordre impair, puis montrer comment on peut amnager la procdure
CarrLatin afin dobtenir la procdure CarrLatinAntidiagonal, cette dernire permettant dcrire tous les carrs latins antidiagonaux un ordre n quelconque.
Question 6.
Donner le principe dune procdure permettant dcrire tous les carrs latins
normaliss un ordre n donn.

## 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
6

7
1 9 5

9 8
8
4
7

6
6
8

3
1
6

3
2

2 8
4 1 9
8

5
7 9

5
6
1
8
4
7
9
2
3

3
7
9
5
2
1
6
8
4

4
2
8
9
6
3
1
7
5

6
1
3
7
8
9
5
4
2

7
9
4
6
5
2
3
1
8

8
5
2
1
3
4
7
9
6

9
3
5
4
7
8
2
6
1

1
4
6
2
9
5
8
3
7

2
8
7
3
1
6
4
5
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.

69

## CHAPITRE 5. ESSAIS SUCCESSIFS

Question 1.
Proposer une structure dnumration X. Dfinir ses proprits. Que peut-on
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
dappel. Il existe environ 7 1021 solutions. Estimer le temps de calcul de ce programme
sur un processeur actuel typique.
Question 3.
Dans la version de la question prcdente de la procdure Sudoku1, on exploite le fait que le langage de programmation utilis permet de parcourir un intervalle
trous, sous-ensemble fini de N (et non un intervalle complet). Cette caractristique nexiste
pas dans la plupart des langages classiques. Dans la procdure PartEns3 de lexemple introductif (page ??), nous avons vu comment contourner ce problme en renforant linvariant par une structure de donnes (SomCour pour lexemple en question) redondante par
rapport la structure X. En sinspirant de cet exemple, amnager la procdure Sudoku1
de faon disposer dune version efficace Sudoku2 (on veillera viter des recherches
squentielles dans X).

62 - Q 1

62 - Q 2

62 - Q 3

## On considre prsent les grilles avec dvoils. On ne sintresse qu la variante de

Sudoku2 (dans laquelle on utilise une structure de donnes auxiliaire).
Question 4.

## Amnager la procdure Sudoku2 de faon traiter les grilles avec dvoils.

Question 5.
Comment adapter le rsultat de la question prcdente afin de proposer une
opration qui vrifie quune grille est bien minimale.

## Cet exercice est un exemple particulirement intressant dont la solution nave

prsente une complexit temporelle dsastreuse, alors quune transformation ingnieuse, base sur une dcomposition en facteurs premiers, fournit une solution
dune efficacit acceptable.
Le magasin dalimentation de votre quartier est ouvert de 7 h 23 h, do son nom :
le 7 11 . Vous y achetez un ensemble de quatre articles {a1 , a2 , a3 , a4 }. la caisse,
la note qui vous est prsente slve 7, 11. Une note de 7, 11 au 7 11 ! Vous
faites remarquer la concidence au caissier en lui demandant comment il est arriv ce
montant : Eh bien, jai tout simplement multipli le prix des quatre articles . Vous lui
expliquez calmement que le montant total doit tre calcul en additionnant le prix des
articles et non en les multipliant. Il vous rpond : a na aucune importance, la facture
serait encore de 7, 11 . Il a raison. Le problme que lon se pose est de dterminer le
prix de chaque article, sachant que la premire solution trouve nous conviendra.

62 - Q 4

62 - Q 5

70
63 - Q 1

63 - Q 2

63 - Q 3

63 - Q 4

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Question 1.
Exprime en centimes deuros, quelle est la somme (resp. le produit) des
quatre prix ?
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 ?
Question 3.
Afin de mettre en uvre un algorithme pour rsoudre ce problme, proposer
un vecteur dnumration X et dfinir ses proprits. Quel type de patron entrane ce choix
(voir tableau ??, page ??) sachant que lon se limite la recherche de la premire solution ?
Question 4.
En dduire la procdure SeptAOnze1 qui affiche la premire solution trouve. Optimiser la solution en renforant linvariant de rcursivit.
Dans lobjectif de la recherche dune meilleure efficacit pour un algorithme, la dmarche qui consiste prtraiter les donnes se rvle souvent fconde. Alors que dans
la question prcdente nous avons examin tous les quadruplets possibles de prix, nous
pouvons dcider de ne prendre en considration que les quadruplets dont le produit vaut
711 000 000. Rpertorier de tels quadruplets passe tout dabord par la dcomposition de
711 000 000 en un produit de facteurs premiers 5 (cest le prtraitement). Nous calculons
facilement que 711 000 000 = 26 32 56 79. Si les valeurs de lintervalle 1 .. 4 codent
chacun des quatre articles, le problme se ramne trouver une partition particulire,
quatre lments, du multiensemble J2, 2, 2, 2, 2, 2, 3, 3, 5, 5, 5, 5, 5, 5, 79K. Ainsi, par exemple,
la partition JJ2, 2, 5, 5K, J2, 2, 5, 5K, J2, 3, 79K, J2, 3, 5, 5KK correspond quatre articles aux prix
respectifs de 100, 100, 474 et 150. Par construction, le produit de ces quatre prix est de
711 000 000, vrification qui devient donc inutile. Reste trouver la (lune des) partition(s)
dont la somme vaut 711.

63 - Q 5

63 - Q 6

## Dduire de la remarque prcdente une nouvelle structure dnumration X

Question 5.
et en fournir les proprits. En dduire le patron qui sapplique (voir tableau ??, page ??)
et fournir son code sil napparat pas dans lintroduction.
Question 6.
En dduire une nouvelle version de la procdure SeptAOnze qui affiche la
premire solution trouve. Que peut-on dire de la complexit de cette solution ?

## Dans cet exercice, partant de la solution force brute , plusieurs optimisations

et lagages sont tudis. Cest le principal intrt de cet exercice, pour lequel il
existe des solutions plus efficaces que celles fondes sur le principe des essais
successifs.
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.

71

## tant donn un nombre entier n (n > 1), on appelle dcomposition de n, lensemble

des ensembles dentiers naturels non nuls dont la somme vaut n. Par exemple, la dcomposition de n = 6 est lensemble : {{1, 2, 3}, {1, 5}, {2, 4}, {6}} 6 . Lobjectif de lexercice est de
fournir diffrentes variantes de la procdure qui produit successivement tous les lments
de la dcomposition dun entier n positif donn.
Question 1.

## Donner la dcomposition de n = 10.

64 - Q 1

Question 2.
Afin de rsoudre ce problme par une dmarche de type essais successifs ,
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 .
Fournir la procdure DcompEntier1, instance du patron choisi la question prcdente,
en prcisant comment sinstancie la fonction SolutionTrouve.
Un premier lagage est possible si lon constate quil est inutile de poursuivre
Question 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 ?
Pour linstant, le calcul de la somme des nombres reprsents dans le vecQuestion 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 redondants. 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
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 ?

## Cet exercice est un exemple typique de production de permutations sous

contraintes. On tente ci-dessous, dans la mesure du possible et pour des raisons de gnricit, de dissocier laspect li la production des permutations de
celui de la prise en compte des contraintes.
Madame veuve Dumas pre organise un dner en lhonneur de dArtagnan et des
trois mousquetaires. Les cinq places de la table sont numrotes de 1 5. Madame Dumas
sait que :
1. Porthos prfre tre la place numro 1,
6.

Il existe une notion proche, celle de partition dun entier, dans laquelle on recherche un ensemble de sacs (un entier peut apparatre plusieurs fois dans une somme). Par exemple, la partition
de 6 est : {J6K, J5, 1K, J4, 2K, J4, 1, 1K, J3, 3K, J3, 2, 1K, J3, 1, 1, 1K, J2, 2, 2K, J2, 2, 1, 1K, J2, 1, 1, 1, 1K,
J1, 1, 1, 1, 1, 1K}. La combinatoire saccrot par rapport la dcomposition puisque toute dcomposition est une partition (mais toute partition nest pas une dcomposition).

64 - Q 2

64 - Q 3

64 - Q 4

64 - Q 5

64 - Q 6

72

## 2. Athos prfre tre spar de dArtagnan,

3. Aramis prfre tre spar dAthos,
4. Porthos prfre tre spar dAthos.
Pour ce qui la concerne, Madame Dumas souhaite tre spare de dArtagnan (prfrence
numro 5). Pouvez-vous aider Madame Dumas tablir son plan de table (cest--dire
rpondre la question qui est o ? ), si possible dans le respect des prfrences
de chacun ? Ci-dessous, on considre que chaque participant est cod par un nombre de
lintervalle 1 .. 5, selon lordre alphabtique (1 : Aramis, 2 : Athos, 3 : dArtagnan, 4 :
Dumas, 5 : Porthos).
Dans la suite, on pourra supposer que la prfrence 1 est traite de manire ad hoc
plutt que par lintermdiaire de lalgorithme gnrique.
65 - Q 1

65 - Q 2
65 - Q 3

65 - Q 4

Question 1.
Dfinir le vecteur dnumration X et fournir ses proprits. Parmi ceux
proposs dans le tableau ??, page ??, quel est le patron qui sapplique, sachant que lon
souhaite obtenir toutes les solutions possibles ?
Question 2.

## Fournir larbre de rcursion obtenu en choisissant comme racine

Porthos.

Proposer une solution pour traiter les contraintes du type Y prfre tre
Question 3.
spar de Z .
Question 4.
Fournir lalgorithme qui affiche tous les plans de table satisfaisant les prfrences exprimes. Donner un exemple dappel.

## 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 dcodeur, 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 prometteuse totalement diffrente.
Il sagit dun jeu deux joueurs, le codeur et le dcodeur. Le premier se fixe une permutation 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 couleurs 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

N Prop.

Propositions

valuation

1
2
3
4
5
6
7

[B,N,O,R,V]
[N,B,R,V,O]
[N,O,V,B,R]
[O,V,R,B,N]
[R,B,V,O,N]
[V,O,R,N,B]
[V,R,N,B,O]

0
1
1
1
0
1
5

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 information nest pas disponible pour le dcodeur.
Quelle condition ncessaire une proposition du dcodeur doit-elle satisfaire
Question 1.
pour tre la permutation attendue par le codeur ? Suggestion : se poser la question suivante : dans lhypothse o la proposition est la solution, comme svalue-t-elle par
rapport aux diffrentes entres de lhistorique ?

66 - Q 1

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 permutation 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
??, 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).

66 - Q 2

## La procdure PermutMasterMind1(i) ne ralise aucun lagage. Il est pourtant possible

dviter de construire une occurrence complte du vecteur X en constatant que ds quune
permutation en cours dlaboration, confronte une entre de lhistorique, produit une
rponse suprieure la rponse prsente dans lhistorique, il est inutile de poursuivre la
construction de X. Cest le rle dvolu lopration fonction PossibleHisto(c, k) rsultat B,
qui vrifie que le sous-vecteur X[1 .. k 1] allong en k par la couleur c ne produit pas
dappariements en excs par rapport aux rponses enregistres dans lhistorique. Nous
nous proposons dtudier cette stratgie dans les deux questions suivantes.
Question 3.
Dans cette question, on suppose que n = 4 et que le tableau C des couleurs
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 :

66 - Q 3

74

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

N Prop.
1
2
3
4

Prop.
[B,O,R,V]
[B,R,V,O]
[B,V,O,R]
[O,R,B,V]

valuation
1
1
0
0

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.
66 - Q 4

Question 4.

## Que lon utilise PermutMasterMind1 ou PermutMasterMind2, ces deux procdures

effectuent la recherche de la prochaine proposition en partant systmatiquement de la
mme permutation initiale. Il est clair que cette mthode conduit repasser sur des permutations qui ont dj chou. Ainsi, dans lexemple de la question 3, les procdures par
essais successifs dmarrent la recherche avec le code [B,O,R,V]. Celle-ci est carte ainsi
que toutes les permutations dj prsentes dans lhistorique jusqu [O,R,B,V] grce
la condition CompatAvecHisto. Une meilleure solution a priori consisterait partir
de la permutation qui suit (selon lordre lexicographique) la dernire ayant chou. Pour
lexemple, on partirait de la permutation qui succde [O,R,B,V], soit [O,R,V,B].
Dans une premire tape, il sagit de construire un algorithme qui, partir dun permutation donne, produit la suivante (toujours selon lordre lexicographique), en supposant (prcondition) quil en existe une. Pour faciliter la lecture, les explications sont
fournies avec un code constitu des neuf chiffres de 1 9 ; la fonction S(p) dlivre la
permutation qui suit p. S([9, 8, 7, 6, 5, 4, 3, 2, 1]) nexiste pas (la prcondition nest pas satisfaite). En revanche, S([1, 2, 3, 4, 5, 6, 7, 8, 9]) = [1, 2, 3, 4, 5, 6, 7, 9, 8]. En effet, le nombre
(ne comportant pas de chiffres en double) qui suit 123456789 est 123456798. De mme
S([5, 9, 8, 7, 6, 4, 3, 2, 1]) = [6, 1, 2, 3, 4, 5, 7, 8, 9], ou encore S([6, 1, 9, 8, 4, 7, 5, 3, 2]) =
[6, 1, 9, 8, 5, 2, 3, 4, 7].
Comment parvenir ces rsultats ? Observons tout dabord que le passage dune
permutation la suivante peut se faire en ne procdant que par des changes. Le
cas [5, 9, 8, 7, 6, 4, 3, 1, 2] est facile traiter : on change simplement les chiffres 2 et 1.
Considrons le cas [5, 9, 8, 7, 6, 4, 3, 2, 1]. Ce code priv du premier lment 5, soit
[9, 8, 7, 6, 4, 3, 2, 1], ne possde pas de successeur puisque la suite de chiffres est dcroissante.
S([5, 9, 8, 7, 6, 4, 3, 2, 1]) ne peut dbuter par lun des chiffres 1, 2, 3 ou 4 : le nombre serait infrieur au code de dpart. Il ne peut non plus dbuter par 5 puisque les chiffres qui suivent
5 se prsentent dans lordre dcroissant. Il doit obligatoirement dbuter par le chiffre prsent dans [9, 8, 7, 6, 4, 3, 2, 1] immdiatement suprieur 5, soit 6. changeons 5 et 6. On
obtient [6, 9, 8, 7, 5, 4, 3, 2, 1]. Ce nest pas le rsultat attendu car il existe plusieurs codes qui
sintercalent entre [5, 9, 8, 7, 6, 4, 3, 2, 1] et [6, 9, 8, 7, 5, 4, 3, 2, 1], comme [6, 9, 8, 5, 7, 4, 3, 2, 1].
Lchange seul ne suffit donc pas. Quelle opration doit-on raliser la suite de lchange ?
Il suffit dinverser le sous-tableau dcroissant qui suit le premier chiffre. Pour lexemple,
on obtient [6, 1, 2, 3, 4, 5, 7, 8, 9], qui est le rsultat attendu.
Cette dmarche sapplique aux cas plus complexes tels que [6, 1, 9, 8, 4, 7, 5, 3, 2]. Il suffit
didentifier le plus long code dcroissant situ sur la gauche ([7, 5, 3, 2]) et, comme cidessus, de rechercher le successeur de [4, 7, 5, 3, 2]. Celui-ci dbute par 5. changeons 4 et 5 :

75

## CHAPITRE 5. ESSAIS SUCCESSIFS

[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)
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
Master Mind.
Selon vous, quelle stratgie est la plus efficace ? tayez votre rponse par
Question 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 solution 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 configuration 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 emplacements 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.

66 - Q 5

66 - Q 6

66 - Q 7

76

D
E
E
E
M
R
T
AI

BI
CA
ET
IF
ME
RU
SI
AME

BEC
DIS
FER
MIL
EMUE
IBIS
LISIER
MARBRE

M
A
R
B
R
E

E
M I
M E
B
U
D I
E C
S
A I
T
F E

L
I
S
I
E
R

## Un nonc (la grille vierge et le lexique)

Fig. 5.7 Exemple dnonc et de solution pour le jeu des mots cass
67 - Q 1

67 - Q 2

Question 1.
Quelle structure dnumration permet de mettre en uvre cette solution ?
Quelles sont ses proprits ? Lequel des patrons du tableau ??, page ??, doit-il tre retenu ?
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
I
AI

TA
TA
RIT

TRI

## Fig. 5.8 Exemple de mots cass 3 3

Afin de faciliter le traitement, on fait les hypothses suivantes :
1. LongEmplH(i) est une fonction qui dlivre la longueur de lemplacement horizontal i.
2. MotV est une fonction qui, une fois la grille complte, dlivre le sac des mots placs
verticalement.
3. Libre est le sac des mots qui napparaissent pas dans la structure dnumration X.
Lunion multiensembliste de Libre et des mots prsents dans X constitue lensemble
des mots de Dico.
4. La fonction ConvSac convertit un tableau de mots en un sac.
67 - Q 3

Question 3.
Fournir la procdure MotsCass1(i) qui recherche et crit la premire solution trouve. Cette procdure a comme prcondition quil existe au moins une solution.
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.

77

## CHAPITRE 5. ESSAIS SUCCESSIFS

Exemple Considrons la configuration suivante pour laquelle on sapprte tenter de placer le mot RUE sur lavant-dernier emplacement horizontal

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
par llagage dcrit ci-dessus. Conclusion ?
Question 5.
Llagage prsent ci-dessus exige un accs horizontal mais aussi vertical aux
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.

## Lautorfrence (cest--dire la proprit, pour une entit, de faire rfrence

elle-mme) est une notion qui se rencontre dans de nombreux domaines scientifiques comme en linguistique, en logique ou encore en mathmatiques. Dans
lexercice qui suit, on cherche produire un tableau autorfrent. Deux lagages
intressants sont appliqus.
Un tableau X de n (n > 0) lments, dfini sur lintervalle 0 .. n 1 et valeurs dans
lintervalle 0 .. n 1, est qualifi dautorfrent si, pour tout indice i du tableau, X[i] est
le nombre doccurrences de la valeur i dans le tableau. Formellement :
i (i 0 .. n 1 X[i] = # j (j 0 .. n 1 et alors X[j] = i)) .
Rappel : # est le quantificateur de comptage.
Ainsi par exemple, pour n = 4, le tableau :
i
X[i]

0
1

1
2

2
1

3
0

(5.2)

67 - Q 4

67 - Q 5

78

## est un tableau autorfrent : la valeur 0 existe en un exemplaire, la valeur 1 en deux

exemplaires, etc. Pour n < 7 il est facile de montrer, par numration, quil nexiste pas
de solution pour n {1, 2, 3, 6}, et quil nexiste quune seule solution pour n = 5.
68 - Q 1
68 - Q 2

68 - Q 3

68 - Q 4

Question 1.

## Donner un second tableau autorfrent pour n = 4.

Question 2.
Que peut-on affirmer propos de la somme des lments dun tableau
autorfrent ? Justifier votre rponse.
Question 3.
On cherche produire, pour un n donn, tous les tableaux autorfrents, en
utilisant la dmarche des essais successifs. Quel est le patron appropri parmi ceux de la
liste prsent la figure ??, page ?? ? Quel lagage bas sur le rsultat de la question 2
peut-il sappliquer pour linstanciation de la fonction gnrique Satisfaisant ? Comment
la fonction gnrique SolutionTrouve peut-elle se reprsenter. En dduire la procdure
TabAutoRef1, ainsi quun contexte dappel convenable.
Question 4.
Un second lagage peut tre mis en uvre. Il se base sur le fait que, si dans
la tranche X[0 .. i 1] llment j est dja prsent X[j] fois, il est inutile de tenter de placer
j en position i. Ainsi, dans lexemple suivant :
i
X[i]

...
...

2
5

3
5

...
...

5
3

...
...

12
5

...

20

...

50

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.
i
X[i]

## Montrer que, pour n > 7, les tableaux conformes la structure suivante :

0
n4

1
2

2
1

3
0

...
...

n5
0

n4
1

n3
0

n2
0

n1
0

n 7 fois
sont des tableaux autorfrents.
Conjecture Les auteurs conjecturent que la condition suffisante qui fait lobjet de la question 5 est en fait une condition ncessaire et suffisante.

CHAPITRE

## Programmation par Sparation

et valuation Progressive (PSEP)
Lesprit dordre est un capital de
temps.
(H.-F. Amiel)

6.1

Exercices

## Dans cet exercice, quatre fonctions dvaluation f sont tudies. Lenseignement

que lon en retire est quil faut sassurer avec beaucoup dattention que le thorme
de la page ?? (sur une condition suffisante dadmissibilit) sapplique bien.
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

8
11
7
11

13
7
8
6

4
1
6
4

5
6
8
9

## Ainsi, laffectation {1 4, 2 3, 3 2, 4 1} attribue la tche 4 lagent 1 , la

tche 3 lagent 2 , la tche 2 lagent 3 et la tche 1 lagent 4 . Elle a pour cot (rel) :
f? ({1 4, 2 3, 3 2, 4 1}) = D[1 , 4] + D[2 , 3] + D[3 , 2] + D[4 , 1] = 25.

80

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

1
2
3
4

8
11
7
11

13
7
8
6

4
1
6
4

5
6
8
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

69 - Q 2

69 - Q 3

69 - Q 4

69 - Q 5

Quel est lensemble C de tous les candidats ? Quel est son cardinal ? Proposer
Question 1.
une reprsentation et un procd de sparation pour un ensemble de candidats.
Question 2.
On recherche prsent une fonction dvaluation f. Lexercice se prte bien
la dcomposition de f en la somme des deux fonctions g? (pour le cot rel de la partie
de laffectation dj ralise) et h pour une estimation optimiste du cot du reste de
laffectation. Une stratgie de cot uniforme consiste, pour h, considrer le plus petit
des cots encore disponibles. Ainsi, pour lexemple ci-dessus, si lensemble des candidats
courant est reprsent par le vecteur [3, , , ], lestimation retenue pour h est la plus petite
des valeurs de D prsente quand on supprime la premire ligne et la troisime colonne,
multiplie par le nombre de tches restant affecter, soit 6 (pour D[2 , 4] ou D[4 , 2], voir
tableau 6.1, page 80) multipli par 3 (il reste trois tches affecter). Montrer que h satisfait
bien la condition dadmissibilit du thorme de la page ??. Fournir larbre de recherche
PSEP pour cette fonction dvaluation et pour la matrice D ci-dessus.
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.
Question 4.
Dans le but damliorer nouveau la fonction heuristique h, on reprend
la dmarche de la question prcdente en recherchant successivement le minimum pour
chaque ligne restant traiter, mais cette fois on supprime des recherches futures la colonne
qui a produit ce minimum. Que peut-on dire de la fonction f dfinie partir de cette
fonction heuristique ?
Question 5.
On cherche appliquer une quatrime stratgie dfinie de la manire suivante. Pour les agents restant affecter une tche, on recherche le minimum sur lensemble des cases de D encore disponibles (et non plus, comme dans la question prcdente,
le minimum sur la ligne). On supprime des recherches futures la ligne et colonne qui ont
produit ce minimum. On ritre tant que cela reste possible. Montrer, laide dun contreexemple, que le thorme de la page ?? ne sapplique pas.

81

CHAPITRE 6. PSEP

## Exercice 70. Le voyageur de commerce (le retour)

Cet exercice reprend, avec les mmes hypothses, lexemple du voyageur de commerce trait dans lintroduction. Une troisime fonction dvaluation est tudie.
Les rsultats sont compars avec ceux des prcdentes solutions.

## Le problme du voyageur de commerce a t trait dans lexercice 56, page 61, du

chapitre Essais successifs . Il a galement t pris en exemple et dvelopp de deux
manires diffrentes (en appliquant successivement deux fonctions dvaluation) dans lintroduction de ce chapitre. Dans le prsent exercice, nous dfinissons une nouvelle fonction
dvaluation fonde sur une fonction heuristique f, plus fine que les deux autres.

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 .

## Le schma suivant montre comment se calcule la valeur de f([146 ]). La partie

(a) montre un graphe non orient valu, de huit nuds. La partie (b) met en vidence, en
gras, la chane dj parcourue. Son cot g? ([146 ]) slve 3 + 4 = 7. La partie (c)
permet de connatre un minorant du cot de toute chane hamiltonienne du sous-graphe G0
dfini par les nuds 2, 3, 5, 7 et 8. Le cot minimum de chaque sommet est celui de larte
qui porte la flche. Au total, on obtient un cot de 4 + 3 + 4 + 3 + 4 max({4, 3, 4, 3, 4}) = 14.
Enfin, la partie (d) montre comment se raboutent la chane dj parcourue (schma (b))
et le graphe G0 , en prenant larte de cot minimal issue du sommet 1 (resp. 6) dont le
cot est 1 (resp. 2). Au total f([146 ]) = 7 + 14 + (1 + 2) = 24.

82

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

1
1

1
3

6
3

5
5

4
6

(c)

70 - Q 1

3
4

4
2

(b)

6
2

(a)

4
6

4
6

3
4

5
5

(d)

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

1
2
1
4

3
4

3
3

(a)

6
2

4
4

4
5

(b)

5
8

(c)

70 - Q 2

## On considre prsent le graphe (c) de la figure 6.1. Construire larbre de

Question 2.
recherche, tout dabord avec la mthode du cot uniforme (voir page ??), puis avec la
mthode du minimum local dcrite ci-dessus.

## Exercice 71. Le taquin

83

CHAPITRE 6. PSEP

Le taquin est un jeu solitaire o il sagit datteindre une situation finale donne 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.
Le taquin est un jeu constitu dune grille de taille n n (typiquement n = 4) contenant (n2 1) tuiles, numrotes de 1 (n2 1), qui peuvent glisser horizontalement ou
verticalement en utilisant lemplacement laiss libre. La figure 6.2 prsente deux exemples
de configuration pour n = 4 :
1

4 15

5 12

6 11 14

9 10 11 12

9 10 13

13 14 15

(a)

(b)

## Fig. 6.2 Le taquin : deux exemples de configuration

partir de la configuration (a), on peut atteindre, en un seul coup, les quatre configurations apparaissant la base du schma ci-dessous (les flches reprsentent le sens du
dplacement du trou) :
1
2
7
8

1
2
7
8

5 4 15
3 5 12
6 11 14
9 10 13

1
2
7
8

3 4 15
5 5 12
6 11 14
9 10 13

3 4 15
5 5 12
6 11 14
9 10 13

1
2
7
8

3 4 15
6 5 12
5 11 14
9 10 13

1 3 4 15
5 2 5 12
7 6 11 14
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

## de se retrouver sur deux branches diffrentes de larbre de recherche. Il est prfrable

de considrer que lensemble C des candidats est lensemble des squences permettant
de passer de la situation initiale du taquin la situation canonique. Pour un exemple
hypothtique, C pourrait tre reprsent par lensemble {h, , i, h, , , , i, h,
, , , i, . . .}. Ici, compte tenu des boucles quil est possible de parcourir, cet ensemble
est infini dnombrable, mais, comme on le verra, cette caractristique ne prsente pas
de consquences nfastes sous rserve que la prcondition voque prcdemment soit
satisfaite. Une solution est un candidat minimisant le nombre de dplacements. Ainsi
quil est prconis dans lintroduction de ce chapitre, les deux premires tapes, dans la
ralisation dun algorithme PSEP, consistent dcider de la reprsentation dun sousensemble de candidats et, pour un sous-ensemble donn, de proposer une stratgie de
partitionnement.
71 - Q 1

## Comment peut-on dterminer si une squence de dplacements est ou non

Question 1.
un candidat 1 ? Que peut-on dire dune squence qui nest pas un candidat 1 ? Comment
peut-on partitionner un ensemble de candidats en plusieurs sous-ensembles non vides ?
Proccupons-nous prsent de la fonction dvaluation f. Pour un sous-ensemble non
vide E de candidats, cette fonction peut se dcomposer comme suit : f(E) = g? (E) + h(E).
g? (E) est le cot rel (cest--dire le nombre de dplacements ou encore la longueur de
la squence E). La fonction heuristique h(E) est une estimation minorante du nombre de
dplacements quil faut rajouter E pour obtenir un candidat. Un choix naf consiste
prendre h = 0. Le parcours de larbre se fait alors en largeur dabord. Un choix plus
judicieux pour h est celui de la distance de Manhattan. Pour une tuile w quelconque
dune configuration I du taquin, la distance de Manhattan est la somme des dplacements
horizontaux et verticaux ncessaires w pour atteindre sa position dans la configuration
finale F, soit (|whI + whF | + |wvI + wvF |). La distance de Manhattan dune configuration
P 2 1
est somme de la distance de Manhattan de ses (n2 1) tuiles, soit : n
w=1 |whI + whF | +
|wvI + wvF |.

71 - Q 2

## Montrer que cette fonction heuristique rpond la condition du thorme

Question 2.
de la page ??. Quelle est la distance de Manhattan de la configuration suivante ?
4 1 3
7 2 5
5 8 6

## La disponibilit de la fonction heuristique h permet maintenant de dterminer facilement

si une squence est ou non un candidat. De quelle faon ? Fournir larbre de recherche
correspondant, ainsi que la solution trouve.

85

CHAPITRE 6. PSEP

## Exercice 72. Le plus proche voisin

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.
Soit C un ensemble non vide de points du plan R2 et soit a un point de ce plan (a
/ C)
loign des points de C (dans un sens prcis ci-dessous). On cherche identifier lun
quelconque des points de C le plus proche de a, au sens de la distance euclidienne d.
Autrement dit, on recherche un point c0 tel que :
d(c0 , a) = min(d(c, a)).
cC

Une solution simple consiste coder la formule ci-dessus comme une recherche squentielle. 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
0

a (12, 5)

m
7
8
0

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.
Comme mentionn en page ?? de lintroduction, deux aspects doivent tre abords en
priorit : la reprsentation de lensemble de candidats (de lensemble des points pour

86

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

coord.

coord.

1
2
3
4

(5, 7)
(1, 6)
(3, 5)
(6, 5)

5
6
7
8

(7, 3)
(1, 2)
(5, 2)
(2, 1)

Tab. 6.2 Tableau des coordonnes des huit points de lexemple de la figure 6.3
cet exercice) et la stratgie de sparation. Ci-dessus, nous suggrons de reprsenter un
ensemble de candidats par un rectangle. Celui-ci sera ouvert droite et en haut (les
points situs sur ces frontires nappartiennent donc pas au rectangle) et ferm en bas
et gauche. Ce choix permet de satisfaire la contrainte de partitionnement impose par
la mthode PSEP. Quant la sparation, une solution consiste clater un rectangle en
quatre rectangles de mme dimension, en le coupant en deux par la longueur et par la
largeur.
Soit S un tel rectangle. Une bauche de la fonction dvaluation f consiste assimiler f(S)
la distance entre le point de rfrence a et le disque circonscrit S : f(S) = (d(m, a) r).
72 - Q 1

72 - Q 2

72 - Q 3

Question 1.
La fonction f telle qubauche ci-dessus ne garantit pas ladmissibilit de
lalgorithme PSEP. Pourquoi ? Raffiner cette fonction, ainsi que la stratgie de sparation ;
puis dmontrer que la version de f qui en rsulte est correcte.
Question 2.
Appliquer lalgorithme PSEP en utilisant la fonction dvaluation de la question prcdente et fournir larbre de recherche pour lexemple de la figure 6.3 page 85 et
du tableau 6.2.
Question 3.
premire.

## Proposer une seconde fonction dvaluation. La discuter par rapport la

CHAPITRE

Algorithmes gloutons
Un gourmet est un glouton qui se
domine.
(Francis Blanche)

7.1

Exercices

## Ce problme a dj t tudi dans lintroduction du chapitre essais successifs

(voir chapitre 5). Il sagit ici de tester plusieurs stratgies gloutonnes.
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
traiter ce problme et montrer quelles ne produisent pas de solutions exactes.
Question 2.

73 - Q 1

73 - Q 2

88

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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 attache 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 :
cot(A) =

n
X

(7.1)

## p(xk ) (dk + 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.
5

xi
p(xi )

1
0.15

2
0.19

3
0.17

4
0.18

5
0.14

6
0.17

3
1

6
4

## Selon la dfinition 7.1, page 88, le cot de cet arbre est de

1 p(5) + 2 p(3) + 2 p(6) + 3 p(1) + 3 p(4) + 4 p(2),
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

74 - Q 2

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 gloutonne, 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 sousarbres, 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 ?
Question 2.
En partant toujours du mme jeu dessai, montrer, par un contre-exemple,
que cette stratgie nest pas exacte.

89

## Exercice 75. Les relais pour tlphones portables

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 1.

75 - Q 1

## a) On place un relais au niveau de chaque maison.

b) En progressant de la gauche vers la droite, on place un relais au niveau de chaque
maison qui nest pas encore couverte par les relais dj poss.
Question 2.
soit exacte.

## Proposer une troisime stratgie gloutonne dont on puisse esprer quelle

Question 3.
En dveloppant une dmarche du type course en tte (voir section ??,
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
lors de la construction de lalgorithme. Montrer, par une mthode a posteriori (voir section
??, page ??), que la stratgie gloutonne prcdente est exacte.

75 - Q 2

75 - Q 3

75 - Q 4

90

## Cet exercice est une illustration simple de la mthode de largument de lchange.

Le code de lalgorithme nest pas demand.
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

76 - Q 2

Question 1.
Donner deux stratgies simples susceptibles de servir de base un algorithme
glouton. Laquelle des stratgies semble tre la meilleure ?
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 composent ce chemin (si le chemin comporte des circuits, certains arcs sont comptabiliss
plusieurs fois).

4
1

1
d

91

1
24

5
2

## Soit f un sommet de G (f N) ; chem(f) est lensemble (possiblement infini) des

chemins de d f ; dist(f) est la distance de d f, soit :
dist(f) =
b

min

(cot(c)).

cchem(f)

## Pour la figure 7.1 page 91, avec d = 1, nous avons :

cot(h1, 2, 4i) = 6,
chem(4) = {h1, 2, 4i, h1, 3, 5, 4i, h1, 2, 4, 1, 2, 4i, h1, 3, 5, 6, 3, 5, 4i, . . .},
dist(5) = 4, dist(6) = 6.

## Construction de lalgorithme premire version

Nous recherchons une solution du type course en tte (voir section ??, page ??). Il
sagit donc de construire une itration.
Invariant Nous appliquons la stratgie du travail ralis en partie (voir chapitre 3, page
??). Formulons lhypothse que le tableau L contient les distances de d tous les
sommets de N0 (N0 N). Plus prcisment :
I1 =
b f (f N0 L[f] = dist(f)).
En outre, si N0 nest pas vide, d N0 :
I2 =
b (N0 6= d N0 ).
Nous introduisons la variable N00 (N00 =
b N N0 ) et posons :
I3 =
b (N = N0 N00 ).
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

4
1

1
24

0
2

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).

complmentaires, il est difficile de choisir un sommet qui permettrait le rtablissement de linvariant. Nous sommes conduits proposer une seconde version qui est
obtenue en renforant linvariant (I1 et I2 et I3 ) par un quatrime conjoint I4 destin
faciliter la construction de la progression.

## Construction de lalgorithme seconde version

Invariant Une stratgie gloutonne consiste attribuer chaque sommet f de N00 une surestimation de la distance entre d et f et, chaque pas de progression, dplacer le
meilleur sommet de N00 dans N0 (en esprant, pour avoir un glouton exact, que, pour
ce sommet, lestimation soit exactement la distance recherche). Il faut sattendre
ce que lintroduction de cette proprit de sur-estimation exige lajout dun fragment
de code pour son maintien. Avant dapporter plus de prcisions, il est ncessaire de
complter les notations ci-dessus. Soit G = (N, V, P) le graphe, d N0 et f N00 .
On appelle eChem(f) (pour e-chemin) lensemble de tous les chemins de d f
dont tous les sommets sont dans N0 , lexception de f.
On note eDist(f) (pour e-distance) le cot le plus faible parmi tous les e-chemins
(eChem) de d f :
eDist(f) =
b
min (cot(c)).
ceChem(f)

## Si eChem(f) = alors eDist(f) = +.

Le prdicat I4 que nous adjoignons linvariant prcdent (I1 et I2 et I3 ) prcise que,
pour tout lment f de N00 , L[f] est le-distance de d f :
I4 =
b f (f N00 L[f] = eDist(f)).
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 :

93

## CHAPITRE 7. ALGORITHMES GLOUTONS

4
6

1
24

0
2

N0

6
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
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).
Dans la figure 7.2 page 92, c = h1, 2, 5, 6i est un chemin de d = 1 f = 6, qui a
comme cot 7. Le e-chemin correspondant est c0 = h1, 2, 5i, qui a comme cot 5.
Condition darrt La condition darrt est inchange par rapport la premire version.
Progression Ainsi que nous lavons mentionn ci-dessus, on choisit, parmi tous les lments
de N00 , celui qui, en termes de e-distance, est le plus proche de d. Il en existe obligatoirement au moins un puisque, selon la prcondition de la progression, (N00 6= ).
Le code de la progression sobtient alors en introduisant une constante locale g.
La partie de code (C) reste instancier :
1. soit g tel que
2.
g N00 et L[g] = min00 (L[f])
fN

3. dbut
4.
N00 N00 {g} ; N0 N0 {g} ;
..
5.
. (C)
6. fin

94
77 - Q 1

77 - Q 2

77 - Q 3
77 - Q 4

77 - Q 5

77 - Q 6

77 - Q 7

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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 ?
Question 2.
Complter la construction de la progression (cest--dire rdiger le fragment
de code (C) qui rtablit le conjoint I4 de linvariant). Sur lexemple de la figure 7.3, page 93,
quelle est la situation atteinte aprs lexcution la progression ?
Question 3.

## Complter la construction de lalgorithme et fournir son code.

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 ?
Question 5.
On tudie un raffinement lalgorithme fourni en rponse la question 3
bas sur les lments suivants : i) les ensembles N0 /N00 sont reprsents par un vecteur
caractristique W (W 1 .. n B), ii) afin dviter une valuation complexe de sa
condition darrt ; la boucle tantque est remplace par une boucle pour, dont le corps est
excut n fois. Faire une description informelle de lalgorithme qui en rsulte. Quelle est
sa complexit ?
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.
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
d

11
0

1
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 ?

95

## Lobjectif de cet exercice est de construire un algorithme qui fournit un code

permettant de compacter des donnes (cest--dire de les compresser sans provoquer de perte dinformation). Par de nombreux aspects, la solution tudie ici
occupe une place part dans les exercices de cet ouvrage. Par son importance
tout dabord : malgr son ge (il a t publi en 1952), lalgorithme de Huffman occupe souvent lun des tages des applications de compression de donnes.
Par sa simplicit apparente dautre part, qui se traduit par un algorithme dune
grande concision, qui contraste avec les efforts quil faut dployer pour prouver
son optimalit. son crdit on pourrait ajouter son efficacit, sa couverture en
termes de structures de donnes, etc., bref un excellent exercice.

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
exprim sur le vocabulaire V = {a, e, i, l, m, t} (le caractre t reprsente lespace). En
utilisant un code de longueur fixe de huit bits, ce texte occupe 17 8 = 136 bits. Un code
de longueur fixe de trois bits (cest le mieux que lon puisse faire ici, en utilisant un code
de longueur fixe, pour un vocabulaire V de six symboles) exige 17 3 = 51 bits.
En revanche, un code de longueur variable, dans lequel les mots de code les plus courts
sont affects aux caractres les plus frquents, permet en gnral damliorer la situation.
Le code prsent la table 7.1 permet de coder le texte t ci-dessus par la chane de 49 (au
lieu de 51) bits suivante (le point dnote lopration de concatnation) :
1011111111101100011100110110111110110011110101111
symboles

frquences

mots de code

00

1110

01

110

1111

10

## Tab. 7.1 Exemple de code et de frquences pour le vocabulaire V = {a, e, i, l, m, t}

Lobjectif de lexercice est de construire un algorithme (d D.A. Huffman, 1952) qui,
pour un texte t donn (et donc un vocabulaire et une frquence donns), fournit un code
optimal, cest--dire qui code t avec le moins de bits possibles.
Dans la suite de cette introduction, on prsente les concepts de code et darbre prfixes
avant de dfinir les notions de code et darbre de Huffman.

96

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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.

t
(a)

(b)

Fig. 7.4 Deux arbres prfixes pour le vocabulaire V = {a, e, i, l, m, t}. Larbre (a) correspond 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.

97

## CHAPITRE 7. ALGORITHMES GLOUTONS

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.
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 cidessous 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
0

l
(a)

3
t

17

2
(b)

7
3
3

10
4

5
2

(c)

Arbres de frquences
Dfinition 5 (Arbre de frquences) :
Un arbre (complet) de frquences est un lment de lensemble P des arbres binaires
complets, tel que chaque nud est tiquet par la somme des frquences de ses feuilles.
P se dfinit par :
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)
F
k<

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.

78 - Q 1

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 :
(7.4)

## L(A) = L(G) + G.h + D.h + L(D).

78 - Q 2

Question 2.
Larbre (c) ci-dessus est une arbre de frquences. Vrifier que les deux formules 7.3 et 7.4 fournissent bien le mme cot pour cet arbre. Dmontrer la proprit 5.

Arbres optimaux
Dfinition 6 (Arbre optimal) :
Un arbre de frquences A (dfini sur les frquences F) est un arbre optimal, si et
seulement sil nexiste pas darbre (de frquences sur F) A0 tel que L(A0 ) < L(A).

78 - Q 3

## En supposant que P reprsente lensemble des arbres de frquences, dfinir

Question 3.
formellement H (H P), sous-ensemble des arbres optimaux de frquences de P.

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 lalgorithme. 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 : descendante ou ascendante. Nous optons pour la seconde. Initialement, les diffrentes frquences
sont places dans une liste B, puis, chaque pas ditration, deux frquences sont enracines 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

7
3

10
4

7
5

10
4

(a)

17

7
5

5
2

(b)

10
4

(c)

3
1

99

17

17
10

2
(d)

17

3
1

10

5
2

(e)

10
4

3
1

5
2

(f)

3
1

## Ces six schmas montrent lvolution de la liste B et la construction ascendante de

larbre optimal. chaque tape, la liste contient une fort (voir par exemple le schma
(d)) darbres optimaux qui est incluse dans larbre finalement construit par lalgorithme
(schma (f)). Cet exemple prsente comme particularit que, dans la liste B, deux frquences minimales sont toujours voisines. Le cas chant, le processus de construction
fournit toujours un arbre diffrent, mais toujours optimal. Concrtement, ainsi quil est
prcis ci-dessous, lalgorithme reprsente B par une file de priorit.
Liste darbres La section prcdente nous conduit dfinir les notions de liste darbres de
frquences et de liste optimale (darbres de frquences).
Dfinition 7 (Liste de frquences) :
Soit A1 , . . . , Am m arbres de frquences sur respectivement F1 , . . . , Fm . B = hA1 , . . . , Am i
est une liste de frquences sur F = F1 t . . . t Fm .
Dfinition 8 (Cot dune liste) :
Soit B = hA1 , . . . , Am i une liste de frquences. Le cot de B se dfinit par :
L(B) =

m
X

L(Ai ).

i=1

## Dfinition 9 (Liste optimale) :

B est une liste optimale (de frquences) sur F si, pour toute liste B0 sur F, L(B) 6 L(B0 ).

Question 4.
Montrer que si B = hA1 , . . . , Am i est une liste optimale, alors chaque Ai est
un arbre optimal.

78 - Q 4

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.
Question 5.
Complter la construction de la boucle. Fournir le texte de lalgorithme de
Huffman. Calculer sa complexit.

78 - Q 5

100

## 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

5 10 12 `

F3
7

7 10 12 `

Dans la suite, on considre que fusionner deux fichiers de e1 et e2 enregistrements prsente un cot de e1 + e2 units (en nombre de conditions values par exemple). Fusionner
n (n > 2) fichiers peut se faire en fusionnant successivement des couples de fichiers jusqu lobtention dun seul fichier. Cependant, le cot total de lopration dpend de lordre
dans lequel on choisit les couples traiter. Considrons, par exemple, les six fichiers de
3, 4, 6, 8, 12 et 14 enregistrements traits dans la figure ci-dessous. Dans le schma (a), les
fichiers sont traits selon lordre croissant de la taille des six fichiers de dpart (encadrs
dans le schma). Le cot rsultant est de 121. En effet, la fusion des deux fichiers de trois et
quatre lments donne un fichier de sept lments (avec un cot de sept) ; ces sept lments
viennent se fusionner avec le fichier de six lments pour donner 13 lments (avec un cot
de 20), etc. Le cot total est la somme des valeurs encercles, soit 7+13+21+33+47 = 121.
47

47

121

163
47

33

14

74
21

12

41

20

27

20

47

20

13

13

(a)

14

20

44

114

116
36

8
12

72

(c)

10

26

10

26

(b)

12

14

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.

101

## Lobjectif de lexercice est de construire un algorithme glouton qui dtermine un arbre

de fusion optimal pour un ensemble de n fichiers quelconques.
Question 1.
Sachant que pour un jeu de six fichiers dots respectivement de 5, 6, 7, 8, 9
et 10 enregistrements le cot optimal slve 116 units, fournir larbre optimal.
Question 2.
Construire lalgorithme glouton qui dtermine un arbre optimal pour tout
jeu de n fichiers et dmontrer son optimalit.

79 - Q 1

79 - Q 2

102

## 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.

## Parcours de graphe en largeur dabord : rappels

Introduction Dans cette section, nous dfinissons la notion de parcours en largeur dabord
dun graphe non orient connexe.
Dfinition 10 (Distance entre deux sommets) :
Soit G = (N, V) un graphe non orient connexe, s et s0 deux sommets de G. On appelle
distance entre s et s0 la longueur du plus court chemin entre s et s0 .

## Dfinition 11 (Parcours en largeur dabord) :

Soit G un graphe non orient connexe, s un sommet de G. On appelle parcours en
largeur dabord de G depuis s tout procd qui rencontre les sommets de G selon les
distances croissantes par rapport s.
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.
bauche de la construction de lalgorithme Nous recherchons une solution du type course
en tte (voir section ??, page ??). Les principaux lments dun algorithme de parcours
en largeur dabord sont prsents ici.

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.

103

## CHAPITRE 7. ALGORITHMES GLOUTONS

a
0

a
b

b
1

c
1

d
2

e
2

f
3

h
3

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.

## En labsence dautres hypothses, la progression est possible, mais difficile dvelopper

autant que coteuse, puisque tout sommet absent de CLOSE est un candidat possible au
transfert dans CLOSE. Nous proposons denrichir cette premire version de linvariant en
lui ajoutant une structure de donnes (appelons-l OPEN), contenant tous les sommets
absents de CLOSE la condition quils soient voisins dau moins lun des sommets de
CLOSE. A priori, OPEN se prsente comme une file de priorit gre sur les distances de
ses lments par rapport s, puisque llment dplacer dans CLOSE est celui qui est le
plus proche de s. Nous verrons ci-dessous quune version simplifie dune file de priorit est
possible. Il suffit, pour maintenir cette nouvelle version de linvariant, de dplacer la tte
de la file OPEN en queue de la file CLOSE et cest la contrepartie du renforcement de
linvariant dintroduire les nouveaux voisins de llment dplac dans la file OPEN,
ceux qui ne sont ni dans OPEN ni dans CLOSE (il sagit dun choix glouton).
Cependant, tant donn un lment e de OPEN, senqurir directement de la prsence
ou non de lun de ses voisins dans OPEN ou dans CLOSE peut se rvler coteux. Une
meilleure solution consiste a effectuer un (nouveau) renforcement par la proposition suivante : une couleur est attribue chaque sommet du graphe ; blanc si le sommet est
soit dans OPEN, soit dans CLOSE, et gris sinon. De cette faon, condition quun accs
direct aux sommets soit possible, la mise jour de OPEN est facilite. Dans la progression, la prservation de ce complment de linvariant sobtient en peignant en blanc tout
sommet qui rejoint OPEN.
Revenons sur la stratgie de gestion de la file OPEN. Est-il possible dutiliser, au lieu
dune file de priorit, une simple file FIFO (voir section ??, page ??) ? Si cest le cas, la
gestion de OPEN sen trouvera grandement simplifie. Pour ce faire, lorsque le sommet e
quitte OPEN pour rejoindre CLOSE, il faudrait que les voisins de e candidats lintroduction dans OPEN soient une distance suprieure ou gale tous les lments prsents
dans OPEN, ce qui permettrait de retrouver une file trie. Ceci revient dire que, si e est
une distance k de s, tous les autres lments de OPEN sont une distance de k ou de
(k + 1) de s, puisque les voisins gris de e sont la distance (k + 1) de s. Nous ajou-

104

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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.

105

## CHAPITRE 7. ALGORITHMES GLOUTONS

OPEN

a
0
b

(a)

OPEN

b
1

(b)

CLOSE

d
2

b
1

d
2

b
1

b
1

CLOSE

a b c d

OPEN

g h

c
2

d
2

c
2

2
h
3

CLOSE
a b c d e

OPEN

(i)

h
3

3
g

(h)

a b c d e

CLOSE

OPEN

(g)

g h

h
3
g

f
3

(f)

a b c

OPEN
c

f
3

a b

OPEN
e

(e)

CLOSE

(d)

d e
c

OPEN

CLOSE

c d e

(c)

CLOSE

OPEN

b c

h
3
g

a b c d e

f
3

CLOSE
f

a b c d e

CLOSE
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

## Lalgorithme Le graphe G est, contrairement lhabitude, dfini comme un triplet conte-

nant notamment la composante R, dont le rle est de permettre la gestion des couleurs de
chaque sommet. sc est le sommet courant, tandis que v permet de parcourir la liste des
voisins.
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.
26.
27.
28.
29.
80 - Q 1

constantes
n N1 et n = . . . et N = 1 .. n et Couleurs = {gris, blanc} et
V N N et V = {. . .}
variables
R N Couleurs et G = (N, V, R) et
s N et sc N et v N et CLOSE FIFO(N) et OPEN FIFO(N)
dbut
/% coloriage en gris de tous les sommets : %/
pour w N faire
ColorierGr(G, w, gris)
fin pour ;
InitFifo(CLOSE) ; InitFifo(OPEN) ;
s . . . ; /% choix du sommet initial : %/
ColorierGr(G, s, blanc) ;
AjouterFifo(OPEN, s) ;
tant que non EstVideFifo(OPEN) faire
sc TteFifo(OPEN) ; SupprimerFifo(OPEN) ;
AjouterFifo(CLOSE, sc) ;
OuvrirGr(G, sc) ;
tant que non FinListeGr(G, sc) faire
LireGr(G, sc, v) ;
si CouleurGr(G, v) = gris alors
ColorierGr(G, v, blanc) ;
AjouterFifo(OPEN, v)
fin si
fin tant que
fin tant que ;
crire(CLOSE)
fin

Question 1.
Quelle est la complexit asymptotique de cet algorithme en termes de conditions values ?

## Lalgorithme de coloriage de graphe avec deux couleurs

Nous sommes prsent arms pour aborder le problme qui fait lobjet de lexercice :
le coloriage dun graphe avec les deux couleurs noir et blanc. Il sagit damnager la
construction de lalgorithme ci-dessus de faon colorier alternativement en noir et blanc,
selon la profondeur par rapport au sommet de dpart, soit jusqu puisement des sommets,
soit jusqu la dcouverte dune impossibilit.
80 - Q 2
80 - Q 3

Question 2.

## Construire lalgorithme de coloriage.

Question 3.
Montrer, sur le graphe de la figure 7.5 page 103, les diffrentes tapes du
coloriage partir du sommet a.

107

Question 4.

## Fournir le code de lalgorithme, ainsi que sa complexit.

80 - Q 4

Question 5.
Lexercice 58 page 64 aborde le problme plus gnral de coloriage avec m
(m > 2) couleurs. Discuter de la possibilit de gnraliser lalgorithme fourni en rponse
la question 4, au cas m > 2.
Remarque Il existe une proprit caractristique intressante : un graphe est bicoloriable
sil ne contient aucun cycle de longueur impaire. Cependant, cette proprit nest pas
constructive : ltablir ne fournit pas le coloriage.

## 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 lalgorithme : la solution de ce problme propos des carrs magiques appartient-elle
bien la catgorie des algorithmes gloutons ? Le lecteur jugera. Restent une dmonstration et un exercice de programmation non triviaux.
On sintresse la construction de carrs magiques dordre impair. Un carr magique
dordre n est une matrice n n dans laquelle apparat une fois et une seule chacun des
entiers de lintervalle 1 .. n2 et tel que la somme des valeurs des lignes, des colonnes et
des diagonales principales est la mme. Cette somme, note Mn , est appele nombre
magique dordre n .
On tudie plus particulirement la mthode dite de Bachet (daprs Claude-Gaspard
Bachet dit de Mziriac, 1612). Cette mthode a comme point de dpart un damier crnel
de (n2 + (n 1)2 ) cellules (41 cellules pour n = 5), comme le montre le schma de gauche
ci-dessous pour n = 5. Dans un tel carr crnel, il existe de grandes diagonales (de
n cellules) et de petites diagonales (de (n 1) cellules). Ltape suivante consiste
remplir successivement chacune des n grandes diagonales sud-ouest/nord-est avec les n2
valeurs, en remontant. Une fois cette phase acheve, les petites diagonales sont vides,
mais certaines valeurs sont dj places dans le carr central. Elles ne seront pas dplaces.
5
4
3
2
1

10
9

8
7

14
13

12
11

20
19

18
17

16

25
24

23
22

21

15

16

22

15

20

21

14

25

13

19

24

12

18

11

17

10

23

80 - Q 5

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

81 - Q 2
81 - Q 3

81 - Q 4

Question 1.
Calculer la formule qui fournit Mn , le nombre magique dordre n. Que valent
M5 et M7 ?
Question 2.

## Construire, selon la mthode de Bachet, le carr magique dordre 7.

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 .
Question 4.
Construire lalgorithme qui produit un carr magique dordre n selon la
mthode de Bachet.

## Deux versions de lalgorithme du tri topologique sont tudies. La premire, nave

mais peu efficace, sobtient sans difficult. La seconde exige un renforcement dinvariant ; implante en termes de pointeurs, elle constitue un excellent exercice de
raffinement et de manipulation de structures dynamiques. Lalgorithme construit
ici sapparente lalgorithme de Marimont permettant la mise en niveau dun
graphe sans circuit.
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
c
e

## Logique du premier ordre

Thorie des ensembles
Bases de donnes

b
d
f

## Spcification et programmation imprative

Conception de systmes dinformations
Structures de donnes

## La relation est (par exemple) dfinie par :

a b, a c, b d, c b, c d, c e, c f, e d, f e.
Elle peut se reprsenter par le graphe suivant :

## CHAPITRE 7. ALGORITHMES GLOUTONS

109

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 dentre, est encore un DAG.
On note G = (N, V) un graphe quelconque, et n = card(N). Montrer quil
Question 2.
existe des DAG tels que card(V) (n2 ).
Nous bauchons prsent la construction de la boucle gloutonne de lalgorithme,
avant de lappliquer lexemple ci-dessus. La mthode de construction utilise se fonde
sur la technique de la course en tte . La suite des questions porte sur lalgorithme, son
raffinement et sa complexit.

## Premire tentative de construction

Soit G = (E, V) le DAG de n sommets fourni en entre.
Invariant Soit S la file de sortie contenant lensemble ES (ES E) des sommets tris selon un
ordre total compatible avec lordre , et tel que tout sommet v de E nappartenant
pas ES (v (E ES )) est suprieur, selon lordre partiel, tout sommet de ES .
Condition darrt Tous les sommets sont dans la file S, soit : |S| = n. La conjonction de
linvariant et de la condition darrt implique bien que S est une liste trie selon un
ordre total compatible avec lordre partiel.
Progression La progression consiste insrer dans S lun des sommets de (E ES ). Il en
rsulte que ce sommet est dans le sous-graphe Induit(G, E ES ). On va renforcer
linvariant dans ce sens.
Afin de choisir le sommet dplacer en toute connaissance de cause, il faut introduire
une structure de donnes apte exploiter le sous-graphe Induit(G, E ES ).

## Seconde tentative de construction

Le graphe G devient une variable.
Invariant On adjoint la version prcdente de linvariant le prdicat : G est un DAG.
Condition darrt Elle est inchange.

82 - Q 1

82 - Q 2

110

## Progression On recherche lun des points dentre de G afin de dplacer ce sommet de

(E ES ) vers la file S. On vrifie facilement que S satisfait alors la premire version
de linvariant et que G, le nouveau sous-graphe induit, est bien un DAG (en vertu
de la proprit tablie en rponse la question 1).
Remarquons que G joue le rle de la file dentre des algorithmes gloutons et que la
conjonction de linvariant et de la condition darrt implique bien lobjectif vis.
Initialisation Linvariant est instaur en partant dune file S vide et dun graphe G qui
sidentifie au graphe initial.
Terminaison n |S| est une fonction de terminaison convenable puisqu chaque pas de
progression, un lment est dplac de G vers S.
Notons que cet algorithme fournit par construction un rsultat correct. Il fait naturellement la course en tte .
82 - Q 3
82 - Q 4

82 - Q 5

Question 3.

## Appliquer lalgorithme ci-dessus lexemple introductif.

Question 4.
En supposant disponibles la fonction d
G (s) qui dlivre le demi-degr intrieur dun sommet s dans un graphe G et la fonction Induit (voir section ??, page ??, pour
les notions lies aux graphes), fournir le code de cet algorithme. Dans lhypothse dune
reprsentation de graphes par listes de successeurs (voir figure ??, page ??), montrer que
la complexit de cet algorithme est en O(n2 ).
Question 5.
Dans la version obtenue en rponse la question 4, le facteur pnalisant
du point de vue de la complexit est la recherche dun minimum parmi tous les sommets
restant considrer. Proposer, sur la base dun renforcement de linvariant ci-dessus, une
solution plus efficace pour des graphes peu denses. Que peut-on en conclure quant
lefficacit de cette solution ?

## Cet exercice est une variante du problme trait en introduction de ce chapitre. Il

peut se dcliner de nombreuses faons et tre la source dune varit dexercices
voisins, plus ou moins difficiles. On peut le vrifier en recherchant une permutation qui maximise le bnfice dune tche, ou en ne considrant que les fins de
tches qui sont pnalisantes, etc. Cest son principal intrt.
Comme dans lexemple introductif de ce chapitre, on doit raliser un certain nombre
de tches de photocopies, mais les demandes des clients sont diffrentes. Il y a n tches
raliser, elles doivent toutes tres accomplies et ne peuvent tre fractionnes. Une tche
ti exige une certaine dure d(ti ). Chaque tche ti peut tre place nimporte o dans le
planning de la photocopieuse condition quelle nentre pas en concurrence avec une autre
tche. Lheure de fin est note f(ti ). Chaque tche saccompagne dune heure dchance
e(ti ) qui est telle que si ti se termine avant lheure e(ti ), le bnfice est positif et slve
(e(ti ) f(ti )) si elle se termine aprs, le bnfice est ngatif et vaut (toujours)
(e(ti ) f(ti )) ; enfin, si ti se termine exactement lheure e(ti ), le bnfice de lopration
est nul.

111

## Lobjectif de lexercice est dobtenir un algorithme glouton exact, qui dtermine un

ordre dexcution des n tches qui optimise (maximise) le bnfice. Plus prcisment, le
cur de lexercice consiste montrer que la stratgie gloutonne propose est optimale.
Dans la suite, on admet (la dmonstration est aise) quil existe une solution optimale
qui occupe la photocopieuse sans temps mort. On recherche une solution de ce type.
Exemple

a
b
c
0

e(c)

e(b)

8
e(a)

## Les six permutations possibles sont reprsentes dans le schma ci-dessous.

cba
cab
bca
bac
acb
abc
0

2
e(c)

4
e(b)

8
e(a)

Le bnfice obtenu par exemple pour la permutation abc se calcule de la manire suivante :
(e(a) f(a)) + (e(b) f(b)) + (e(c) f(c))
arithmtique

=
(e(a) + e(b) + e(c)) (f(a) + f(b) + f(c))

dfinition de f(ti )
(e(a) + e(b) + e(c))(d(t(a)) + (d(t(a)) + d(t(b))) + (d(t(a)) + d(t(b)) + d(t(c))))
=
arithmtique
(e(a) + e(b) + e(c)) (3 d(t(a)) + 2 d(t(b)) + 1 d(t(c)))
=
application numrique
(8 + 4 + 2) (3 3 + 2 4 + 1 1)
=
arithmtique
4.

Question 1.
Complter le calcul pour les cinq autres permutations. En dduire que la
stratgie gloutonne consistant ordonner les tches selon les chances croissantes nest
pas optimale.

83 - Q 1

112
83 - Q 2

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Question 2.
Montrer, en utilisant une dmonstration du type argument de lchange ,
que la stratgie gloutonne consistant ordonner les tches selon leur dure est optimale.
Quelle est la complexit de lalgorithme rsultant ?

## Exercice 84. Tournois et chemins hamiltoniens

Voici un bien trange exercice glouton : une file dentre sans file, une file de sortie 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

(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.
Afin de reformuler le problme en termes de recherche dune solution optimale, i) nous
constatons quun chemin hamiltonien, sil en existe, est un chemin lmentaire le plus long
possible, ii) nous montrerons que tout tournoi possde au moins un chemin hamiltonien.
Nous admettons la proprit suivante : soit N0 N ; le sous-graphe G0 induit du tournoi
G par N0 est aussi un tournoi (la preuve se fait aisment par labsurde) .
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

113

## n > 2, qui commence par un

fois la sous-chane 01.
Question 2.

## Montrer, par rcurrence, que tout tournoi possde un chemin hamiltonien.

Question 3.
Construire un algorithme glouton qui produit un chemin hamiltonien quelconque dans un tournoi. Quelle est sa complexit ?

84 - Q 2
84 - Q 3

## La difficult principale de cet exercice rside dans la recherche dune stratgie

gloutonne et dans la preuve de son exactitude. Lnonc guide le lecteur dans la
recherche dune solution.
On considre la demi-droite des rels positifs R+ . tant donn un ensemble fini I de n
(n > 0) intervalles ouverts gauche et ferms droite, on dit quun ensemble de points
T pingle I si chaque intervalle de I contient au moins une fois un point de T . Lobjectif
de lexercice est de construire un programme glouton qui calcule un ensemble T de taille
minimale 3 .
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

10

11

12

I10

13

14

I11

15

16

I12
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.
Question 1.

85 - Q 1

114

## Dans la perspective dune dmarche gloutonne, on envisage deux stratgies de placement

des points de T . Ces deux stratgies ont en commun quelles parcourent la file dentre
de gauche droite et pinglent les intervalles sur lextrmit ferme (sur la droite de
lintervalle). Dans le premier cas, on considre que la file dentre F est trie sur les origines
croisantes, dans le second, elle est trie sur les extrmits croissantes.
85 - Q 2

85 - Q 3

85 - Q 4

Question 2.
Quel est le rsultat de lapplication de ces deux stratgies sur lexemple
ci-dessus ? Que peut-on en conclure ?
Question 3.
Construire un programme glouton fond sur la stratgie de votre choix
parmi les deux stratgies tudies dans la seconde question. Montrer quelle est exacte. La
technique de la course en tte est prconise. Quelle est la complexit de cette solution ?
Question 4.
Planter une pingle peut se faire en nimporte quel point dun intervalle
sachevant la position dtermine dans les questions prcdentes sans altrer lexactitude
de la solution. Comment cet intervalle se dfinit-il ?

CHAPITRE

## Diviser pour Rgner

force de ruminer des choses. . .
voil ce que nous dcouvrmes :
fallait diviser pour rsoudre !. . .
Ctait lessentiel !. . .
Tous les emmerdeurs en deux classes !. . .
(L. F. Cline.)

8.1

Exercices

## Laspect purement DpR de cet algorithme et lintrt de cette approche ont t

abords la section ??, page ??. Le prsent exercice est simplement destin
approfondir quelques points laisss en suspens dans cette section introductive.
Cest en particulier le cas de lalgorithme de fusion. Celui-ci est trait ici de
manire purement itrative.
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
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].
Question 2.
Combien de comparaisons entre lments de T ncessite la fusion des tableaux [3, 6, 7, 9] et [4, 5, 10, 12] ? des tableaux [3, 4, 5, 6] et [7, 9, 10, 12] ? des tableaux
[3, 5, 7, 10] et [4, 6, 9, 12] ? Combien de conditions doivent tre values au pire pour la
fusion des tableaux T [p .. q] et T [q + 1 .. r] ?
Question 3.
Quelles adaptations faut-il faire dans la procdure TriFusion si la taille de
T nest pas une puissance de 2 ?

86 - Q 1

86 - Q 2

86 - Q 3

116

## Cet exercice sur la recherche dichotomique est un classique de lapplication du

principe DpR. Cependant, une extension la trichotomie (cest--dire la division rcursive par 3) est propose. Se pose alors le problme de la comparaison des
complexits de ces deux solutions. Une solution complmentaire au problme de
la recherche de lexistence dune valeur dans un tableau fait lobjet de la dernire
question : la recherche par interpolation. Bien que simple dans son principe, cet
algorithme exige une grande rigueur pour obtenir une solution correcte.
On considre un tableau T [1 .. n] (n N1 ), dentiers tous diffrents, tri par ordre croissant. On cherche savoir si lentier v sy trouve. Les deux premires questions portent sur
les algorithmes et leur construction, les questions 3, 4 et 5 sont consacres la comparaison
des complexits exactes, la dernire question concerne la recherche par interpolation.
87 - Q 1

87 - Q 2

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.
On sintresse maintenant une solution trichotomique. Il existe plusieurs
Question 2.
faons de diviser un tableau en trois sous-tableaux de tailles approximativement gales.
a) On peut par exemple diviser le tableau (de longueur n) en trois sous-tableaux de tailles
respectives bn/3c, bn/3c et (bn/3c + (n mod 3)). Montrer que la courbe qui dnombre
les comparaisons pour la recherche de v > T [n] nest pas monotone. Conclusion ?
b) Il existe galement une solution dite par ncessit , qui commence par considrer
le premier sous-tableau de longueur bn/3c puis, si ncessaire, divise par 2 le rsidu
pour fournir un second sous-tableau de taille b(n bn/3c)/2c et un troisime de taille
d(n bn/3c)/2e. On simpose nouveau la contrainte de Bottenbruch : le test sur
lgalit entre v et un lment du tableau nintervient que si le tableau ne possde pas
plus de deux lments. Montrer que les trois sous-tableaux ont des tailles respectives
de d(n 2)/3e, d(n 1)/3e et dn/3e. Construire cette solution et fournir 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).

87 - Q 3

Question 3.
La solution la pire pour la recherche dichotomique 1 est atteinte quand
v > T [n]. En consquence, montrer que lquation rcurrente qui dfinit C2 (n) est la
suivante :
C2 (n) = dlog2 (n)e + 1.
(8.1)

1. Le lecteur insatisfait par cette affirmation pourra sinspirer de la question 4 pour la dmontrer.

117

## CHAPITRE 8. DIVISER POUR RGNER

Question 4.
Pour la recherche trichotomique, on va mettre en vidence lquation rcurrente C3 (n), avant den rechercher une solution.

87 - Q 4

a) Pour une taille donne n du tableau, lensemble des excutions possibles de lalgorithme de recherche par trichotomie peut tre reprsent par un arbre de dcision (voir
chapitre 1 et exercice 94, page 122, pour un autre exemple utilisant les arbres de dcision). Dans notre cas, larbre de dcision est un arbre binaire dans lequel chaque nud
matrialise une comparaison (de type 6, >, 6= ou =) entre v et un lment T [i]. Fournir
les arbres de dcision An de la trichotomie pour n 1..7. Par quelle relation la hauteur
h(An ) de larbre est-elle lie la complexit au pire C3 (n) de lalgorithme ?
T [i]
b) En adoptant la notation hAg , T [i], Ad i pour reprsenter larbre de dcision

,
Ag
fournir une dfinition inductive de An . En dduire une dfinition inductive de sa
hauteur h. Montrer que la fonction h est monotone (au sens large). Que peut-on en
conclure ?

[

E = {30 }
2 3p + 1 .. 3p+1
p>0

## et soit 1E sa fonction caractristique. Montrer que :

C3 (n) = 2 dlog3 (n)e + 1E (n).

(8.2)

## Montrer, en utilisant pour C2 et C3 les reprsentations de votre choix, que

Question 5.
pour tout n N1 , C2 (n) 6 C3 (n).
Cette dernire question est consacre la recherche par interpolation. En
Question 6.
gnral, la recherche dune entre dans un dictionnaire ne seffectue pas par dichotomie,
mais exploite lestimation de la position de la valeur recherche pour ouvrir le dictionnaire
sur une page susceptible de contenir lentre en question. Cest le principe de la recherche
par interpolation. Construire lopration correspondante, fournir le modle de division
ainsi que le code de lopration. Comparer avec la recherche dichotomique.

## Exercice 88. Recherche dun point fixe

Au premier abord, cet exercice nest quun exemple de plus sur la recherche dichotomique (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)). Cependant, 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

87 - Q 5

87 - Q 6

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 1

88 - Q 2

Question 1.
Construire une solution ce problme. Fournir le code de lopration PointFixe (T est un tableau global). Que peut-on dire de la complexit de cette opration ?
Question 2.
On considre prsent que T est un tableau, tri par ordre croissant, dentiers naturels positifs tous distincts. Construire la nouvelle version de lopration fonction PointFixe rsultat B , fournir son code et sa complexit moyenne.

## Exercice 89. Le pic

Cet exercice est lun des nombreux exemples dapplication du principe de la recherche 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

89 - Q 2

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.
Question 2.
Donner le modle de division de la construction prcdente. Quel est lordre
de grandeur de complexit de cette solution (lopration lmentaire retenue est la comparaison) ?

## Exercice 90. Tableau tri cyclique

Le principal atout de lexercice est de montrer que lon peut effectuer une recherche 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.
Un tableau cyclique tri T [1 .. n] (n N1 ) est un tableau dentiers naturels (sans doublons), dans lequel il existe une frontire f (f 1 .. n) telle que les deux sous-tableaux
T [1 .. f] et T [f + 1 .. n] sont tris par ordre croissant et telle que tous les lments de T [1 .. f]
sont suprieurs ceux de T [f + 1 .. n].
Par exemple, le tableau T suivant :
i
T [i]

1
9

2
11

3
12

4
13

5
2

6
5

7
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

Question 1.

## Dmontrer les proprits suivantes :

90 - Q 1

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].

Question 2.
Construire,
selon
une
approche
DpR,
lopration
fonction PlusPetit(i, s) rsultat N qui dtermine le plus petit lment du tableau
tri cyclique T [i .. s] (T est suppos tre un tableau global). On montrera dans la partie
inductive du raisonnement comment on peut dduire des proprits prcdentes le critre
sur lequel on peut dcider du demi-tableau dans lequel rechercher le plus petit lment
dun tableau cyclique tri T . Quel est le modle de division qui sapplique ? Fournir le
code de lopration. Quelle est, en nombre de conditions values, la complexit de cette
fonction ?
Question 3.
On cherche obtenir selon une approche DpR lopration
fonction Appartient(i, s, v) rsultat B , qui dcide si la valeur v est prsente ou
non dans T [i .. s]. Construire cette opration. Pour le cas inductif, dcrire avec prcision
les conditions qui orientent la recherche dans lun ou lautre demi-tableau. On vise un
ordre de grandeur de complexit en (log2 (n)). Cet objectif est-il atteint ?

90 - Q 2

90 - Q 3

120

## Exercice 91. Minimum local dans un arbre binaire

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.
29

21
10
11

91 - Q 1
91 - Q 2

91 - Q 3

Question 1.

22

31
13

36

20

33

11

31
13

36

22
33

25

31
13

36

33

Montrer quil y a toujours (au moins) un minimum local dans un tel arbre.

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 ?
Question 3.

## Exercice 92. Diamtre dun arbre binaire

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 sinspirer 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 :
ab = {/} {(l, r) | l ab et r ab}
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
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. Cependant, dans un souci de concision, on accepte la dfinition inductive suivante :

h(/)
h((l, r))

=
=

92 - Q 1

92 - Q 2

1
max({h(l), h(r)}) + 1

En prenant comme base le nombre de nuds rencontrs lors du calcul, quelle est la complexit 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
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).

Exercice 93.

## Loriginalit de cet exercice rside dans lutilisation dun raisonnement du type

induction de partition (voir section ??, page ??) non standard. En outre, cet
exercice montre (une nouvelle fois) que pour rsoudre un certain problme (celui
de llment mdian), il est souvent intressant de rsoudre un problme plus
gnral (celui de la slection) et donc a priori plus difficile. Cet exercice est pos
(et rsolu) dans un formalisme ensembliste. On diffre ainsi les aspects techniques
lis limplantation.
On se donne un sous-ensemble fini non vide E de N, de cardinal n. On cherche rsoudre
le problme de la slection du ke plus petit lment (1 6 k 6 n) : v est le ke plus petit
lment de E sil existe k 1 lments infrieurs v dans E. Quand k vaut 1 ou n, ce

92 - Q 3

122

## problme se rsout facilement en (n), avec la comparaison pour opration lmentaire.

Dans quelle mesure peut-on atteindre la mme performance pour k quelconque ?
93 - Q 1

Question 1.
Cette premire question concerne un algorithme auxiliaire itratif utilis
pour rsoudre le problme de la slection du ke plus petit lment par une approche DpR.
La procdure correspondante est nomme clater(E, E , E+ , a). On choisit alatoirement
un lment de lensemble E (tous les lments sont supposs quiprobables). Cet lment,
not a, est appel le pivot. clater(E, E , E+ , a) spare les lments de lensemble E{a} en
deux autres ensembles E et E+ , le premier contenant tous les lments de E strictement
infrieurs au pivot, le second contenant tous les lments de E strictement suprieurs au
pivot.
a) Fournir les constituants dune construction itrative de la procdure clater.
b) Dans loptique dun raffinement de cette procdure, montrer comment les ensembles
peuvent tre implants sous forme de tableaux. En dduire que la complexit dclater
est en (n).

93 - Q 2

Question 2.
Soit fonction Slection(E, k) rsultat N lopration qui dlivre le ke plus
petit lment de lensemble E. Cette opration est prconditionne par k 1.. card(E).
a) Soit a un lment quelconque de E. Quelle relation liant E, k et a permet-elle daffirmer
que a est llment recherch ?
b) En supposant disponible la procdure clater, construire une solution DpR au problme de la slection. Quel modle de division sapplique-t-il ?
c) En dduire le code de la fonction Slection.
d) Quelles sont les spcificits de cette solution par rapport au modle standard DpR ?
e) Fournir les lments dun raffinement algorithmique.
f) Quelle est la complexit au mieux de la fonction Slection ? Quel ordre de grandeur
de complexit obtient-on si la procdure clater coupe chaque tape lensemble E
en deux sous-ensembles E et E+ de tailles gales ou diffrant de 1 ? Quelle est la
complexit au pire de la fonction Slection ? Quelle en est votre avis la complexit
moyenne ?

93 - Q 3

## Comment peut-on adapter la solution au problme de la slection pour obQuestion 3.

tenir une solution au problme de llment mdian, cest--dire celui de la recherche du
bcard(E)/2ce lment de E ?

## Exercice 94. crous et boulons

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.

123

## Dans une bote outils, il y a en vrac un ensemble E de n (n > 0) crous de diamtres

tous diffrents et lensemble B des n boulons correspondants. La diffrence de diamtre
est si faible quil est impossible de comparer visuellement la taille de deux crous ou de
deux boulons entre eux. Pour savoir si un boulon correspond un crou, la seule faon
est dessayer de les assembler. La tentative dappariement boulon-crou est lopration
lmentaire choisie pour lvaluation de la complexit de ce problme. Elle fournit lune
des trois rponses suivantes : soit lcrou est plus large que le boulon, soit il est moins
large, soit ils ont exactement le mme diamtre. Le problme consiste tablir la bijection
qui, chaque crou, associe son boulon.
Question 1.
Fournir le principe dun algorithme naf. Quelle est sa complexit la
meilleure ? La pire ?
Question 2.
Construire un algorithme DpR qui assemble chaque boulon avec son crou.
Quel est le modle de division qui sapplique ?
Question 3.
Fournir une version ensembliste de lopration procdure Apparier(E, B)
qui assemble les n crous de lensemble E aux n boulons de lensemble B. Montrer que la
complexit au pire est en (n2 ).
Question 4.
On cherche prsent dterminer, en utilisant la mthode des arbres de dcision (voir chapitre 1), une borne infrieure la complexit du problme des crous et des
boulons dans le cas le plus dfavorable. Un arbre de dcision pour un algorithme rsolvant
le problme considr est un arbre ternaire complet qui reprsente les comparaisons effectues entre crous et boulons (voir exercice 87 page 115, pour un autre exemple utilisant
les arbres de dcision). Dans un tel arbre, un sous-arbre gauche (resp. central, droit) prend
en compte la rponse > (resp. =, <) la comparaison. chaque feuille de larbre est associe lune des bijections possibles entre E et B. Fournir larbre de dcision pour la mthode
nave dans le cas o E = {1, 2, 3} et B = {a, b, c}. Sachant que log3 (n!) (n log3 (n))
(daprs la formule de Stirling), montrer que tout algorithme qui rsout le problme des
crous et des boulons a une complexit au pire qui est en (n log3 (n)).

## Nous abordons ici un problme classique de pese, pour lequel de nombreuses

variantes existent. Strictement parlant, il ne sagit pas dun problme informatique (dailleurs, aucun algorithme nest demand). En dpit de cela, il sagit
bien dun problme DpR. Lune de ses caractristiques est le contraste qui se
manifeste entre la simplicit de lnonc et la difficult dune solution rigoureuse
et exhaustive.
Considrons un ensemble de n > 1 pices de mme apparence, dont n 1 sont en or et
une en mtal lger plaqu or. Nous disposons dune balance deux plateaux qui indique,
chaque pese, si le poids plac sur le plateau de gauche est infrieur, suprieur ou gal
au poids mis sur le plateau de droite. Notons quil nest possible dexploiter le rsultat
dune pese que si le nombre de pices est identique sur chaque plateau.

94 - Q 1

94 - Q 2

94 - Q 3

94 - Q 4

124

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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.

## Stratgie de la division en trois tas

Considrons la stratgie suivante (dite stratgie trois tas), pour laquelle on spare
les n pices en deux tas de mme cardinal k et un troisime (ventuellement vide) qui
contient le reliquat de pices (donc k peut varier de 0 bn/2c). La fonction C3 (n) fournit
le nombre de peses ncessaires (dans le cas le plus dfavorable).
Base Si n = 1 (k vaut alors 0), nous sommes face une seule pice, cest la fausse pice.
Aucune pese nest ncessaire : C3 (1) = 0.
Hypothse dinduction Pour tout m tel que 1 6 m < n, on sait dterminer C3 (m).
Induction Soit k 1 .. bn/2c. Le principe de cette stratgie consiste sparer les n pices
en trois tas, deux tas de k pices et un tas de n 2k pices. Une pese est ralise
en plaant un tas de k pices dans chaque plateau de la balance. Deux cas peuvent
alors se prsenter.
Premier cas La balance est dsquilibre. La fausse pice se trouve dans le tas le plus
lger. Le nombre de peses restant raliser est donc C3 (k).
Second cas La balance est quilibre. La fausse pice se trouve donc dans le troisime
tas. Le nombre de peses restant raliser est donc C3 (n 2k) 2 .
Dans les deux cas, par lhypothse dinduction, on sait trouver la valeur cherche.
Terminaison Le nombre de pices peses chaque tape diminue. Ceci assure la terminaison
de ce procd.
95 - Q 1
95 - Q 2

Question 1.

## Fournir lquation rcurrente de C3 (n), pour n > 0.

Question 2.
Nous allons prsent tenter de simplifier cette quation. Montrer tout
dabord (par induction sur n) que C3 (n) est croissante. En dduire que lquation obtenue
dans la premire question est quivalente lquation rcurrente suivante :
C3 (1) = 0
C3 (n) = 1 + C3

95 - Q 3

l m
n
3

n > 1.

Question 3.
Rsoudre cette quation. En dduire que la dtection de la fausse pice se
fait au pire en dlog3 (n)e peses.

## Stratgie de la division en quatre tas

La stratgie de la division en trois tas peut stendre de diffrentes manires au cas des
quatre tas. Nous nous intressons lune dentre elles pour laquelle, si n > 3, le tas initial
est spar en trois tas de mme cardinal k, plus un tas de (n 3k) pices.
Question 4.
Refaire le dveloppement prcdent pour cette stratgie.

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.

## Exercice 96. La valeur manquante

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.
On dispose dun tableau constant T [1 .. n] (n N1 ) contenant tous les entiers de lintervalle 1 .. n + 1, sauf un. On veut dterminer quel est lentier absent de T . Les calculs de
complexit se feront sur la base de lvaluation de conditions.
Question 1.
Construire un algorithme qui rsout le problme en temps linaire, sans
utiliser de tableau auxiliaire.
Question 2.
Le tableau est maintenant suppos variable. On cherche simultanment
dterminer la valeur manquante et trier le tableau. On peut supposer quune cellule
supplmentaire de T est disponible la position n + 1. Construire une solution itrative
qui rsout le problme en temps linaire.
Le tableau T [1 .. n] est prsent suppos tri. Construire une solution DpR
Question 3.
base sur la recherche dichotomique. Fournir le modle de division ainsi que lalgorithme.
Quelle est sa complexit au pire ?
Question 4.
Reprendre les trois questions prcdentes quand le tableau contient tous les
entiers de lintervalle 1 .. n + 2, sauf deux.

## Exercice 97. Le meilleur intervalle

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 problme 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.
On dispose dun tableau constant T [1 .. n] (n > 1) de valeurs relles non ngatives
(T 1 .. n R+ ). Il existe au moins deux indices, i et j, dfinissant lintervalle i .. j, avec
1 6 i 6 j 6 n, tels que la valeur de lexpression T [j] T [i] soit maximale. On cherche cette
valeur maximale (la valeur du meilleur intervalle). Le cas particulier o i = j caractrise
un tableau monotone strictement dcroissant : la valeur cherche est alors nulle.
Un exemple dapplication de cet algorithme : le tableau T comporte les valeurs quotidiennes de laction de la socit Machin le mois dernier. On se demande aujourdhui quel
aurait t le gain optimal en achetant une action, puis en la revendant au cours du mois
dernier.

96 - Q 1

96 - Q 2

96 - Q 3

96 - Q 4

126
97 - Q 1

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Question 1.
Soit lopration procdure MeilleurIntervalle1(deb, fin; mi : modif ) qui
dlivre la valeur du meilleur intervalle mi pour le tableau T [deb .. fin].
a) En appliquant le principe de linduction de partition (voir section ??, page ??) construire
la procdure MeilleurIntervalle1.
b) Sur quel modle de division cette solution sappuie-t-elle ? En dduire sa complexit
en nombre de conditions values.

97 - Q 2

Question 2.

## a) Lesquels ? La mise en uvre de cette amlioration passe par un renforcement de la

postcondition, qui se traduit par lajout de paramtres dans la procdure. Spcifier
informellement cette nouvelle procdure MeilleurIntervalle2.
b) Construire cette procdure. Fournir le modle de division correspondant, ainsi que le
code de la procdure. En dduire la complexit de cette solution. Que peut-on en dire
par rapport celle de MeilleurIntervalle1 ?

## Lintrt principal de cet exercice rside dans la succession de renforcements de

lhypothse dinduction exige par la recherche dune solution efficace et dans
leur caractre constructif (montrant une nouvelle fois que le dveloppement peut
le plus souvent se faire de manire rationnelle et que le travail dj ralis guide
en gnral a celui venir).
a. Il existe des exceptions cette rgle, comme celle de lexercice 104 page 137, sur la recherche
dun lment majoritaire.

## Soit un tableau T [1 .. n] (n > 1) de nombres rels. On appelle somme dun sous-tableau

de T la somme des lments de ce sous-tableau. On cherche la valeur maximale prise par
la somme lorsque lon considre tous les sous-tableaux de T (y compris les sous-tableaux
vides et le tableau T au complet).
Par exemple, dans le tableau suivant :
i
T [i]

1
3.

2
1.

3
4.

4
3.

5
1.

6
3.

7
0.5

8
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
T [i]

1
5.

2
4.

3
4.

4
3.

5
1.

6
8.

7
0.5

8
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 soustableaux, 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]).

98 - Q 1

## 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 ?
Question 2.
Dans la solution prcdente, lexistence de calculs rptitifs prsents dans le
rassemblement laisse prsager une solution de type DpR plus efficace que celle construite.

98 - Q 2

## a) Quel renforcement de lhypothse dinduction est-il raisonnable de formuler ? Spcifier

len-tte de la nouvelle version SousTabMax2 de cette procdure.
b) Dcrire le traitement raliser pour le rassemblement des rsultats obtenus dans le cas
inductif. Quel est le modle de division associ ?
c) En dduire lordre de grandeur de complexit qui en rsulte. Conclusion ?
Les rponses la question 2 fournissent une suggestion quant un nouveau
Question 3.
renforcement quil est possible de raliser.
a) Quel renforcement de lhypothse dinduction est-il raisonnable de formuler ? Spcifier
len-tte de la nouvelle version SousTabMax3 de cette procdure.
b) Comment le rassemblement dcrit dans la question 2.b) peut-il tre amnag pour
prendre en compte la nouvelle hypothse dinduction ? Quel est le modle de division
associ ? En dduire le code la procdure SousTabMax3.
c) Quelle est lordre de grandeur de complexit qui en rsulte ?

## Exercice 99. Pavage dun chiquier par des triminos

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.

98 - Q 3

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 :

(a)

(b)

(c)

(d)

## On se pose le problme de recouvrir intgralement lchiquier, lexception dune cellule

particulire donne (le trou ) de coordonnes (lt, ct) (ligne du t rou et colonne du t rou),
laide des motifs ci-dessus, de sorte que chaque cellule soit recouverte par un seul motif.
Exemple On dispose dun chiquier de huit lignes et de huit colonnes, le trou est en (2, 6) :
deuxime ligne, sixime colonne.
1

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

99 - Q 2

99 - Q 3
99 - Q 4

Question 1.
Dmontrer par rcurrence que pour m entier (avec m > 0), lexpression
(22m 1) est divisible par 3. Conclusion ?
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.
Question 3.

## Fournir le modle de division qui sapplique.

Question 4.
Donner le code de la procdure Pavage. Lopration procdure Poser (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.

129

## Exercice 100. La btire

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
3
7
20

14
15
15
28

25
28
32
36

30
30
43
58

69
81
100
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).

## Diviser pour Rgner (1, n 1) = Diminuer pour rsoudre

Une premire solution consiste en un balayage squentiel de B par ligne (ou par colonne)
jusqu trouver v.
Question 1.

## Dcrire le principe de cette premire stratgie en termes de mthode DpR.

Question 2.
Quelle est sa classe de complexit au pire (en termes de nombre de comparaisons), 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 ?

100 - Q 1
100 - Q 2

## Diviser pour Rgner (n/2, n/2)

Dans lapproche prcdente, on na pas exploit (double recherche squentielle), ou alors
pas totalement (recherche squentielle sur les lignes et dichotomique dans une ligne) le
fait que B est une btire. Pour tirer parti de cette proprit, on envisage maintenant une
solution dans le cas particulier o la btire est un carr de ct n = 2k (k > 1), et on
distingue les deux valeurs : x = B[n/2, n/2], y = B[n/2 + 1, n/2 + 1].
Question 3.
Montrer que si la valeur recherche v est telle que v > x, on peut liminer
une partie ( prciser) de la btire pour poursuivre la recherche. Prciser ce quil est
possible de faire quand v < y.
Question 4.
En dduire un modle de rsolution de type DpR en rduction logarithmique
et donner la procdure associe.

100 - Q 3

100 - Q 4

130
100 - Q 5

100 - Q 6

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Question 5.
tablir lordre de complexit au pire de cette mthode (en termes de nombre
de comparaisons).
Question 6.

## De plus en plus fort

On considre maintenant la recherche dune valeur v dans une btire B de dimension
quelconque (m lignes, n colonnes) en distinguant la valeur z = B[1, n].
100 - Q 7

Question 7.

100 - Q 8

Question 8.

## Pb(m, n) test relatif la valeur z + Pb(m0 , n0 )

en prcisant les valeurs de m0 et n0 .
100 - Q 9

100 - Q 10

Question 9.
crire la procdure rcursive correspondante, qui a pour en-tte procdure 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.
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 problme de la recherche dune valeur donne dans une btire.

100 - Q 11

## On suppose maintenant que la btire B[1 .. m, 1 .. n] contient des entiers

Question 11.
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 ?

## Exercice 101. Nombre dinversions dans une liste de nombres

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 spcification (cest--dire chercher en faire plus que demand initialement) peut
parfois tre la cl de lamlioration recherche.

131

## CHAPITRE 8. DIVISER POUR RGNER

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
T [i]

1
3

2
5

3
2

4
8

5
6

6
4

7
1

8
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
Construire un algorithme itratif naf qui calcule le nombre dinversions dans
Question 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).

101 - Q 1

## On va supposer maintenant que n = 2k , pour k entier suprieur ou gal 1. Pour k > 1,

on peut partitionner les inversions en trois catgories :
celles dont les deux termes sont dans la premire moiti de T , par exemple : (2, 3)
dans lexemple ci-dessus,
celles dont les deux termes sont dans la seconde moiti de T , par exemple : (6, 7),
celles qui ont le premier terme dans la premire moiti de T et le second dans la
seconde moiti, par exemple : (2, 6).
Question 2.
Construire lopration fonction NbInv1(i, s) rsultat 0 .. (n (n + 1))/2 , qui
est telle que lappel NbInv1 (1, n) calcule, selon une approche DpR, le nombre dinversions
prsentes dans le tableau T [1 .. n] (T est une variable globale). Quel est le modle de
division qui sapplique ? Fournir le code de cette fonction. Donner lordre de grandeur de
complexit de cette solution. Que peut-on en conclure par rapport la premire question ?
Question 3.
Pour amliorer lefficacit de la solution, il faut trouver un moyen de ne
pas comparer tous les couples possibles. On propose de renforcer la postcondition, non
seulement en recherchant le nombre dinversions, mais galement en triant le tableau T .
tudions tout dabord le cur de cette solution en considrant un tableau dont chaque
moiti est trie comme dans lexemple suivant :
i
T [i]

1
2

2
3

3
5

4
8

5
1

6
4

7
6

8
7

## a) Montrer que dans une configuration telle que :

1

mil

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 ?

101 - Q 2

101 - Q 3

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 4

101 - Q 5

Question 4.
Construire (en sinspirant de la question prcdente ainsi que de
lexercice 86, page 115, qui porte sur le tri-fusion) lopration de type DpR
procdure NbInv2(i, s; nb : modif ) qui est telle que lappel NbInv2(1, n, nbi) la fois
trie le tableau T [1 .. n] (T est une variable globale) et comptabilise, dans nbi, les inversions prsentes dans la configuration initiale de T [1 .. n]. On cherche amliorer lordre de
grandeur de complexit par rapport la solution de la question 2. Fournir le modle de
division ainsi que le code.
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 doptimiser 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 rectangulaires, 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 projection deux dimensions dun centre-ville compos de trois immeubles, et la partie (b)
donne le skyline correspondant.
4
3
2
1
0

4
3
2
1
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.

133

## CHAPITRE 8. DIVISER POUR RGNER

4
3
2
1
0

4
3
2
1
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

## Une premire approche

Un skyline est reprsent dans cette premire partie par un tableau S[1 .. n], dont la
composante i indique la hauteur du skyline entre les abscisses i 1 et i. Pour lexemple
de la partie (a) de la figure 8.1, page 132, le skyline se reprsente donc par :
i
S[i]

1
0

2
1

3
3

4
1

5
1

6
0

7
2

8
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
I3 [i]

1
0

2
0

3
0

4
0

5
0

6
0

7
2

8
2

## Un algorithme itratif de construction On cherche obtenir le skyline dun ensemble 3 I de

m (m > 0) immeubles (I = {I1 , . . . , Im }).
Question 1.
Construire lalgorithme en supposant que lensemble des immeubles I est
dfini par I 1 .. m (1 .. n N) (I est un tableau de m immeubles ; chaque immeuble
est un tableau de n hauteurs).
Question 2.
Quelle est la complexit exacte en nombre de conditions du calcul du skyline
de I, en fonction de n et m ?

102 - Q 1

102 - Q 2

## Un algorithme DpR Dans la perspective dune amlioration de lefficacit de lalgorithme, on

souhaite appliquer une dmarche DpR pour calculer le skyline de lensemble dimmeubles
I[1 .. m]. Le profil de la procdure correspondante est SkyLine1 (deb, fin; S : modif ), o
lensemble dimmeubles considr est celui reprsent par I[deb .. fin] et o S est le skyline
qui lui correspond.
Question 3.
Construire la procdure SkyLine1. En dduire le modle de division qui
sapplique. Fournir le code de la procdure.
Question 4.
Poser lquation rcurrente qui caractrise la complexit de cette procdure,
sur la base du nombre de conditions values. En dduire la classe de complexit. Conclusion ?
3. Ou dun multiensemble, sil existe des immeubles identiques.

102 - Q 3

102 - Q 4

134

## Une seconde approche

Une voie alternative pour tenter damliorer lefficacit dun algorithme consiste choisir
une meilleure reprsentation pour les entits manipules (ici les immeubles et les skylines).
On peut constater que la reprsentation prcdente est redondante, dans la mesure o
lchantillonnage concerne la totalit des n points. En se basant sur le skyline de la figure
8.2, page 133, redessin de la manire suivante :
4
3
2
1
0

0 1 2 3 4 5 6 7 8

il est possible de redfinir une reprsentation dans laquelle seules les coordonnes de lextrmit 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 cascade 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

102 - Q 8

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 ?
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 ?

135

## Un algorithme DpR Toujours avec la mme reprsentation, on recherche prsent une

solution DpR. Le profil de la procdure est SkyLine2(deb, fin; S : modif ).
Question 9.
Construire la procdure SkyLine2. En dduire le modle de division qui
sapplique. Fournir le code de la procdure.
Question 10.
Donner lquation rcurrente qui caractrise la complexit de cette procdure, sur la base du nombre de conditions values. Conclusion ?

## Cet exercice illustre de faon spectaculaire comment lapplication du principe

DpR peut permettre de rduire la complexit des solutions un problme donn.
Quatre versions sont tudies depuis une version nave, dont la complexit est
exponentielle, jusqu deux versions DpR, de complexits logarithmiques.
Soit la suite de Fibonacci :

F0 = F1 = 1
Fn = Fn1 + Fn2

n > 2.

Le problme que lon tudie dans cet exercice est celui du calcul de Fn pour n quelconque. La solution rcursive triviale, celle dont la structure reflte exactement la dfinition
ci-dessus, est trs inefficace. Ainsi par exemple, le calcul de F6 conduit calculer F5 et
F4 , celui de F5 exige le calcul de F3 et nouveau celui de F4 . Chacun des calculs de F4
conduit au calcul de F3 , etc. On peut remarquer que, en nombre dadditions, ce calcul
dpasse trs vite n, n2 , n3 , etc. On montre que la complexit de cet algorithme est en fait
exponentielle. Une solution plus efficace consiste enregistrer dans un tableau les rsultats
dj connus de faon viter de les recalculer. Ce principe, appel mmosation , fait
partie des techniques appliques en programmation dynamique (voir chapitre 9). Si M,
initialis 0, est le tableau en question, ce principe se dcline de la manire suivante pour
ce qui concerne le calcul dun lment de la suite de Fibonacci :
1. fonction Fibo1(n) rsultat N1 pr
2.
n 0 .. Maxi
3. dbut
4.
si n = 0 ou n = 1 alors
5.
rsultat 1
6.
sinon
7.
si M[n] = 0 alors
8.
M[n] Fibo1(n 1) + Fibo1(n 2)
9.
fin si ;
10.
rsultat M[n]
11.
fin si
12. fin
Ainsi que le montre le contexte dappel suivant, le tableau M doit tre initialis 0 avant
le premier appel Fibo1 :

102 - Q 9

102 - Q 10

136

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

1.
2.
3.
4.
5.
6.
7.
8.

constantes
Maxi N1 et Maxi = . . . et n 0 .. Maxi et n = . . .
variables
M (2 .. Maxi) N
dbut
M (2 .. Maxi) {0} ;
crire(Fibo1(n))
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 :
V1 =

  
F0
1
=
F1
1

Vn = F Vn1
103 - Q 2

103 - Q 3

103 - Q 4

103 - Q 5

n > 1.

Question 2.
Montrer que la solution de lquation de rcurrence correspondante peut
scrire Vn = Fn1 V1 .
Question 3.
En supposant disponible la fonction de profil ProduitMatrice(A, B) (A et
B sont des matrices carres (2 2)) qui dlivre la matrice A B, construire, selon une
dmarche DpR, une fonction de profil PuissanceMatrice(M, n), qui dlivre la matrice Mn
pour tout n N1 . En dduire la procdure
u, v : modif ) qui, pour n N1 donn,
 FiboV(n;

u
dlivre les valeurs u et v telles que Vn =
.
v
Question 4.
Montrer comment la procdure FiboV peut tre utilise pour dfinir la fonction Fibo2(n) qui dlivre Fn , pour n N. En prenant la multiplication de matrices (2 2)
comme opration lmentaire, fournir lquation de rcurrence de la complexit de cette
fonction lorsque n est de la forme 2k . Conclusion ?
Question 5.
Donner un minorant et un majorant (en explicitant les cas o ils sont atteints) de la complexit exacte de la fonction PuissanceMatrice en termes de nombre de
multiplications de matrices (2 2). Comment ces valeurs se traduisent-elles en nombre
dadditions et de multiplications ?

## CHAPITRE 8. DIVISER POUR RGNER

137

Question 6.
Montrer travers un contre-exemple que lalgorithme PuissanceMatrice
dlvation la puissance n nest pas systmatiquement optimal. Pour ce faire, dvelopper
le calcul de Fibo2(15).

103 - Q 6

## Une seconde solution de type DpR

Cette solution se fonde galement sur une transformation de la suite Fn en une suite
vectorielle. Cependant, cette fois, cette suite nest pas linaire.
Question 7.

103 - Q 7

## p (p N1 n (n N1 Fn+p = Fn Fp + Fn1 Fp1 )).

Question 8.
Appliquer la formule prcdente pour p = n, p = n 1 et p = n + 1, afin
den dduire F2n , F2n1 et F2n+1 en fonction de Fn et de Fn1 .


F
Question 9.
En notant Wn le vecteur n1 , en dduire que W2n et W2n+1 se calculent
Fn
en fonction de Fn et de Fn1 .
On recherche une procdure FiboW(n; u, v : modif ) de type DpR qui, pour
 
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.

Question 10.

Question 11.
Donner et rsoudre lquation de rcurrence de la complexit de la procdure FiboW sur la base du nombre dappels rcursifs raliss. Comparer les deux solutions.

## 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 frquemment exploit lheuristique prouve qui consiste renforcer la postcondition
afin dobtenir une bonne efficacit temporelle ; ici au contraire, on affaiblit la postcondition. 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.

103 - Q 8

103 - Q 9

103 - Q 10

103 - Q 11

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).

## Un algorithme DpR en (n log2 (n))

Pour T [1 .. n], on va calculer le couple (x, nbx) tel que :
si T [1 .. n] nest pas majoritaire, on renvoie le couple (0, 0),
si T [1 .. n] est majoritaire, on renvoie (x, nbx), o x est llment majoritaire et nbx
sa multiplicit.
On applique une technique DpR travaillant sur deux moitis de T [1 .. n] de tailles
gales ou diffrant de 1. Le couple (x, nbx) est alors calcul partir de (xg, nbxg) (issu de
la moiti gauche de T ) et de (xd, nbxd) (issu de la moiti droite de T ), en dnombrant si
ncessaire la valeur majoritaire dune certaine moiti dans la moiti oppose.
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
2, 1

2
3
4
5
6
7
8
9
10
11
12
13
1
1
3
1
2
3
1
1
1
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)

## Dans le cas gnral dun tableau T [d .. f] de longueur t (t = f d + 1), on va considrer

deux demi-tableaux contigus, T [d .. d + bt/2c 1] pour lequel on calcule (xg, nbxg), et
T [d + bt/2c .. d + t 1] pour lequel on calcule (xd, nbxd).
104 - Q 1

Question 1.
Construire, par un raisonnement de type induction de partition (voir section ??, page ??), lopration procdure Majoritaire1(d, t; x, nbx : modif ) o d et t
identifient le sous-tableau T [d .. d + t 1] et (x, nbx) est le couple recherch. Lappel
Majoritaire1(1, n, em, nbem) calcule donc le couple (em, nbem) pour le tableau T [1 .. n].
Donner le modle de division utilis, puis le code la la procdure.

## CHAPITRE 8. DIVISER POUR RGNER

139

Question 2.
Quelle est la classe de complexit au pire de cette solution ? Comparer avec
la solution itrative de lexercice 40, page 32.

104 - Q 2

## Un algorithme DpR plus efficace (linaire)

La thorie (voir section ??, page ??) nous apprend que si X et Y sont des programmes
corrects pour les spcifications respectives (P, R) et (R, Q) alors X ;Y est un programme
correct pour la spcification (P, Q). Une utilisation particulirement intressante de cette
proprit de la squentialit apparat lorsque R est un prdicat plus faible que Q (Q
R). Appliqu notre situation, plutt que de rechercher directement lventuel lment
majoritaire, cette proprit permet de rechercher simplement un candidat ( tre lment
majoritaire). Cest le rle de X. Si le rsultat savre satisfaisant pour ce qui concerne la
complexit, il reste alors construire le fragment Y qui vrifie si ce candidat est (ou non)
llment majoritaire du tableau T .
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].
Question 3.
On cherche construire la procdure CandMaj1(d, t; x, mx : modif ) qui calcule un couple (x, mx) pour la tranche T [d .. d + t 1]. Ce couple (x, mx) possde la
signification suivante :
a) si lon est certain, au vu de la situation courante, que le sous-tableau considr nest
pas majoritaire, alors la procdure dlivre (0, 0),
b) sinon (on a obligatoirement un CM) la procdure dlivre le couple (x, mx) comme CM.

104 - Q 3

140

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Construire cette procdure par un raisonnement de type induction de partition (voir section ??, page ??). Donner le modle de division utilis ainsi que le code de la procdure
CandMaj1. Quelle est sa complexit ?
104 - Q 4

104 - Q 5

Question 4.
Quel traitement complmentaire doit-on faire pour obtenir le rsultat attendu (la valeur de llment majoritaire sil en existe un) ? Quelle est alors la complexit
du traitement global ?
Question 5.
Appliquer la solution propose aux tableaux suivants :
T 1 = [1, 2, 1, 3, 2, 1, 1, 3, 3, 2, 3, 1, 1, 1], T 2 = [2, 1, 1, 3, 1, 2, 3, 1, 1, 1, 1, 2, 1]
T 3 = [1, 1, 2, 1, 3, 1, 3, 2, 2].

et

## Une seconde solution DpR linaire, simple et originale

On va maintenant mettre en vidence un algorithme de complexit linaire applicable
un tableau T de taille quelconque, fond sur un autre type de division de T . Cet algorithme
vise lui aussi dterminer un CM pour le tableau T ; il est construit partir de la seule
proprit 10 suivante :
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 6
104 - Q 7

104 - Q 8

Question 6.

## Dmontrer la proprit 10.

Question 7.
Donner le principe dune solution de type DpR fonde sur la proprit cidessus. Donner le modle de division utilis, le(s) problme(s) lmentaire(s) et la complexit globale.
Question 8.
crire
la
fonction
CandMaj2
correspondante
de
profil
CandMaj2(d, t) rsultat N rendant 0, si T [d .. d + t 1] na coup sr pas dlment
majoritaire et x (x > 0) si x est CM de T [d .. d + t 1]. Traiter les exemples :
T 1 = [1, 2, 1, 3, 2, 1, 1, 3, 3, 2, 3, 1, 1, 1],
T 2 = [2, 1, 1, 3, 1, 2, 3, 1, 1, 1, 1, 2, 1],

T 3 = [1, 1, 2, 1, 3, 1, 3, 2, 2],
T 4 = [1, 2, 1, 1, 2, 3].

Exercice 105. Les deux points les plus proches dans un plan

## Cet exercice illustre deux points essentiels du dveloppement dalgorithmes : le

raffinement et le renforcement. Partant dune spcification ensembliste, on effectue tout dabord un choix pour la reprsentation des ensembles. Une solution
nave pour ce raffinement ne donnant pas satisfaction du point de vue de la complexit, on renforce la postcondition dune tape de lalgorithme afin dobtenir
une solution en (n log2 (n)).

141

## On cherche un algorithme du type DpR pour rsoudre le problme suivant : on dispose

dun ensemble fini E de n (n > 2) points dans un plan. Quelle est la distance qui spare
les deux points les plus proches 4 ?
Plus formellement : soit lespace R2 , muni de la mtrique euclidienne note . Soit E un
ensemble fini de n points dans R2 . Soit p = (px , py ) et q = (qx , p
qy ) deux points de R2 . On
note (p, q) la distance euclidienne entre p et q, soit (p, q) = (px qx )2 + (py qy )2 .
On recherche le rel positif d dfini par
d = min ({a E et b E et a 6= b | (a, b)})
Exemple

## d est la valeur recherche.

En considrant le nombre de conditions values, quel est lordre de comQuestion 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
3.
(S1 S2 ) = et (S1 S2 ) = S et card(S1 ) = card(S2 ) et
4.
d R+ et d1 R+ et d2 R+
5. dbut
6.
si card(S) = 2 alors
7.
soit a, b tel que
8.
a S et b S et a 6= b
4. Il ny a jamais unicit de ce couple de points puisque si (a, b) est un tel couple, cest aussi le cas
de (b, a). La question de lidentification de lensemble de tels couples conduit un amnagement
trivial des programmes dvelopps ci-dessous. Cette question nest pas aborde.

105 - Q 1

142

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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

105 - Q 3

Question 2.
Donner les cinq points cls de la construction inductive de la fonction PlusProches1 (il sagit ici de faire du reverse engineering ).
Question 3.
Quel est lordre de complexit de la fonction PlusProches1 si la procdure
Rassembler1 est en (n2 ) ? en (n log2 (n)) ? en (n) ?
On cherche prsent raffiner la reprsentation des ensembles S, S1 et S2 . Il existe en
gnral de nombreuses faons de partitionner un ensemble S de taille paire en deux sousensembles de mme taille. Il est intressant, pour des raisons de calcul de distances, de
raliser cette partition par une droite sparatrice. Le choix dune droite qui soit verticale
ou horizontale est raisonnable dans la mesure o la distance entre un point et la droite en
question se limite alors un calcul sur une seule des coordonnes du point. Dans la suite,
on considre arbitrairement que cette droite se prsente verticalement. Le raffinement de
lensemble S peut alors se faire par un tableau de couples T [i .. s] (T [1 .. n] pour lensemble
initial E, de sorte que, si Coord est lensemble des couples (x, y) de rels, T [1 .. n]
1 .. n Coord), tri sur les abscisses croissantes (ceci assure que la proximit des points
avec la droite sparatrice se traduit par une proximit dans le tableau). Si mil = b(i+s)/2c,
les ensembles S1 et S2 se raffinent par les sous-tableaux T [i .. mil] et T [mil + 1 .. s]. d1
et d2 sont raffins par dg et dd (distances gauche et droite). Le point T [mil] appartient
la droite sparatrice. Cest aussi le cas de tous les points qui ont la mme abscisse que
T [mil], quils appartiennent S1 ou S2 . la fonction PlusProches1 se raffine alors de la
manire suivante (T est ici une structure globale, seules les bornes i et s sont passes en
paramtres) :
1. fonction PlusProches2(i, s) rsultat R+ pr

2.
i 1 .. n et s i + 1 .. n et k k N1 et s i + 1 = 2k et
3.
EstTriX(T [i .. s]) et mil i .. s 1 et d R+ et dg R+ et dg R+
4. dbut
5.
si s i + 1 = 2 alors
6.
rsultat (T [i], T [s])
7.
sinon


i+s
8.
mil
;
2
9.
dg PlusProches2(i, mil) ;
10.
dd PlusProches2(mil + 1, s) ;

143

## CHAPITRE 8. DIVISER POUR RGNER

11.
d min({dg, dd}) ;
12.
Rassembler2(. . .) ;
13.
rsultat . . .
14.
fin si
15. fin
Le conjoint EstTriX(T [i..s]) exprime que le (sous-)tableau T [i..s] est tri sur les abscisses
croissantes.
Exemple Le schma ci-dessous reprend lexemple prcdent. On remarque que le point
T [mil] est situ sur la droite sparatrice et que sept points sont sa gauche et huit sa
droite.

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
contient au plus quatre points :
Bg

Bd

105 - Q 4

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

105 - Q 6

105 - Q 7

105 - Q 8

Question 5.
Dans lhypothse o les points appartenant aux bandes Bg et Bd sont enregistrs 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.
Question 6.
Construire une version itrative de lopration procdure Rassembler2 (deb, fin; md : modif ) , o deb et fin sont tels que T [deb..fin] reprsente lensemble
de points S, et o md est, en entre, la meilleure valeur trouve dans S1 ou dans S2 et,
en sortie, la meilleure valeur trouve dans S. Cette procdure commence par construire
le tableau Y de la question prcdente avant de lexploiter pour rechercher un ventuel
meilleur couple. Quelle est lordre de grandeur de complexit de cette procdure ? Expliciter le modle de division de la solution utilisant PlusProches2. Quelle est sa complexit ?
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 efficacit, 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 ?
Question 8.

## La comprhension de lnonc de cet exercice exige davoir assimil au pralable

lintroduction au chapitre portant sur la programmation dynamique (voir chapitre 9). Celle-ci porte sur un algorithme de recherche de lune des plus longues
sous-squences communes (en gnral il ny a pas unicit), dnomm WFlg et
sur un algorithme de recherche de la longueur des plus longues sous-squences
communes ( WFLgAvant).

## CHAPITRE 8. DIVISER POUR RGNER

145

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 proclam 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 thorme doptimalit qui montre, sil en tait besoin, quil est souvent ncessaire de disposer
dun bagage minimal en mathmatiques discrtes pour tre mme de construire mthodiquement 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 soussquence 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}.
Exemple Considrons lalphabet et les deux chanes u = attentat et v = tante. La chane
teta est une sous-squence de u. La chane tnte est une sous-squence de v mais nest pas
une sous-squence de u (les symboles ne sy rencontrent pas dans le mme ordre). Les
chanes , tt, at et tnt sont des sous-squences communes u et v ; elles appartiennent
donc SSC(u, v). On a ici PLSSC(u, v) = {ant, ate, tat, tnt, tte}.
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)).
Le principe gnral la base de lalgorithme dHirschberg pour la recherche dun lment
de lensemble PLSSC(x, y) consiste diviser x en deux sous-chanes et, pour chaque partie
x1 et x2 , rechercher un prfixe y1 et un suffixe y2 de y (avec y1 y2 = y), tels que si
c1 PLSSC(x1 , y1 ) et c2 PLSSC(x2 , y2 ) alors
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 rpertorie 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
tant
tan
ta
t

{ate, tte}
{at, tt}
{a, t}
{a, t}
{t}
{}

3
2
1
1
1
0

{}
{}
{t}
{nt}
{at, nt}
{tat}

0
0
1
2
2
3

{ate, tte}
{at, tt}
{at, tt}
{ant, tnt}
{tat, tnt}
{tat}

3
2
2
3
3
3

e
te
nte
ante
tante

## Tab. 8.1 Sous-squences communes et plus longues sous-squences communes. La

colonne (1) (resp. (2) et (3)) reprsente PLSSC(u1 , v1 ) (resp. PLSSC(u2 , v2 ) et lg1 () +
lg2 ()).
Dtaillons prsent cette partie de lalgorithme dHirschberg. Rappelons tout dabord
que lalgorithme de programmation dynamique WFlg mentionn dans lintroduction fournit, dans un tableau de m colonnes et de n lignes et pour chaque prfixe x0 de x et y0
de y, la longueur des plssc x0 et y0 (voir schma (a) de la figure 8.3, page 147). En
particulier, la dernire colonne fournit la longueur de la plssc de x et de tous les prfixes
y0 de y ; le coin nord-est (gris sur le schma) est la longueur de la plssc de x et de y. On
peut en dduire que chaque ligne et chaque colonne du tableau sont tries (au sens large)
par ordre croissant (le tableau est une btire, voir exercice 100, page 129). Dans la suite,
la colonne de la position j est note Pj et se dfinit par :
Pj [i] = lg(PLSSC(x[1 .. j], y[1 .. i])) pour i 0 .. n.
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 :
Pj [i] = lg(PLSSC(x[j .. m], y[n i + 1 .. n])) pour i 0 .. n.
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

147

x
1

x[1]

y[n]

x[m]
y[n]

n
y

P
y

P
1

y[1]
x[1]

y[1]

x[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

[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 consacr la programmation dynamique, page ??, fournit une solution puisquelle montre quil
est possible de linariser lalgorithme WFlg de faon obtenir une version (dnomme 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
n

y2
y

y1

Pj+1
0

..
.

..
.

n
0
x1

Pj

x1
(a)

(b)

(c)

## Fig. 8.4 Principe de lalgorithme dHirschberg

Exemple Dans lexemple de la figure 8.5, page 149, les colonnes grises fournissent 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.
106 - Q 1

Question 1.
On a vu ci-dessus que lon a besoin de lopration procdure
WFLgArrire(x, y; Q : modif ) , qui fournit, dans le vecteur Q, la longueur des plus longues
sous-squences communes x[1 .. m] et y[i + 1 .. n], pour i 0 .. n. Amnager le code de
la procdure WFLgAvant (voir section ?? page ??) de faon obtenir celui de la procdure
WFLgArrire. Que peut-on dire des complexits temporelle et spatiale de cet algorithme ?
Le dveloppement ralis ci-dessus se formalise par le thorme suivant :
Thorme (doptimalit dHirschberg) :
Si


## Mj = max Pj [i] + Pj+1

[n i]
i0..n

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 2

106 - Q 3

106 - Q 4

106 - Q 5

Question 2.
Calculer la valeur de M5 pour u = esclandre et v = scandale. Pour quel
unique indice k de P5 cette valeur est-elle atteinte ? Rechercher la main les ensembles PLSSC(u[1 .. 5], v[1 .. k]) et PLSSC(u[6 .. 9], v[k + 1 .. 8]). En dduire lensemble
PLSSC(u, v).

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 ?

Question 4.
Dmontrer le thorme doptimalit dHirschberg. Suggestion : dmontrer
dune part que Mj 6 Pm [n] et dautre part que Mj > Pm [n].
Dcrire le raisonnement DpR qui permet de construire lopration
Question 5.
procdure HirschPLSSC(x, y; c : modif ) qui, condition que le paramtre effectif
dentre-sortie correspondant c soit pralablement initialis la chane vide, dlivre
dans ce paramtre lune quelconque des chanes de lensemble PLSSC(x, y). Quel est
le modle de division qui sapplique ? Sachant que lon vise une complexit spatiale en
O(min({m, n})), fournir le code cette opration. Que peut-on dire de la complexit temporelle de cet algorithme ? Pour simplifier les calculs, on peut se limiter au cas o m est
une puissance de 2.
On sintresse prsent lamnagement de lalgorithme dHirschberg afin dobtenir non
plus une chane mais une trace. Cette notion est dfinie dans lexercice 137, page 224. On se
limite ici la prsentation dun exemple. Considrons nouveau les chanes u = attentat
et v = tante. Une trace possible entre u et v est fournie par :

149

0
P0

5
4
3
2
1
0

1
P1

2
P2

3
P3

4
P4

4
P5

3
P6

2
P7

1
P8

0
P9

0
0
1
2
2
3

0
0
1
1
2
3

0
0
1
1
2
2

0
0
1
1
1
1

0
0
0
0
0
0

e
t
n
a
t

0
0
0
0
0
0

1
1
1
1
0
0

P0
0

P1
1

P2
2

P3
3

P4
4

P5
5

P6
6

P7
7

P8
8

2
2
1
1
1
0

2
2
1
1
1
0

3
2
1
1
1
0

e
t
n
a
t

u
0
1
2
3
4
5

P9

## Fig. 8.5 Appels de WFLgAvant et WFLgArrire. Les deux vecteurs P4 et P5 se lisent

en sens inverse, de bas en haut pour P4 , de haut en bas pour P5 .

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 soussquence 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 calculer 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

sx

ix

sx

ix
sy

sy

q
iy

iy

q
mil

mil

(a) q = iy 1

## (b) x[mil] = y[q]

ix

sx
sy

q
iy
mil
(c) x[mil] 6= y[q]
Fig. 8.6 Calcul de la trace les trois cas considrer
(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).

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

(a)

(b)

M2

(c)

Fig. 8.7 (a) Lensemble de points E (b) Lenveloppe convexe de E (c) Lenveloppe
oriente de E

De nombreux algorithmes existent pour rsoudre ce problme. On sintresse un algorithme DpR particulier connu sous le nom de fusion des enveloppes . Dans cet algorithme, la principale difficult rside dans la partie rassemblement de lalgorithme DpR.
Obtenir un algorithme de rassemblement efficace (en O(n) si on souhaite une solution en
O(n log2 (n))) exige de disposer dune structure de donnes bien adapte.

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 sousensemble 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).

## Dfinitions Notations Structure de donnes Proprits

On prsente ici plusieurs notions ncessaires la comprhension et la mise en uvre
de la solution. Plutt que de considrer une enveloppe convexe P comme un ensemble de
segments, on dcide de reprsenter P comme une succession de vecteurs, ce qui dote P
dune orientation. Dans la suite, on choisit lorientation directe (cest--dire selon le sens
trigonomtrique), comme dans la partie (c) de la figure 8.7 page 151.
Une enveloppe convexe en tant que telle ne prsente que peu dintrt si lon ne dispose
pas (dau moins) un sommet par lequel y accder.
Dfinition et notation 1 (Enveloppe convexe cl) :
Soit P une enveloppe convexe oriente. Si M est un sommet de cette enveloppe, on note
c le couple (P, M). M est la cl (dentre) de lenveloppe P.
M
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,
d deux enveloppes cl de la mme enveloppe convexe. Dans la suite, le contexte
M1
permet de dterminer sil est question dune enveloppe simple ou dune enveloppe cl.
La structure de donnes Le raffinement de la structure de donnes enveloppe peut par
exemple se faire en utilisant une liste doublement chane. Lidentificateur EnvConv dnote
lensemble des enveloppes convexes cl possibles. Les oprations suivantes sont supposes
dfinies sur cette structure de donnes :
c
fonction CrerEnvConv1 (M) rsultat EnvConv : fonction qui cre lenveloppe M
partir dun ensemble constitu du seul point M.
d
fonction CrerEnvConv2 (M1, M2) rsultat EnvConv : fonction qui cre lenveloppe M1
partir dun ensemble constitu des deux seuls points M1 et M2.
c rsultat point : fonction qui dlivre le point qui suit M dans lenve fonction Succ(M)
c
loppe M.
c rsultat point : fonction qui dlivre le point qui prcde M dans
fonction Pred(M)
c
lenveloppe M.
d
d
c c
fonction Fusion(GDN , GDS ) rsultat EnvConv : si GDN = (G
N , DN ) et GDS = (GS , DS ),
cette fonction fusionne les deux enveloppes afin den former une troisime, selon le
principe illustr par la figure 8.8, page 153.
Cette opration exige comme prconditions i) que les deux enveloppes soient situes

de part et dautre dune ligne verticale, ii) que la ligne support du vecteur DN GN

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.

153

GN

GN

DN

DN

GS

DS

(a)

GS

DS

(b)

## Fig. 8.8 (a) Avant la fusion (b) Aprs la fusion

(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}.
Dfinition 12 (Dterminant 
de 
deux vecteurs)
 0:
x
x
Soit deux vecteurs ~v =
et v~0 =
du plan orient. Le dterminant de ~v et de
y
y0
v~0 , not det(~v, v~0 ) se dfinit par le scalaire x y0 x0 y. Si ce dterminant est positif,
langle que font les deux vecteurs a la mme orientation que celle du plan, sil est nul,
les deux vecteurs sont colinaires, sil est ngatif langle a une orientation oppose
celle du plan.
La figure 8.9 fournit une illustration de cette dfinition.

0
v

0 M
v

det(
v , v0 ) = 0

0
v

det(
v , v0 ) > 0

det(
v , v0 ) < 0

## Fig. 8.9 Signe du dterminant de deux vecteurs

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

C
M

D
(a)

D
(b)

## Fig. 8.10 Visibilit. Schma (a) : BC et

0 et det(MC, MD) < 0 Schma (b) :

det(MA, MB) > 0 et det(MD, ME) > 0

CD sont visibles depuis M. det(MB, MC) <

## Dfinition 13 (Pont entre deux enveloppes) :

Soit deux enveloppes G et D situes de part et dautre dune droite verticale. Un pont
entre G et D est un segment joignant un sommet de G et un sommet de D, dont tous
les points ( lexception des extrmits) sont extrieurs G et D.
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

155

H
K

(a)

(b)

H
K

## b et bI (b) Intersection entre une verticale

Fig. 8.11 (a) Ensemble des ponts entre D
et les ponts

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 ?
On cherche prsent construire une version itrative de lopration foncQuestion 2.
b i) rsultat EnvConv EnvConv qui, partir de deux enveloppes
tion TangenteSup(b
g, d,
b
b et d (spares verticalement) et de lindice i dsignant dans T le point le plus gauche
g
b dlivre le couple (L,
b R)
b tel que le segment LR est la tangente suprieure de g
b
b et de d.
de d,
Que peut-on dire de la complexit de cette fonction en nombre de conditions values ?
Question 3.
On suppose disponible lopration fonction Coupure(bi, bs) rsultat N1
telle que si m est le rsultat dlivr, T [bi .. m 1] et T [m .. bs] sont les deux ensembles de
points partir desquels se font les recherches denveloppes gauche et droite. Quel est le
modle de division qui sapplique ? Fournir le code de lopration fonction EnveloppeConvexe(bi, bs) rsultat EnvConv , qui dlivre lenveloppe convexe des points de T [bi .. bs] en
employant la mthode DpR dcrite ci-dessus. Que peut-on dire de la complexit de cette
solution, en termes de conditions values, par rapport n ?
Question 4.
Bien que nintervenant pas sur la complexit, les appels la fonction Recherche 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 ingnieuse que la simple division par deux pratique en gnral. Le bnfice en retour
est une meilleure efficacit.

107 - Q 2

107 - Q 3

107 - Q 4

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 soussquence 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),
a
a
a
a
b
b
b
b
c
c
c
c
cbba ba cbba cb ac bac et que y nest pas une sous-squence de x.

puisque x =

108 - Q 1

Question 1.

## 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 2
108 - Q 3

Question 2.

## Montrer que Maxi(x, y) 0 .. bn/mc.

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.
Le paradigme DpR, appliqu diffremment, permettrait-il damliorer le rsultat prcdent ? Ci-dessus, DpR a t appliqu sur un intervalle dentiers. Existe-t-il une alternative
ce choix ? On peut penser appliquer DpR sur la squence x. Cependant le lecteur
pourra le vrifier couper x par le milieu est une tentative vaine sagissant de la recherche
dune meilleure complexit.
Il existe un autre problme, trait ci-aprs : le calcul de la transforme de Fourier discrte
rapide (voir exercice 109, page 158), dans lequel lclatement se fait non pas en coupant
par le milieu mais en ventilant les lments selon la parit de leurs indices. Le principe
que lon applique ici sapparente celui-ci, les lments de x tant ventils selon la parit
des indices de chaque lment de lalphabet . Lexemple suivant illustre ce principe (les
symboles sont indics pour faciliter la lecture) :
x = c1 b1 b2 a1 b3 a2 a3 c2 b4 b5 a4 b6 b7 c3 b8 b9 a5 c4 c5 c6 b10 a6 c7
Impair(x) = c1 b1 a1 b3 a3 b5 b7 c3 b9 a5 c5 c7
Pair(x) = b2 a2 c2 b4 a4 b6 b8 c4 c6 b10 a6
Il serait alors possible, en dmontrant au pralable que :

Maxi(Impair(x), y) + Maxi(Pair(x), y) 1

Maxi(x, y) ..
Maxi(Impair(x), y) + Maxi(Pair(x), y) + 1

## CHAPITRE 8. DIVISER POUR RGNER

157

de dvelopper une solution DpR. Celle-ci prsenterait cependant linconvnient de ncessiter un double appel rcursif (sur Impair(x) et sur Pair(x)) qui, daprs le corollaire du
thorme matre et son cas particulier ??, page ??, conduirait une solution en n log2 (n),
comparable la solution dichotomique prcdente du point de vue de la complexit. Dans
la suite, on cherche viter ce double appel rcursif.
Question 4.
Fournir le principe de lalgorithme de la fonction Impair(x) et montrer que
sa complexit est en (n).
Question 5.
On veut montrer que Maxi(x, y) varie sur un certain intervalle et que toutes
les valeurs de cet intervalle peuvent tre atteintes.
On prsente au pralable, travers un exemple, la notion S(x, y) de segmentation de x par
rapport y et de segmentation induite (par S(x, y)) de Impair(x) par rapport y. On pose
X = Maxi(x, y) et I = Maxi(Impair(x), y). Pour x = a1 b1 a2 a3 a4 a5 a6 b2 c1 c2 a7 c3 c4 c5 c6 c7
et y = bac, S(x, y) est constitu de trois segments puisquil y a trois symboles dans y. On
a par exemple :
S(x, y) = 1 , 2 , 3
1

}|
{ 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 }
|
1a
5c
2b
X = min({2, 1, 5})

y0 = bbaccccc,

## y0 est la sous-squence de x apparaissant en gras. Il ny a pas unicit de la segmentation.

En effet, en reprenant lexemple ci-dessus, on a galement :
S(x, y) = 1 , 2 , 3
1

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 }
6a
5c
1b
y0 = baaaaaaccccc,

X = min({1, 6, 5})

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 }|2 { z }|3 {
x = k a1b1 a2 a3 a4 a5 a6b2 k c1 c2a7 k c3 c4 c5 c6 c7 k
z

S(Impair(x), y) = 01 , 02 , 03
z

01

}|

2
3
{ z}|{
z }| {
b
a
c
Impair(x) = k a1 1 a3 a5 k c1 7 k 3 c5 c7 k

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
Maxi(x, y) (2 Maxi(Impair(x), y) 1) .. (2 Maxi(Impair(x), y) + 1)
et que les trois valeurs de lintervalle peuvent tre atteintes par Maxi(x, y).

108 - Q 4

108 - Q 5

158
108 - Q 6

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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 lalgorithme. 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 superlatifs. Utile, il lest sans aucun doute au plus haut point. Il suffit pour sen
convaincre dnumrer quelques-unes de ses applications : reconnaissance de parole, 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 calculateurs 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 citation 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.

## Dfinition de la transforme de Fourier discrte

Une transforme de Fourier discrte est une transformation linaire de Cn dans Cn
dfinie de la manire suivante. Soit x un vecteur de nombres complexes dfini sur lintervalle
0 .. n 1. Pour tout entier k, k 0 .. n 1, la valeur X[k] de la transforme de Fourier
discrte du vecteur x se dfinit par :
X[k]

n1
X

x[j] e

2i jk
n

(8.3)

j=0

## o e est la base du logarithme naturel et i le nombre complexe tel que i2 = 1.

109 - Q 1

Question 1.
partir de cette dfinition, construire un algorithme qui calcule la transforme de Fourier discrte X dun vecteur x de n nombres complexes. Quelle est sa complexit
en nombre dexponentiations et en nombre de multiplications ?

## Proprits des racines ne de lunit Rappels

On cherche prsent amliorer lefficacit de la solution prcdente par une approche
DpR. Pour ce faire, on va exploiter les proprits des racines ne complexes de lunit.

159

## CHAPITRE 8. DIVISER POUR RGNER

Dans la suite, par hypothse, n est toujours une puissance de 2. Une racine ne complexe
e
de lunit est un nombre complexe wn tel que wn
n = 1. Il existe n racines n de lunit qui
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

## Fig. 8.12 Racines ne de lunit dans le plan complexe, pour n = 8

(non dmontres)

Proprits

1. Pour tout n > 0 pair, la puissance (n/2)e de toute racine ne de lunit est gale
1 :
n
wn2 = 1 (n > 0 pair).
(8.4)
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 :
(Wnk )2 = W kn
2

(8.5)

## Transforme de Fourier discrte rapide (DFT)

Le principe du calcul rapide de la Transforme de Fourier Discrte par lalgorithme DFT
(Discrete Fourier Transform) sappuie sur les proprits des carrs des racines de lunit.
Lapplication la plus directe du principe DpR consisterait couper le vecteur x en son
milieu :
X[k]
dfinition 8.3 et dfinition de Wn

=
n1
X

x[j] Wnjk

j=0

=
n 1
2

X
j=0

x[j] Wnjk +

n1
X
j= n
2

x[j] Wnjk .

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 :


xp = x[0], x[2], , x[2p], , x[n 2] ,
(8.6)


xi = x[1], x[3], , x[2p + 1], , x[n 1] .
(8.7)
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
2

xp [j] e

2i
n jk
2

j=0

dfinition de Wn (Wn = e

2i
n

) et substitution

n 1
2

(8.8)

xp [j] W jk
n .
2

j=0

Pour les indices impairs et toujours pour k 0..n/2 1, nous avons une formule similaire :
n 1
2

Xi [k] =

xi [j] W jk
n .
2

(8.9)

j=0

## La dfinition de la transforme de Fourier pour k 0..n1 donne lieu au dveloppement

suivant :
X[k]
dfinition 8.3

=
n1
X

x[j] e

2i
n jk

j=0

dfinition de Wn (Wn = e

=
n1
X

2i
n

x[j] Wnjk

j=0

## sparation entre indices pairs et impairs

=
n 1
2

n 1
2

x[2j] Wn2jk +

j=0

j=0

n 1
2

n 1
2

x[2j + 1] Wn(2j+1)k
dfinitions 8.6 et 8.7

=
X
j=0

xp [j] Wn2jk +

xi [j] Wn(2j+1)k

j=0

=
n 1
2

X
j=0

n 1
2

X
j=0

xi [j] (Wnjk )2

161

## CHAPITRE 8. DIVISER POUR RGNER

proprit 8.5

=
n 1
2

n 1
2

k
xp [j] W jk
n + Wn

j=0

(8.10)

xi [j] W jk
n .
2

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
2

n 1
2

jk

Wnk

xp [j] W n +
2

xi [j] W jk
n
2

j=0

j=0

## formules 8.8 et 8.9, page 160, pour k 0 ..

=
Xp [k] + Wnk Xi [k],

n
1
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
2

xp [j]

2(k+ n )j
Wn 2

k+ n
Wn 2

n 1
2

j=0

2(k+ n
2 )j

xi [j] Wn

j=0

k+ n
2

proprit 8.4 : Wn

=
n 1
2

2(k+ n
2 )j

xp [j] Wn

n 1
2

Wnk

j=0

2(k+ n
2 )j

xi [j] Wn

j=0
2(k+ n
2 )j

dfinition de Wnn : Wn

n 1
2

n 1
2

xp [j]

(Wnkj )2

Wnk

j=0

xi [j] (Wnkj )2

j=0

proprit 8.5

=
n 1
2

n 1
2

k
xp [j] W kj
n Wn

j=0

xi [j] W kj
n
2

j=0

## formules 8.8 et 8.9, page 160, pour k 0 ..

=
Xp [k] Wnk Xi [k].

n
1
2

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 :
X[k]
h
ni
X k+
2
et ceci pour k 0 .. n/2 1.

162
109 - Q 2

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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 systmatiquement une solution plus efficace quune solution itrative. Mais son principal
intrt rside dans une application remarquable de la transforme de Fourier rapide (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

12x

15

2x
6x4

9x3

6x4

0x2

+
6

4x6

4x

6x5

6x

0x

8x

10x

x3 + 10x2 + 12x + 15
Pn1
Pm1
k
k
Plus gnralement, si A(x) se dfinit par
k=0 ak x et B(x) par
k=0 bk x , le
polynme C(x), produit de A(x) et de B(x), se dfinit par :
C(x) =

m+n2
X
k=0

ck xk

avec

ck =

ai bj .

(8.11)

i+j=k
i0..n1
j0..m1

Une solution nave pour calculer les coefficients ck de C(x) consiste utiliser les formules 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 diffrents 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

163

## code sous la forme de lopration fonction MultPolyn4(A, B) rsultat polyn

ome . Quelle
est alors la complexit de cette solution ? Conclusion ?
Question 2.
partir de la solution prcdente, en conservant les mmes hypothses et
en utilisant lidentit :

110 - Q 2

a d + b c = (a + b)(c + d) (a c) (b d),
trouver une variante qui rduise la complexit.
Que faire quand les coefficients peuvent tre nuls et quand n et m sont
Question 3.
quelconques ? Lefficacit de la variante prcdente est-elle conserve ?
Question 4.
(Pour aborder cette question il est ncessaire davoir au pralable rpondu
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.
Exemple Considrons les deux polynmes D(x) = 2x + 1 et E(x) = x + 2, leurs reprsentations par coefficients sont [2, 1] pour D(x) et [1, 2] pour E(x). La reprsentation par
chantillons passe tout dabord par le choix des n abscisses diffrentes. Prenons x0 = 0 et
x1 = 1. D(x) est alors reprsent par [(0, D(0)), (1, D(1))], soit encore [(0, 1), (1, 3)], tandis
que E(x) est reprsent par [(0, 2), (1, 3)].
Cette reprsentation possde lavantage de faciliter certaines oprations, cest notamment
le cas du produit, puisquil suffit alors de multiplier les diffrentes valeurs prises par les
polynmes sur tous les chantillons. Le calcul du produit exige cependant que, dans le cas
de la reprsentation par chantillons, les abscisses dchantillonnage soient identiques pour
les deux polynmes multiplier. Une difficult ne doit pas nous chapper. Le produit de
deux polynmes de degr n 1 est un polynme de degr 2n 2. Il est donc ncessaire de
disposer de 2n 1 chantillons pour chacun des deux polynmes multiplier.
Pour lexemple ci-dessus, on convient de complter lchantillonnage de D(x) et de E(x)
sur labscisse 2. On a alors :
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 :
R(x) = [(0, 1 2), (1, 3 3), (2, 5 4)]
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.

110 - Q 3

110 - Q 4

164

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

reprsentation
par chantillons

reprsentation
par coefficients

(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)

R(x)

E(x)
valuation
interprtation
E(x)

R(x)

D(x)

Fig. 8.13 Produit de polynmes par changement de reprsentation. La partie suprieure du schma illustre le produit classique, totalement effectu dans la reprsentation par coefficients. La partie infrieure est son homologue pour la reprsentation par
chantillons. La partie gauche montre le changement de reprsentation des deux arguments (lvaluation), et la partie droite schmatise le changement de reprsentation du
rsultat (linterprtation).
La conversion entre la reprsentation par coefficients et la reprsentation par chantillons
est, du point de vue algorithmique, aise (en utilisant par exemple le schma de Horner).
En revanche, son cot est lev (de lordre de (n2 )). La conversion inverse, entre la
reprsentation par chantillons et la reprsentation par coefficients, revient rsoudre un
systme dquations linaire.
Ainsi, pour lexemple ci-dessus, pour retrouver les trois coefficients a, b et c de R(x) =
a x2 + b x + c, il faut rsoudre le systme linaire suivant :
02
12
22

0
1
2

1
a
2
1 b = 9
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 dchantillonnage 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 transforme 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

165

x[k]

n1
1 X
2i

X[j] e n jk
n j=0

## o e la base du logarithme naturel et i le nombre complexe tel que i2 = 1. Lalgorithme

correspondant est aussi en (n log2 (n)).
En rsum, on a dcrit une solution au problme du produit de polynmes qui est en
(n log2 (n)). Elle se prsente en trois principaux points :
a) phase dvaluation : conversion des deux polynmes de la reprsentation par coefficients
la reprsentation par chantillons (complexit en (n log2 (n))),
b) phase de multiplication (complexit en (n)),
c) phase dinterpolation : conversion du rsultat en sa reprsentation par coefficients (complexit en (n log2 (n))).
Cest ce que prsente le schma de la figure 8.13, page 164. Le travail demand dans
cette question est de mettre en uvre cette solution sous la forme de la fonction
ProdPolynDFT(n, p, q), sachant que les deux polynmes p et q sont reprsents par leurs
coefficients et quils ont la mme taille n, n tant une puissance de 2.

## Exercice 111. Loi de Coulomb

Strictement parlant, cet exercice ne comporte aucune question de type DpR. Cependant, le rsoudre compltement exige dexploiter les rponses fournies aux
questions de lexercice 110, page 162, (sur la multiplication de polynmes) et indirectement celles de lexercice sur le calcul de la transforme de Fourier (exercice 109, page 158). Ces deux exercices doivent donc tre traits avant daborder
celui-ci.
En lectrostatique, la loi de Coulomb exprime la force lectrique F1 2 exerce par une
charge lectrique q1 place en un point M1 sur une charge q2 place en un point M2 .
Cette loi sexprime sous forme vectorielle par la formule suivante :

F1

q1 q2

r k2 u ,
40 k
12

r =
o
u est le vecteur unit de la droite D, support des deux charges, et
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

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 :

i1
n
X q
X

qj

j

k F i k = |C qi |

(i j)2 j=i+1 (i j)2
j=1

## o C est une constante.

111 - Q 2

Question 2.
Montrer que lon peut calculer le vecteur k F i k (pour i 1 .. n) en (n
log2 (n)) multiplications. Suggestion : sinspirer de la question 4 de lexercice 110 page 162,
sur le produit de polynmes.

## Exercice 112. Lchers dufs par la fentre

Dans la plupart des algorithmes DpR, la division se fait en s sous-problmes (approximativement) de mme taille, o s est un nombre fix lavance (typiquement
2). Cest l que rside lintrt de cet exercice puisque dans la deuxime partie
(la radixchotomie), s dpend de la taille n du problme. Dans la troisime partie
(la mthode triangulaire), s dpend toujours de n et de plus les sous-problmes
sont de tailles variables. La premire partie est une simple application de la recherche squentielle. Loptimisation de tests destructeurs dchantillons constitue
une application possible des algorithmes dvelopps ici. Lexercice 128, page 205,
envisage une variante de ce problme sous langle de la programmation dynamique .
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.

112 - Q 1

Question 1.

167

## CHAPITRE 8. DIVISER POUR RGNER

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.

## Une deuxime technique : la radixchotomie

Question 2.
On prend maintenant k = 2. Ce choix vise amliorer la complexit. Si on
veut tre sr de conclure, il faut conserver un uf pour (en gnral) terminer par une
recherche squentielle. Avec le premier uf, une stratgie possible consiste diviser le
nombre dtages en s segments de longueur e de sorte que le nombre de lchers associ
cette division ajout celui de la recherche squentielle soit minimal dans le pire des cas.
Il existe en gnral un segment rsiduel de r tages. Ces trois valeurs entires sont lies
par la relation :
s e + r = n et r 0 .. e 1
qui nest autre que la dfinition de la division euclidienne de n par e. Pour e donn, on a
donc s = bn/ec et r = n e bn/ec. Du point de vue algorithmique, la premire phase de
la recherche est une recherche squentielle qui seffectue avec un pas de e, tandis que la
seconde phase est une recherche squentielle (avec un pas de 1) similaire celle effectue
dans la premire question, ainsi que le montre la figure 8.14, page 167.
1e
...

(i 1) e

2e
...

non Casse1

ie
...

non Casse1

non Casse1

...

n
...

non Casse1

(i 1) e + 1
...

se

<e

ie
...

recherche squentielle

Fig. 8.14 La radixchotomie : les deux tapes de la recherche dans le cas ou lon dispose
de deux ufs
La pire des situations (en nombre de lchers) est atteinte pour f = s e ou f = s e 1 : la
premire phase sarrte la position s e, tandis que la seconde phase explore le dernier
segment complet jusqu la position se1. Le cas de la recherche dans le segment rsiduel
nest jamais pire que la recherche pour f = s e 1 ou f = s e ; on peut donc, dans le

112 - Q 2

168

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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
Il faut prsent dterminer une valeur acceptable pour e. Transformons temporairement
le problme de la manire suivante : soit g(e) = (e 1) + n/e une fonction relle dune
variable relle. On recherche une solution qui minimise g(e). On simpose en outre la
contrainte que e est de la forme nx . Par consquent, les segments ont la mme longueur.
On a donc g(e) = f(x) = (nx 1)+n/nx . La drive f0 (x) = nx ln(n)n1x ln(n) sannule
pour x = 0.5, qui constitue le rsultat recherch. Puisque, dans la ralit, on recherche une

## solution entire pour e, on peut prendre e = b nc. On a donc 9

R2 (n) =
Montrons que R2 (n) (

 
n
n 1 +   .
n

p
(n)).




1 n
n
n
n ( n) et pour n > 10
6
62
2
n
b nc
n

bxc
(x) et dfinition de



n
n
b nc ( n) et b c
b nc
n

calcul





n
b nc 1 ( n) et
b nc



 

n
b nc 1 +
max
n, n
b nc

dfinition de R2 et de max

R2 (n) n .
Construire, sur la base de la dmarche ci-dessus et en utilisant uf1, la fonction

## uf2Radix qui implante un algorithme itratif en O( n) pour calculer f. Donner son

droulement pour le jeu dessai suivant : n = 34, f = 29.
112 - Q 3

Question 3.
On gnralise la question prcdente au cas o lon dispose initialement de
k ufs. Construire lopration fonction ufkRadix (bi, bs) rsultat N1 qui est telle que

## ufkRadix (1, n) calcule f avec une complexit en O( k n) pour un immeuble de n tages.

Montrer
que sa complexit est bien celle attendue. Suggestion : prendre un pas e de

k
b nk1 c.

## Une troisime technique : la mthode triangulaire

On se place pour linstant dans lhypothse ou lon dispose de deux ufs (k = 2). Dans
la mthode prcdente, on sest appuy sur lhypothse dun dcoupage de limmeuble en
segments de longueur uniforme. Il est parfois possible dobtenir une meilleure solution dans
9.

## Do le terme (est-ce un nologisme ?) de radixchotomie : la division dune donne de taille n se

fait en sqrtn parties, de tailles sqrtn ou presque.

## CHAPITRE 8. DIVISER POUR RGNER

169

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 triangulaire ? Dvelopper lexemple avec n = 29 et f = 29.
Question 5.
Soit T2 (n) (pour triangulaire avec deux ufs) la complexit au pire en
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 suprieurement, 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
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 identifi, 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 opration. 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 exprimentalement 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.

112 - Q 4

112 - Q 5

112 - Q 6

112 - Q 7

112 - Q 8

170

## La principale difficult, mais aussi le principal intrt de lexercice, rsident dans

la comprhension et la mise en uvre de ltape de sparation. Celle-ci est fonde
sur une heuristique qui contribue au bon comportement de lalgorithme en termes
de complexit. La boucle qui lui correspond doit tre construite avec beaucoup de
rigueur. Le raisonnement inductif qui permet lapplication du principe DpR est
quant lui trs simple.
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 indiffremment lun ou lautre. Une solution triviale existe. Elle consiste, pour chaque valeur v
JvK. Elle conduit un algorithme en O(n2 ).
du sac S, vrifier si elle existe dj dans S
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 )

171

## CHAPITRE 8. DIVISER POUR RGNER

12 .. 19

Tl

14 17 12 19 14 16 12 14 15
16
5
.. 1
.. 1
9
12
Tr

14 12 14 12
12 .. 14

17 19 16
16 .. 19

## Schmatiquement, cette procdure part dun sous-tableau T [bg..bd] contenant un doublon

et fournit un sous-tableau T [nbg .. nbs] strictement plus petit contenant galement un
doublon. Afin dtre oprationnelle, cette spcification doit tre renforce conformment
la prcondition et la postcondition suivante (voir chapitre 3, pages ?? et suivantes) :
Prcondition P :
bi .. bs
bg

bd

T
1. Le tableau T [bg .. bd] prend ses valeurs dans lintervalle bi .. bs.
2. card(bg .. bd) > 2 (ce tableau possde au moins trois lments).
3. bi T [bg .. bd] et bi T [bg .. bd] (les valeurs extrmes possibles appartiennent bien
au tableau).
4. card(bg .. bd) > card(bi .. bs) (il y a plus de places que de valeurs possibles : il existe
donc au moins un doublon).
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 appartiennent 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

bd

T
bil .. bsl

bir .. bsr

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 soustableaux.
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}.

173

## b) Complter le code de la procdure Ventiler.

c) Fournir une trace dexcution des principales variables pour lexemple introductif.
d) Fournir un majorant du nombre de conditions values. En dduire la complexit au
pire de la procdure Ventiler.
e) Montrer que la taille du sous-tableau de sortie T [nbg .. nbd] ne dpasse pas la moiti
de la taille du tableau dentre T [bg .. bd] plus 1, autrement dit que :


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 lopration 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

## Il savre que cet exercice est un exemple remarquable de nombreux points de

vue.
Les deux problmes abords (carr et rectangle) prsentent des spcifications
proches. Cependant, les techniques utilises sont diffrentes et difficilement
transposables de lun vers lautre.
Le second problme (celui du rectangle) est abord selon trois approches diffrentes (par DpR, par une mthode purement itrative et par une mthode
mariant rcursivit et itration).
La solution DpR (dans sa version la plus labore) conduit ltude dune
structure de donnes originale et efficace, base sur des arbres.
La solution itrative utilise explicitement une pile qui exige, pour atteindre
une solution efficace et lgante, un raffinement ingnieux.
Cerise sur le gteau, la dernire solution tudie est un antidote lempirisme et la bidouille . Le rsultat, dune concision et dune puret rare,
ne peut tre atteint quen appliquant scrupuleusement les prceptes dfendus
dans cet ouvrage.
En outre, il ne sagit pas dun exercice purement gratuit . De simples extensions trouvent des applications au traitement dimages. De par la grande varit
des solutions abordes, le placement de cet exercice dans ce chapitre est quelque
peu arbitraire.

113 - Q 2

174

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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.
Cette dfinition se formalise comme suit. Soit
et

t a .. b i .. s

h i .. s 0 .. b a + 1.

## Le tableau h est lhistogramme de t si :

k (k i .. s h[k] = #j (j a .. b | t[j] = k)).

Exemple Soit le tableau t suivant, dfini sur lintervalle 1 .. 25 et valeurs dans lintervalle
1 .. 7 :
1

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

## Son histogramme h, dfini sur lintervalle 1 .. 7 et valeurs dans lintervalle 0 .. 25, se

prsente comme suit :

Un tel tableau est souvent reprsent comme le montre la figure 8.15 ci-dessous.
6
5
4

3
2
1
0

## Fig. 8.15 Un exemple dhistogramme

On peut noter (cest une remarque qui est exploite ci-dessous) quil est possible de dfinir 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

175

## Lobjectif de lexercice est double. Il sagit tout dabord de rechercher le ct du plus

grand carr sous lhistogramme, puis, dans une seconde tape, de rechercher laire du
plus grand rectangle sous un histogramme. Dans chacun des cas, plusieurs solutions sont
tudies. Lexercice sachve par une application aux images noir et blanc. La complexit
des diffrentes solutions se mesure en nombre de conditions values.

## Recherche du ct du plus grand carr sous un histogramme

Pour lexemple de la figure 8.15, la valeur recherche est 3. Elle est atteinte par deux
carrs diffrents :

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
pour laquelle plusieurs solutions sont alignes verticalement peut exister, comme le montre
le schma ci-dessous :
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 :

114 - Q 1

176

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

6
5
4
3
2
1
0

6
5
4
3
2
1
0
0

Histogramme original

## Le prtraitement ncessaire la satisfaction de cette contrainte nest pas ralis ici.

Plus grand carr sous un histogramme, version itrative nave
114 - Q 2

## Construire une solution itrative fonde sur linvariant suivant : r est le ct

Question 2.
du plus grand carr contenu dans lhistogramme h[1 .. i 1] ; le plus grand carr jouxtant la position i le seul qui puisse encore sagrandir a comme ct (i a), avec
1 6 a 6 i 6 n + 1.
r

h:
a

## 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

177

## Lhistogramme f de h[a .. i 1] est alors :

0

3
2
1
0
3

Soit encore :

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
le code. Vrifier que cette solution est bien en (n).

## Recherche de laire du plus grand rectangle sous un histogramme

Lobjectif de cette partie de lexercice est de construire un programme qui dtermine
laire du plus grand rectangle sous lhistogramme. Pour lexemple de la figure 8.15, page 174,
cette valeur vaut 12. Elle est atteinte par deux rectangles diffrents :
6

Trois solutions sont tudies. La premire est du type DpR (deux variantes sont proposes), la seconde est une solution itrative, enfin la troisime, de facture originale, panache
efficacement itration et rcursivit.
Dfinition 15 (am : aire maximale) :
Pour 1 6 i 6 j 6 n + 1, am(i, j) est laire du plus grand rectangle sous la portion de
lhistogramme dont les abscisses appartiennent lintervalle i .. j 1.
Pour lexemple de la figure 8.15, page 174, am(2, 5) vaut 8 :
6
5
4
3
2
1
0

114 - Q 3

178

## Plus grand rectangle sous un histogramme, version DpR nave

Proprit 11 (de am. Non dmontre) :
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.

6
5
4
3

10
1
0

## k = 4 et la valeur de am(2, 7) est max({8, 6, 10}), soit 10.

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 cidessus, 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 solution 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 lments 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,

179

## le sous-arbre de segments minimal gauche correspondant la premire moiti de

lintervalle i .. s,
le sous-arbre de segments minimal droit correspondant la seconde moiti de lintervalle i .. s.
Dans la suite, pour des raisons de lisibilit, on se limite des tableaux dont la taille
est une puissance de 2 (n = 2k ). Les rsultats obtenus se transposent des valeurs n
quelconques.

1

## Larbre de segments minimal A correspondant est le suivant :

A

position du minimum
dans h[5 .. 8]

3
1 .. 8

1 .. 4

5 .. 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

## Un tel arbre est reprsent par la structure

asm = {/} {(g, (m, i, s), d) | g asm et d asm et m N1 et i N1 et s N1 }
o i .. s est lintervalle dentiers du nud considr et m la position du minimum pour
le tableau ainsi reprsent. Soit fonction PosMinAux (a, p, q) rsultat N lopration qui
dlivre la (lune des) position(s) du minimum de h[p .. q] dans larbre de segments minimal a.
Construire cette opration, fournir son code et calculer sa complexit. En
Question 5.
dduire la complexit de la nouvelle version de lopration AmHDpR.
Plus grand rectangle sous un histogramme, version itrative Le principe de cette version sapparente 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 ensemble 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

114 - Q 5

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 :
g 0 .. i 1 et ht = min(h[g .. i 1]) et h[g 1] < ht.
la figure 8.16 page 180, pour i = 10, nous avons O = {(0, 0), (1, 1), (4, 3), (6, 4)}. Lextension 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

5
4
3
2
1
0
0

10 11 12 13 14 15

114 - Q 6

Question 6.

## Dmontrer la proprit suivante :

Lemme 1 :
Soit P = < (g1 , ht1 ), . . . , (gk , htk ) > la liste des rectangles ouverts trie sur les gj croissants. 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 informations prsentes dans P.

Question 8.

181

## initPile procdure qui vide la pile,

sommetPile fonction qui dlivre le sommet de la pile sans modifier celle-ci (prcondition :
la pile est suppose non vide),
empiler(v) procdure qui empile lentier v,
dpiler procdure qui supprime le sommet de pile (prcondition : la pile est suppose non
vide),
construire la boucle sur laquelle est fonde cet algorithme. Quelle est sa complexit ?
Plus grand rectangle sous un histogramme, version Morgan Face la solution prcdente utilisant 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 formelle (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
Q1 =
b i<j6n+1
Q2 =
b h[i] 6 min(h[i + 1 .. j 1])
Q3 =
b h[i] > h[j]
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

114 - Q 8

182

## Cet appel dlivre j = 7 et b = 12.

Prenons nouveau lexemple de la figure 8.15, page 174, pour valuer AmHMorg(3, b, j) :
6
5
4
3
2
1
0

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

114 - Q 10

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 .
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 condition 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.
9.
10.
11.
12.
13.

## tant que non CA(i, b, j) faire

I(i, b, j) et non CA(i, b, j)
AmHMorg(j, c, k) ;
Q0 (j, c, k) et I(i, b, j) et non CA(i, b, j)
FinProgression
I(i, b, j)

14.
15.

183

## fin tant que

I(i, b, j) et CA(i, b, j)

16.
Q0 (i, b, j)
17. fin

Remarques
1. Puisque i est un paramtre dentre, P(i) est un prdicat toujours satisfait.
2. Ces annotations rsultent des lments thoriques fondamentaux de la programmation squentielle (voir chapitre 3).
3. Dans lannotation de la ligne 11, le conjoint Q0 (j, c, k) est la postcondition rsultant
de lappel rcursif de la ligne 10. Le reste de la formule (I(i, b, j) et non CA(i, b, j))
est hrit directement de la prcondition de la progression. En effet, lappel de la
ligne 10, AmHMorg(j, c, k), ne modifie pas la valeur des variables dtat de la boucle
(i, b et j).
4. La ligne 15 est la postcondition naturelle de la boucle, tandis que la ligne 16 est
la postcondition de la procdure. Nous pouvons logiquement en conclure que
I(i, b, j) et CA(i, b, j) Q0 (i, b, j).

(8.13)

## 5. P et Q0 sont des prdicats connus (donns) ; I et CA sont en revanche inconnus.

Initialisation et FinProgression sont des fragments de code inconnus, construire
partir de leurs spcifications. Celle de FinProgression est le couple de prdicats des
lignes 11 (pour la prcondition) et 13 (pour la postcondition). Une solution triviale
serait de choisir laction vide , puisque la postcondition est dj un conjoint de
la prcondition. Cependant, ce choix est exclure car il ne permet pas de montrer
que le programme se termine. Il faut rechercher un fragment de code qui rtablit
linvariant I(i, b, j).
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
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
10 (autrement dit, que la prcondition P(j) est implique par le prdicat de la ligne 9).
Question 13.
gression.

## Nous cherchons prsent dterminer le code correspondant FinPro-

a) Si la configuration suivante

114 - Q 11

114 - Q 12

114 - Q 13

184

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

7
6
5
4
3

2
1
0

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.

114 - Q 15

Question 15.

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 cidessus pour rsoudre ce problme.

## Fig. 8.17 Dtail dune image noir et blanc

185

CHAPITRE

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

## 9.1.1 Dcoupe - Partage : problmes une dimension

Exercice 115. Approximation dune fonction chantillonne par
une ligne brise

Cet exercice illustre la notion dapproximation optimale au moyen de la programmation dynamique. Il montre la rduction trs importante que cette mthode apporte au plan de la complexit par rapport une approche nave de type Essais
Successifs .
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 approximation 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 calculant 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.
o

5
4
o

5
o
o

o
o

4
3

o
o

2
o

0
0

Exemple 1 : n = 8, m = 2
ligne brise (1, 4, 8)

Exemple 2 : n = 8, m = 2
ligne brise (1, 5, 8)

189

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

o

5
o

4
o

o
o

4
3

o
o

2
o

0
0

Exemple 3 : n = 8, m = 3
ligne brise (1, 4, 7, 8)

Exemple 4 : n = 8, m = 3
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
aussi) ou C trs grand ?
Supposons que la ligne brise de valeur optimale corresponde la suite croisQuestion 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
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
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 lapproximation 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
abscisses des points de la ligne brise optimale ?

115 - Q 1

115 - Q 2

115 - Q 3

115 - Q 4

115 - Q 5

115 - Q 6

190

## Exercice 116. Le meilleur intervalle (le retour)

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, dfinissant 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

116 - Q 2

116 - Q 3

116 - Q 4
116 - Q 5

116 - Q 6

116 - Q 7

Question 1.
On appelle vmi(k) la valeur du (dun) meilleur intervalle se terminant exactement 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).
Question 2.
Dduire de la rcurrence prcdente une stratgie de remplissage dune structure tabulaire approprie. Quelles en sont les complexits temporelle et spatiale ? Vrifier
que la complexit temporelle rpond bien lobjectif fix.
Comment peut-on procder pour dterminer le meilleur intervalle lui-mme,
Question 3.
autrement dit ses bornes ?
Question 4.

## Donner le code du programme associ.

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].
Question 6.
Proposer une variante (principe et code) de la solution prcdente qui amliore la complexit spatiale.
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.

## Exercice 117. Installation de stations-service

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 reconstitution de la solution optimale elle-mme.
On obtient la concession de stations-service le long dune autoroute en construction. La
rgle est la suivante : la compagnie gestionnaire de lautoroute indique les n emplacements
envisags pour implanter les stations-service. Chaque emplacement est numrot par un
entier i, et sa position est donne par son kilomtrage partir de lentre de lautoroute.
Pour chaque emplacement possible, la compagnie donne le montant que va rapporter
chaque anne une station-service place cet endroit (en M). Elle indique galement
la distance prserver en kilomtres au sens suivant : si lon dcide dinstaller une
station-service un emplacement, on na pas le droit den installer une autre (en direction
de lentre de lautoroute) une distance infrieure ou gale la distance prserver.
On suppose que les emplacements sont numrots par distance croissante par rapport
lentre de lautoroute. Par exemple, avec les donnes suivantes :
Emplacement

Position

Gain annuel

Distance prserver

1
2
3
4

40
90
130
200

5
7
1
5

0
70
50
120

## si lon choisit dinstaller une station lemplacement 4, les emplacements 3 et 2 ne peuvent

plus tre quips, puisque ces stations-service seraient une distance infrieure 120 km.
On peut donc seulement raliser les combinaisons suivantes demplacements pour installer
les stations-service : h1i, h2i, h3i, h4i, h1, 3i et h1, 4i.
Question 1.
Parmi les six configurations possibles de cet exemple, quelle est celle qui
rapporte le plus ?

117 - Q 1

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 lemplacement 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
0 et prciser la valeur de g(0).
Question 3.
tablir la rcurrence de calcul de gopt(i), gain maximal associ une implantation optimale relative aux emplacements 0 i.

117 - Q 2

117 - Q 3

192
117 - Q 4

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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).

117 - Q 5

Question 5.

## Expliciter le principe de reconstitution de la configuration optimale.

117 - Q 6

Question 6.

Lappliquer lexemple :
Emplacement

Position

Gain annuel

Distance prserver

1
2
3
4
5
6
7

20
80
170
200
260
280
340

6
7
2
3
1
5
2

0
70
100
50
80
100
90

## Exercice 118. Le voyageur dans le dsert

Cet exercice montre que, selon la fonction de cot considre, une simple solution 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

118 - Q 2

118 - Q 3

Question 1.
Le voyageur veut faire le moins darrts possible. Mettre en vidence une
stratgie gloutonne (voir chapitre 7) optimale atteignant cet objectif.
Question 2.
Le voyageur veut verser dans le sable le moins de litres deau possible. Montrer que la stratgie gloutonne prcdente est toujours optimale.
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.

193

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

Question 4.
Construire une solution fonde sur la programmation dynamique dont les
lments sont :

118 - Q 4

## 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
dont on donnera la rcurrence, la structure tabulaire utilise, lvolution de son remplissage
et les complexits temporelle (en nombre de conditions values) et spatiale du programme
qui en rsulte (le code nest pas demand).
Question 5.
Appliquer cette solution avec une gourde de dix litres et des puits situs
8, 9, 16, 18, 24 et 27 km de loasis de dpart, larrive tant situe 32 km de loasis de
dpart.

## Exercice 119. Formatage dalina

Cet exercice illustre une application de la programmation dynamique un problme simple de formatage de texte pour lequel on veut minimiser un cot associ
aux espaces apparaissant dans les lignes. On pourra noter de fortes analogies avec
lexercice prcdent, en particulier dans la forme de la rcurrence.
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 ultrieurement. 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
de=deux=faons============
diffrentes===============

Ce=court=texte=est========
format=de=deux=faons====
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

118 - Q 5

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

119 - Q 2

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 ?
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
de=deux=faons=trs=======
diffrentes===============

Ce=court=texte=est========
format=de=deux=faons====
trs=diffrentes==========

Que dire dun algorithme glouton (voir chapitre 7) consistant remplir chaque ligne le
plus possible ?
119 - Q 3

119 - Q 4

Question 3.
On prend des lignes de longueur 10. Donner toutes les faons de formater
la phrase Racine est un musicien .
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

119 - Q 6
119 - Q 7

119 - Q 8

## En dduire le principe dun programme qui, connaissant les valeurs de ml,

Question 5.
calcule le formatage dun texte de cot minimal et permet de lcrire ultrieurement. On
en prcisera les complexits spatiale et temporelle.
Question 6.

## Traiter lexemple de la question 3.

Question 7.
Dans la dmarche propose, on est parti de fopt(i), le cot optimal de lcriture de mi , . . . , mN . Aurait-on pu procder autrement ?
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 ?

195

## Exercice 120. Codage optimal

Cet exercice illustre une application de compression optimale de texte tant donnes 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.
On dispose dun ensemble C de m mots sur un alphabet , tous de longueur infrieure
ou gale k (C est appel le code). On a dautre part un autre mot D de longueur n sur
lalphabet , que lon cherche coder en utilisant le moins possible doccurrences de mots
de C. Par exemple, si C = {a, b, ba, abab} et D = bababbaababa, un codage possible
de D est ba ba b ba abab a, utilisant six occurrences de C. Il peut ne pas exister
de solution, comme pour le codage de D = abbc avec le code C = {a, bc}. Une condition
suffisante pour que toute chane puisse tre code (et donc admette un codage optimal)
est que soit inclus (au sens large) dans C.
Question 1.
Donner une rcurrence pour calculer le nombre minimum doccurrences de
mots du code C ncessaires au codage de D. Par convention, ce nombre minimum vaut
+ si D ne peut tre cod avec C.
Question 2.
Lopration lmentaire tant la comparaison des lettres de lalphabet ,
crire un algorithme en O(n m k) qui trouve le cot du codage optimal et permette de
le produire ultrieurement (sil existe).
Question 3.
il existe.

## Expliciter lalgorithme permettant de reconstituer le codage optimal quand

Question 4.
Appliquer cet algorithme pour : i) le code C = {a, b,
D = bababbaababa, ii) le code C = {a, bc} et le mot D = abbc.

ba, abab}

et le mot

## Exercice 121. Dcoupe de barre

Le seul point de cet exercice mritant une attention particulire concerne ltablissement 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

10

Prix PR[i]

10

17

17

20

24

30

120 - Q 1

120 - Q 2

120 - Q 3

120 - Q 4

196
121 - Q 1
121 - Q 2

121 - Q 3

121 - Q 4

121 - Q 5

Question 1.

## Sur lexemple, quelle est la dcoupe optimale dune barre de longueur 4 ?

Question 2.
Donner une formule de rcurrence pour le prix optimal pvopt(n) de la dcoupe dune barre de longueur n.
Question 3.
En dduire le principe dun algorithme de programmation dynamique qui
calcule ce prix. En prciser les complexits temporelle et spatiale.
Comment connatre non seulement le prix optimal, mais aussi la longueur
Question 4.
des segments qui composent la dcoupe optimale ?
Question 5.

## Exercice 122. Affectation de dure des tches

Le principal intrt de cet exercice rside dans lattention qui doit tre porte
ltablissement de la rcurrence, qui, sans tre difficile, rvle quelques particularits.
On considre n tches T1 , . . . , Tn , chacune pouvant tre effectue en diffrentes dures
(nombres entiers de 1 k). Le cot de chaque tche varie en fonction de la dure qui lui
est affecte ; c(i, d) le cot de la tche i ralise en d units de temps est exprim en units
de cot (nombres entiers de 10 200). Pour chaque tche i, le cot c(i, d) diminue au fur
et mesure que la dure d qui lui est affecte augmente, sauf si la tche nest pas ralisable
pour la dure impartie, auquel cas elle ne lest pas non plus pour toute dure suprieure.
titre dexemple, avec n = 4 et k = 5, on peut avoir le tableau de cots ci-dessous :

i=

dure d

1
2
3
4

110
120
90
65

90
90
70
60

65
70
65
55

55
50
60

40
+

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 .
122 - Q 1

Question 1.

Question 2.
la remplir.

197

## Prciser la structure tabulaire utilise et lvolution du calcul permettant de

Question 3.
tablir que la complexit spatiale de lalgorithme associ est en (n D) et
que sa complexit temporelle est en O(k2 n2 ).
Question 4.

122 - Q 2

122 - Q 3

122 - Q 4

## Cet exercice se situe dans le domaine du calcul numrique et rsout de faon

lgante et efficace la question cruciale du choix de lordre dans lequel effectuer
une succession de produits de matrices. La solution fait appel une rcurrence
deux lments, le cot optimal se trouvant dans un emplacement prdfini de
la structure tabulaire utilise. Lobjectif final nest pas tant de trouver le cot et
le parenthsage optimal que de pouvoir utiliser ces lments pour construire un
programme efficace ralisant le produit de matrices considr.
On sintresse au produit des matrices relles M1 M2 Mn , et on souhaite lobtenir
en effectuant le moins possible de multiplications de nombres rels. Les dimensions de
ces matrices sont dcrites dans un tableau D[0 .. n], avec Mi [1 .. D[i 1], 1 .. D[i]]. On
appelle propt(i, j) le nombre minimal de multiplications pour raliser le produit de la
chane partielle de matrices (Mi Mi+j ). On cherche donc la valeur propt(1, n 1).
Question 1.
Soit les matrices M1 [10, 20], M2 [20, 50], M3 [50, 1] et M4 [1, 100]. Comparer le nombre de multiplications quand on fait les oprations dans lordre donn
par le parenthsage (M1 (M2 (M3 M4 ))) avec celui qui dcoule du parenthsage
((M1 (M2 M3 )) M4 ) .

123 - Q 1

Question 2.

123 - Q 2

Question 3.

## Proposer une rcurrence de calcul de propt(i, j).

123 - Q 3

Question 4.
Construire le programme calculant propt(1, n) (et permettant de trouver le
parenthsage optimal associ) aprs avoir mis en vidence la structure tabulaire utilise
et lvolution de son remplissage. Quel est lordre de grandeur de complexit spatiale et
temporelle (en nombre de multiplications) de ce programme ? Comparer la complexit
temporelle celle de la mthode nave comparant tous les parenthsages.
Question 5.
Appliquer ce programme sur lexemple des quatre matrices M1 [10, 20],
M2 [20, 50], M3 [50, 1] et M4 [1, 100] pour calculer le nombre minimal de multiplications
ncessaires au produit M1 M2 M3 M4 .
Question 6.
Expliciter le principe du programme reconstituant le (un) parenthsage
optimal. Lillustrer avec lexemple prcdent.

123 - Q 4

123 - Q 5

123 - Q 6

198

## Bien quapparemment voisin du problme de dcoupe de barre, celui-ci se rvle

plus compliqu en ce qui concerne ltablissement de la rcurrence. Il faut en effet
spcifier ici une rcurrence deux variables.
On dispose dune planche de longueur entire N que lon veut dcouper en n segments
P
de longueurs entires l1 , l2 , . . . , ln avec n
i=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.
On cherche minimiser le cot de la dcoupe, fond sur le principe suivant : dcouper en 2 un segment de taille m cote m units (il faut transporter le segment de taille
m vers la scie). On cherche dans quel ordre pratiquer les dcoupes pour minimiser le cot
total. Dans lexemple prcdent, il ny a que deux manires de faire :
Couper dabord la planche labscisse 7, puis labscisse 2, ce qui cote
10 + 7 = 17 units. Ceci se reprsente par le schma de dcoupe suivant :
2

l1 = 2

l2 = 5

l3 = 3

## ou par le parenthsage ((l1 l2 )l3 ).

Procder en sens inverse, ce qui cote 10 + 8 = 18 units, et se reprsente
par le schma de dcoupe
1

l1 = 2

l2 = 5

l3 = 3

## ou par le parenthsage (l1 (l2 l3 ))

124 - Q 1

124 - Q 2

124 - Q 3

Question 1.
Quel est le nombre de dcoupes distinctes possibles ? quel autre problme
celui-ci fait-il penser en termes de combinatoire ?
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.
Question 3.
Traiter le problme (rcurrence, complexit notamment) quand la planche
est circulaire (un beignet plat), comme sur lexemple ci-dessous :

199

l3 = 2

l2 = 1

l4 = 3
l1 = 2

## Exercice 125. Les pilleurs de coffres

Ltablissement de la rcurrence associe ce problme repose sur un raisonnement analogue celui dvelopp dans lexercice 115 page 188, selon lequel une
liste finie non vide possde forcment un dernier lment. Cependant, compte
tenu dune proprit du problme trait ici, on va pouvoir simplifier les calculs,
ce qui constitue lintrt majeur de cet exercice.
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 numroter de gauche droite le long du mur et dont le temps douverture, en minutes, se rpartit
ainsi :
Numro du coffre

Temps douverture

Question 1.
On considre la stratgie consistant affecter le secteur (1, 2, 3) au premier
voleur, le secteur (4, 5, 6) au second, et le secteur (7, 8, 9) au troisime. Les voleurs repartent
aprs 15 minutes, le temps mis par le voleur le plus lent (le premier). Mettre en vidence
une solution meilleure que celle qui repose sur cette stratgie.
Question 2.
Dans le cas gnral, on a N coffres et p voleurs. On appelle T OC(i) le temps
ncessaire louverture du ie coffre par lun quelconque des voleurs, et tgopt(n, k) le

125 - Q 1

125 - Q 2

200

## temps global optimal, cest--dire le temps minimum ncessaire louverture de n coffres

(1 6 k 6 N) par k voleurs (1 6 k 6 p). Que vaut tgopt(n, k) quand : i) n = 1 (il ny a
quun coffre ouvrir), ii) k = 1 (un seul voleur doit ouvrir tous les coffres), iii) k > n (le
nombre de voleurs est suprieur au nombre de coffres ouvrir), iv) k 6 n ?
125 - Q 3

125 - Q 4

125 - Q 5

Question 3.
En dduire la rcurrence permettant le calcul de tgopt(N, p), le temps minimum ncessaire louverture de N coffres par p voleurs.
Question 4.
Dcrire la structure tabulaire utilise par lalgorithme associ, ainsi que la
stratgie de son remplissage. Quelles sont les complexits spatiale et temporelle de cet
algorithme ?
Question 5.

Lappliquer lexemple.

## On sintresse trois problmes de rangement de livres dans une tagre, avec

des contraintes diffrentes de rangement selon que lon fixe le nombre de rayons
ou la hauteur ou encore la largeur de ltagre.
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 de hauteur minimale

On dispose de N livres B1 , . . . , BN que lon souhaite ranger sur ltagre avec les contraintes
suivantes :
lordre dans lequel les livres sont disposs est fix : B1 doit se trouver
lextrme gauche dans le rayon du haut, B2 est accol B1 ou, dfaut,
lextrme gauche du rayon du dessous, et ainsi de suite,

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

201

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 :

## La hauteur totale de la premire tagre est 7 + 10 = 17, celle de la seconde 9 + 10 = 19.

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
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 :

j
X

max (h ) si
ek 6 L
k
hr(i, j) = ki..j
k=i

+
sinon.

126 - Q 1

## Trouver une relation de rcurrence descendante (ou arrire) dfinissant hgmin(i).

Question 2.
En dduire les caractristiques dun algorithme de programmation dynamique pour calculer hgmin(1). En donner la complexit temporelle.
Question 3.

i

ei

hi

avec L = 4.

## Ltagre de largeur minimale

On veut maintenant ranger la totalit des livres B1 , . . . , BN dans une tagre ayant K
(fix) rayons de largeur L rglable. Lordre dans lequel les livres sont disposs est impos

126 - Q 2

126 - Q 3

202

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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 largeur 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

ei

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
126 - Q 5

126 - Q 6

126 - Q 7

126 - Q 8

126 - Q 9

Question 4.

## Montrer que, pour tout n, avec 1 6 n 6 N, on a lgmin(n, 1) = ep(1, n).

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 }).
Question 6.
On considre maintenant un rangement optimal de n livres sur k rayons,
avec n > k, le dernier rayon contenant les livres Bm , . . . , Bn . Montrer qualors on a soit
lgmin(n, k) = lgmin(m 1, k 1), soit lgmin(n, k) = ep(m, n).
Question 7.
Dduire des questions prcdentes une relation de rcurrence pour calculer
lgmin(N, K).
Question 8.
Prciser lvolution du calcul effectu par lalgorithme de programmation
dynamique associ et montrer que sa complexit temporelle est en O(K N2 ).
Question 9.

## Un maximum de livres dans une tagre

On dispose dune tagre de largeur L compose de K rayons de la mme hauteur (L
et K fixs) et de N livres dpaisseur e1 , . . . , eN , tous de la mme hauteur (lgrement
infrieure celle des rayons de la bibliothque). Les livres sont numrots de 1 N, par
ordre alphabtique des auteurs.

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

203

P
On suppose que tous les livres ne peuvent tenir sur ltagre ( N
i=1 ei > K L) et on
dsire ranger dans ltagre un maximum M de livres parmi les N, en prservant leur ordre
alphabtique. Par exemple, sil y a quatre livres, de largeurs donnes ci-aprs :
i

ei

que L = 5 et K = 2, on ne peut ranger que trois (M = 3) des quatre livres de lune des
faons suivantes :

B1
B1
B1
B2
B1
B2

## sur la premire tagre, B2 et

sur la premire tagre, B2 et
sur la premire tagre, B3 et
sur la premire tagre, B3 et
et B3 sur la premire tagre,
et B3 sur la premire tagre,

B3
B4
B4
B4
B4
B4

sur
sur
sur
sur
sur
sur

la
la
la
la
la
la

seconde,
seconde,
seconde,
seconde,
seconde,
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.
Notons lgnec(i, j) la largeur minimale ncessaire au rangement dun sous-ensemble ordonn de j livres parmi i livres. Si ces j livres sont rpartis sur plusieurs tagres, il faut
prendre en compte dans lgnec(i, j) lventuelle place perdue la fin des premires ranges
(mais pas celle perdue sur la dernire). En reprenant lexemple prcdent, pour le choix
optimal prsent, on a lgnec(4, 3) = 5 + 3 = 8.
On suppose tout dabord que lon a un seul rayon dans ltagre (K = 1).
Question 10.
Quelle est la combinatoire a priori du problme ?
Question 11.
Donner une formule de rcurrence pour calculer lgnec(i, j). En dduire le
principe de lalgorithme de programmation dynamique associ, la faon de dterminer
la valeur M cherche et la complexit temporelle de cet algorithme. Traiter lexemple
prcdent avec les quatre livres dpaisseurs 3, 3, 2 et 2 et L = 5.
On considre maintenant le cas o lon a K = 2. Donner une formule de
Question 12.
rcurrence pour calculer lgnec(i, j). En dduire le principe de lalgorithme de programmation dynamique associ, la faon de dterminer la valeur M cherche et la complexit
temporelle de cet algorithme. Traiter lexemple prcdent avec les quatre livres dpaisseurs 3, 3, 2 et 2, et L = 5.
Question 13.
crire un algorithme pour K quelconque (K > 1). Prciser la faon de
dterminer la valeur M recherche. Donner les complexits temporelle et spatiale de cet
algorithme. Lappliquer avec L = 5 et K = 3 aux huit livres dont lpaisseur est donne
ci-dessous :
i

ei

126 - Q 10

126 - Q 11

126 - Q 12

126 - Q 13

204

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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.
Plus formellement, notons h1 , . . . , hn les tailles de skieurs et s1 , . . . , sm les longueurs de
skis. Il sagit de trouver une fonction injective fa 1 .. n 1 .. m optimale. Elle doit
maximiser la valeur de la satisfaction globale associe lattribution dfinie par fa, donc
minimiser la somme des carts (en valeur absolue) :
sde(n, m, fa) =

n
X

|hk sfa(k) |.

k=1

## Sans perte de gnralit, on supposera ordonnes les longueurs de skis (s1 6 . . . 6 sm ) et

les tailles de skieurs (h1 6 . . . 6 hn ).
127 - Q 1
127 - Q 2

127 - Q 3

127 - Q 4

127 - Q 5
127 - Q 6

127 - Q 7

127 - Q 8

Question 1.

## Montrer quune fonction fa monotone permet toujours datteindre une afQuestion 2.

fectation optimale.
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.
Notons affopt(i, j) la somme des carts (en valeur absolue) correspondant
Question 4.
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.
Question 5.

## En dduire la rcurrence complte dfinissant affopt(i, j).

Question 6.
Donner le principe dun algorithme de programmation dynamique mettant
en uvre ce calcul. Quelles en sont les complexits spatiale et temporelle (nombre de
conditions values) ? Prciser comment peut tre dtermine la (une) fonction fa optimale.
Question 7.
Rsoudre le problme avec m = 5, n = 3, les longueurs de skis s1 = 158, s2 =
179, s3 = 200, s4 = 203, s5 = 213, et les tailles de skieurs h1 = 170, h2 = 190, h3 = 210.
Question 8.
tielle.

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

205

Question 9.
On considre maintenant un nouveau critre doptimalit. Il sagit de trouver
une fonction injective fa 1 .. n 1 .. m optimale, au sens de la minimisation du plus
grand des carts entre la taille du skieur et la longueur de la paire de skis qui lui est
attribue, soit :

127 - Q 9

k1..n

## Exercice 128. Lchers dufs par la fentre (le retour)

Cet exercice revient sur le problme trait dans lexercice 112 page 166, au chapitre 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 lchers 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.
On considre maintenant le problme Lchers2 trs voisin du prcdent. On souhaite
toujours garantir la dtermination de f pour un couple (n, k) fix, mais avec un nombre de
lchers dufs minimal dans le pire cas. Ainsi, aprs avoir lch un des ufs disponibles
du quatrime des dix tages dun immeuble, on considrera le plus grand des nombres de
lchers ncessaires lexploration des trois premiers tages dune part, des six derniers de
lautre, selon quil y a casse ou non de luf. De plus, des fins de simplification, on tend
le traitement au cas des immeubles de taille nulle (n = 0).

## Une approche directe

Question 1.
Appelons nblmin(i, j) le nombre minimum de lchers ncessaires la dtermination de f dans le pire cas, sachant que lon dispose de i ufs et que limmeuble

128 - Q 1

206

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

possde j tages. Montrer que nblmin peut tre dfini par la rcurrence :
nblmin(i, 0) = 0
nblmin(i, 1) = 1
nblmin(1, j) = j




nblmin(i 1, p 1),
max
p1..j
nblmin(i, j p)

nblmin(i, j) = 1 + min

128 - Q 2

128 - Q 3

128 - Q 4

16i6k
16i6k
1
<j6n

1<i6k
et

1<j6n

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 ?
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 ?
Afin de dterminer une squence de lchers associe toute valeur NBLM[i, j]
Question 4.
(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.
Expliquer comment le tableau CH est utilis pour la dtermination dune squence de
lchers correspondant un couple (i, j) fix.
Par la suite, on prend le tableau CH[1 .. 3, 0 .. 8] ci-aprs :
j

i=1
2
3

/
/
/

1
1
1

1
1
1

1
2
2

1
1
1

1
2
2

1
3
3

1
1
4

1
2
1

## Donner la squence de lchers pour : i) k = 2, n = 8, f = 5, ii) k = 2, n = 6, f = 3,

iii) k = 2, n = 4, f = 5, iv) k = 2, n = 5, f = 1.

## Une solution passant par un problme voisin

128 - Q 5

Question 5.
On considre maintenant le problme Lchers3 du calcul de la hauteur
maximale dimmeuble (exprime en nombre dtages) himax(i, j), pour laquelle la valeur
de f peut tre identifie coup sr avec au plus i ufs et j lchers. tablir la rcurrence
calculant himax(k, nbl). Quelle diffrence y a-t-il entre celle-ci et celle propose pour le
problme Lchers2 ? Calculer la valeur himax(4, 12).

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

207

Question 6.
Discuter la cohrence des valeurs nblmin(i, j) (ou NBLM[i, j]) et himax(i, l)
(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 (identification 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.
Question 8.
Expliciter le principe de lalgorithme de reconstitution de la squence de
lchers associe un nombre k dufs et un immeuble de n tages partir du tableau
HIM.
Appliquer cet algorithme pour : i) k = 2, n = 9, f = 5, ii) k = 2, n = 7, f = 3,
Question 9.
ces deux cas correspondant ceux de la question 4, page 206. Que constate-t-on quant
aux squences de lchers produites ? Lappliquer galement k = 3, n = 42, f = 4.

128 - Q 6

128 - Q 7

128 - Q 8

128 - Q 9

Question 10.

## Montrer que lon a la proprit suivante :

himax(i, j) =

i
X

Cpj

128 - Q 10

1 6 j 6 n, 1 6 i 6 k.

p=0

Question 11.
En dduire le principe de lalgorithme LchDyn4 calculant le nombre minimal 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 lidentit Cp+1
= (Cpn (n p))/(p + 1) pour 0 6 p 6 n et n > 0, dautre part himax(i, r) >
n
hmax(i, r 1) pour tout r > 1 (qui se dduit de Cpr > Cpr1 ).
Expliciter la phase de reconstitution de la squence de lchers associe
Question 12.
himax(i, j). Prciser sa complexit et la comparer celle de la procdure donne pour la
question 8.

128 - Q 11

128 - Q 12

## Synthse : choix dune mthode

Question 13.
On va maintenant confronter les diffrentes mthodes de rsolution du problme 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).
Question 14.
On considre les configurations k = 2, n = 3, 1 6 f 6 4. Donner la squence
de lchers obtenue dune part au moyen du tableau CH donn en question 4, pour lalgorithme LchDyn2, dautre part avec la radixchotomie. Quen conclut-on quant au nombre
de lchers ncessaires la dtermination de f ?

128 - Q 13

128 - Q 14

208

## Identification exhaustive des lments dun intervalle

128 - Q 15

128 - Q 16

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 ?
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
?

non
non
?
128 - Q 17

128 - Q 18

oui

oui

oui

non
?

oui
?

Question 17.
Si on considre non plus lintervalle 1 .. 299, mais 1 .. 296, quelle est la
premire question poser ?
Question 18.
est unique.

## 9.1.3 Graphes - Arbres

On traite maintenant dun certain nombre de problmes lis aux graphes et arbres. Les
dfinitions et notions associes sont donnes dans les sections ?? page ??, et ?? page ??.

## Cet exercice aborde la problmatique du cheminement dans un graphe orient

valu spcifique : un graphe sans circuit nayant quun seul point dentre et
un seul point de sortie. On cherche un chemin de valeur minimale entre ces
deux sommets. Lintrt de lexercice rside dans labsence de restrictions sur la
valuation du graphe, mais aussi dans la faible complexit de la solution qui est
construite.
Soit un graphe G non valu ayant les caractristiques suivantes :
il ny a pas de boucle,
les n nuds de G sont tiquets par les entiers de 1 n,
si larc (i, j) existe dans G, alors i < j.

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

209

10

17

5
Fig. 9.1 Un graphe conforme
Le graphe G est dit de numrotation conforme ou encore conforme .
Montrer quun graphe conforme G ne comporte aucun circuit et quil posQuestion 1.
sde ncessairement au moins un point dentre (sommet sans prdcesseur) et un point
de sortie (sommet sans successeur).

129 - Q 1

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 2.
Donner la rcurrence de calcul du nombre de chemins de 1 n dans un
graphe valu GV respectant les conditions prcdentes, en dfinissant nbchm(j) comme le
nombre de chemins de 1 j. Donner la valeur de nbchm(5) pour le graphe de la figure 9.1
page 209 :
Question 3.
Donner les caractristiques (rcurrence, structure tabulaire, stratgie de remplissage) 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.

129 - Q 2

129 - Q 3

129 - Q 4

210

## Exercice 130. Chemins de valeur minimale depuis une source

Algorithme de Bellman-Ford

## Lalgorithme de Bellman-Ford est un des grands classiques des algorithmes de

programmation dynamique relatifs aux graphes orients valus, dont il existe de
nombreuses variantes. Il traite un problme plus gnral que le prcdent, puisquici on cherche la valeur des chemins optimaux entre un sommet origine donn
et tout autre sommet. Son principal intrt est dtre moins contraignant que celui de Dijkstra (voir exercice 77, page 90) quant aux valeurs portes par les arcs.
Dans cet exercice, on prend le parti initial dune construction dalgorithme issue
de la programmation dynamique. Dautres algorithmes, plus efficaces ou rsolvant
un problme voisin , sont galement abords.
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
1

3
2

2
6

Fig. 9.2 Un circuit ngatif apparat dans ce graphe en remplaant larc (5, 6) par (6, 5).
Ici, il nexiste pas de chemin du sommet 1 aux sommets 3, 4 et 5 et la valeur du chemin
optimal de 1 3, 4 et 5 est +. Le seul cas problmatique est celui dun circuit de valeur
ngative atteignable depuis sc, puisqualors la valeur du chemin optimal de sc tout
sommet du circuit est asymptotiquement (cas apparaissant en remplaant larc (5, 6)
par (6, 5) dans le graphe de la figure 9.2.
Pour le moment, on suppose le graphe GV exempt de circuit(s) de valeur ngative atteignable(s) depuis la source. Sil existe (au moins) un chemin lmentaire de la source un
autre sommet sip , il existe (au moins) un chemin de valeur minimale de sc sip . Soit ch1 =
hsc, si1 , . . . , sip i (p > 1) un chemin optimal de sc sip , alors ch2 = hsc, si1 , . . . , sip1 i
est un chemin optimal de sc sip1 (principe doptimalit de Bellman) qui a la proprit
davoir un arc de moins que ch1 . De ce constat, vient lide de dfinir une rcurrence
portant sur le nombre darcs des chemins optimaux. On note valchvmin(s, i) la valeur du
(dun) chemin optimal de la source au sommet s comportant au plus i arcs.

211

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

2
4

4
6

1
3

2
5
3

8
5
6

GV1

GV2
Fig. 9.3 Deux graphes pour la question 3

Question 1.

130 - Q 1

## Premire version de lalgorithme

Question 2.
On considre un graphe valu GV ayant n sommets et m arcs reprsent par
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.

Question 4.
Expliciter le principe dune solution permettant de reconstruire le (un) chemin optimal de la source sc tout autre sommet. Lillustrer sur le graphe GV1 de la figure
9.3, page 211.

130 - Q 2

130 - Q 3
130 - Q 4

Question 5.

## On envisage lalgorithme suivant :

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)

130 - Q 5

212

5.

6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.

## /% AGV est la matrice associe aux arcs du graphe GV considr et VGV

le vecteur donnant leur valeur ; larc (t, s) de valeur v est reprsent par
AGV[k, 1] = t, AGV[k, 2] = s, PGV[k] = v ; VCHVMIN est le vecteur des
valeurs de chemin de valeur minimale de la source (sommet 1) tout
autre sommet ; EstSansCircuitNgatif(GV) indique que GV est exempt
de circuit valeur ngative %/
variables
VCHVMIN 1 .. n R
dbut
VCHVMIN[1] 0 ;
pour s parcourant 2 .. n faire
VCHVMIN[s] +
fin pour ;
pour i parcourant 1 .. n 1 faire
/% calcul (mise jour) de la valeur du chemin de valeur minimale pour
tout sommet autre que 1 %/
pour a 1 .. m faire
VCHVMIN[AGV[a,
 2]]

VCHVMIN[AGV[a, 2]],
min
VCHVMIN[AGV[a, 1]] + PGV[a]
fin pour
fin pour ;
crire(VCHVMIN)
fin

## Quel est le principal avantage de cette version ?

130 - Q 6

130 - Q 7

Question 6.
Expliquer pourquoi cet algorithme rsout lui aussi le problme des chemins
de valeur minimale de la source (sommet 1) tout autre sommet. Le vrifier sur les graphes
GV1 et GV2 en prenant dans lordre les arcs (5, 1), (1, 2), (4, 2), (1, 3), (6, 3), (1, 4), (5, 4),
(2, 5), (3, 5), (6, 5), (1, 6) pour GV1 et (1, 2), (1, 3), (2, 3), (3, 4), (1, 5), (4, 5) pour GV2 .
Question 7.
En prenant les arcs dans lordre (1, 2), (3, 2), (4, 3), (1, 4), (5, 4), (1, 5), appliquer cet algorithme au graphe GV3 suivant :
5

1
4

1
2

Quel(s) commentaire(s) lutilisation de cet algorithme sur les graphes GV1 , GV2 et GV3
inspire-t-elle ?

Question 8.

213

## Pourrait-on amliorer cet algorithme ?

130 - Q 8

Question 9.
Comparer linterprtation de la valeur VCHVMIN[s] aprs son calcul au pas
j avec son homologue dans lalgorithme donn en rponse la question 2.

130 - Q 9

Aspects complmentaires
Comment pourrait-on complter ces algorithmes pour quils puissent aussi
Question 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
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
dune source donne tout sommet ?

## Exercice 131. Chemins de valeur minimale Algorithme de Roy-Warshall

et algorithme de Floyd Algbres de chemins

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.

## Prliminaire : existence de chemins, fermeture transitive et algorithme de RoyWarshall

On considre un graphe non valu G = (N, V) o :
il ny a pas de boucle,
les sommets sont tiquets de 1 n.
On sintresse tout dabord au calcul de la fermeture transitive G+ de G, cest--dire au
graphe G+ tel que lexistence dun chemin hx yi dans G sy traduit par la prsence
de larc (x, y). Lalgorithme de Roy-Warshall ralisant ce calcul repose sur une rcurrence
portant sur le numro maximal des sommets intermdiaires apparaissant dans les chemins
construits une tape donne. ltape i, on introduit larc (x, y) dans G+ si les deux
arcs (x, i) et (i, y) sont prsents dans G+ . Ceci exprime le fait que si dans G il y a un

130 - Q 10

130 - Q 11

130 - Q 12

214

## chemin de x i et un chemin de i y avec des sommets intermdiaires de numro au plus

gal (i 1), on a bien un chemin hx i yi dont le numro des sommets intermdiaires
nexcde pas i. En notant chemin(x, y, i) le prdicat reprsentant lexistence dans G dun
tel chemin, on a la rcurrence :
chemin(x, y, 0) = (x, y) V

chemin(x, y, i 1) ou



chemin(x, i, i 1) et
chemin(x, y, i) =
chemin(i, y, i 1)
131 - Q 1

131 - Q 2

16x
6 n et 1 6 y 6 n
1 6 i 6 n et
1 6 x 6 n et

16y6n

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.
Concernant les chemins non lmentaires, certains sont vus , mais leur
Question 2.
prise en compte dpend de la numrotation des sommets. Les graphes G1 et G2 :
2

1
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

131 - Q 4

131 - Q 5

## crire le code de lalgorithme driv de faon canonique de cette rcurrence,

Question 3.
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 ?
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.
Question 5.
On peut aussi amliorer la complexit temporelle en se dbarrassant de la
disjonction prsente dans la rcurrence et en remarquant que labsence dun chemin de x
i induit celle dun chemin de x y passant par i. Donner lalgorithme final (de RoyWarshall) tenant compte de toutes les remarques prcdentes et en prciser les complexits
spatiale et temporelle.

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

215

## valu GV = (N, V, P). Autrement dit, si dans GV on a plusieurs chemins dorigine si et

dextrmit sj , on conservera la valeur de celui de moindre valeur pour le couple (si , sj ).
Question 6.
Le principe de lalgorithme de Floyd consiste tirer parti de lalgorithme de
Roy-Warshall, en ladaptant, pour autant que le problme puisse tre rsolu sur lespace
des chemins lmentaires. Que dire de la prsence de circuits de valeur positive, nulle ou
ngative dans le graphe GV ?
Question 7.
Proposer une rcurrence permettant de calculer la valeur du (dun) chemin
optimal pour tout couple de sommets (x, y) du graphe valu GV ne possdant aucun circuit
posant problme.
Question 8.
En dduire le code de lalgorithme de Floyd. Prciser ses complexits spatiale
et temporelle.
Question 9.
Appliquer cet algorithme sur les graphes GV1 et GV2 donns plus loin. Lappliquer galement au graphe GV3 ci-aprs en relchant la prcondition sur les circuits
valeur ngative. Dans ce contexte, comment caractriser la prsence de circuit(s) valeur
ngative ?

131 - Q 6

131 - Q 7

131 - Q 8

131 - Q 9

10
2

GV1

-4

1
-1

3
4

10

-3

GV2

GV3

Question 10.
Donner deux faons diffrentes, fondes sur le principe du Petit Poucet ,
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
Dans lalgorithme de Roy-Warshall, on manipule les chemins au moyen de deux oprations, la disjonction ( ou logique) et la conjonction ( et logique), comme lillustre
la rcurrence donne dans lnonc. Ces oprateurs ont t remplacs dans lalgorithme

131 - Q 10

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 lalgorithme 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

131 - Q 14

## Pour tout couple de sommets, on souhaite calculer la valeur du (dun)

Question 13.
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.
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 ?

## Dans cet exercice, on sintresse un problme de cheminement dans un tableau

carr. On va voir quil se reformule comme un problme de cheminement dans
un graphe valu, ce qui justifie cette place dans le chapitre sur la programmation
dynamique. La solution dveloppe ici sera compare aux autres algorithmes de
cheminement dans les graphes tudis prcdemment dans ce chapitre.
On considre un tableau T J[1 .. n, 1 .. n] (n > 1) et on sintresse au calcul du meilleur
chemin allant de la case (n, 1) la case (1, n) de T J sachant que :

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

217

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)
b)
n)
c)
n)

## (i, j) (i, j+1) () si la pr-condition (j+1 6 n) est satisfaite,

(i, j) (i 1, j 1) (-) si la pr-condition (1 6 i 1 6
et (1 6 j 1 6 n) est vrifie,
(i, j) (i 1, j + 1) (%) si la pr-condition (1 6 i 1 6
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.
Exemple de tableau et de cheminement.
1
1
2
3

1 2 3

1 1
1

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.
On veut calculer par programmation dynamique la valeur ccm(n, 1) reprsentant le cot
dun chemin de cot minimal allant de la case (n, 1) la case (1, n).
Question 1.
Reformuler le problme comme la recherche dun chemin de valeur minimale
dans un graphe orient valu particulier. Expliciter le graphe associ au tableau T J ci-aprs :
1
1

2 4 1

132 - Q 1

2 6 2 1 3
3

5 2 3 3

0 10 2

Question 2.
Connaissant les valeurs associes aux cases du tableau T J, tablir la formule
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.

132 - Q 2

218
132 - Q 3

132 - Q 4
132 - Q 5

132 - Q 6

132 - Q 7

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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.
Question 4.

## Prciser comment pourra tre reconstitu le meilleur chemin.

Question 5.
Donner les valeurs de ccm, ainsi que le chemin optimal, dans le cas du
tableau T J de la question 1.
Question 6.
Quaurait-on obtenu si les valeurs des cases (4, 1) et (1, 4) de T J avaient t
respectivement 9 et 5 ?
Sur quelle autre rcurrence aurait pu tre fonde la solution de ce problme ?

Question 7.

## Exercice 133. Arbres binaires de recherche pondrs

Les arbres binaires de recherche (abr) sont une structure de donnes (voir chapitre 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 :

2
1

A1

A2

2
5

3
4
5

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

219

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 1.

## Quel est le nombre dabr contenant les valeurs x1 , . . . , xn ?

Question 2.
Soit sag(A) (resp. sad(A)) le sous-arbre gauche (resp. droit) dun abr A et
spr(A) la somme des probabilits associes aux valeurs des nuds de A. Si A est vide, on
pose spr(A) = 0. Montrer que :

133 - Q 1
133 - Q 2

## cabr(A) = cabr(sag(A)) + cabr(sad(A)) + spr(A).

Le vrifier sur les abr A1 et A2 de la figure 9.4, page 218. En dduire que les sous-arbres
gauche et droit dun abr de cot minimal sont eux-mmes de cot minimal, ce qui valide
le principe doptimalit de Bellman.
Question 3.
On remarquera que dans le contexte de cet exercice, le sous-arbre gauche
(resp. droit) de tout abr contient des valeurs dindices conscutifs. On appelle Ai,t labr
dont les valeurs sont xi , . . . , xi+t1 , et on pose la notation sp(i, t) = spr(Ai,t ). Donner
la rcurrence complte de calcul de copt(1, n), le cot de labr A1,n optimal (de cot
minimal).
Question 4.
Expliciter le principe de lalgorithme de programmation dynamique mettant
en uvre le calcul de copt(1, n). Donner les complexits spatiale et temporelle de cet
algorithme. Commenter le gain apport par cette solution par rapport la combinatoire
voque la question 1.
Question 5.

i

xi

pi

0.05

0.1

0.2

0.15

0.5

133 - Q 3

133 - Q 4

133 - Q 5

Question 6.
page 197).

133 - Q 6

220

## Exercice 134. Ensemble indpendant de poids maximal dans un arbre

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 :
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

4 10

3
3

7
9

4
8

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 :

221

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.

constantes
aqe = {/} {(id, pds, vso, eso, fls) | id N1 et pds N1 et
vso N1 et eso N1 et fls aqe}
variables
t aqe
dbut
t (1, 7, 15, {1, 6},
{(2, 1, 1, {2}, /), (3, 4, 8, {6}, {(6, 8, 8, {6}, /)}), (4, 2, 2, {4}, /), (5, 2, 2, {5}, /)}) ;
pour e t.fls faire
crire(le nud didentit , e.id, a le poids , e.pds)
fin pour
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
2

7
4

Fig. 9.6 Larbre du programme exemple o ne figurent que les identifiants et les poids
des diffrents nuds.

## Soit u un nud de a dont les fils sont v1 , . . . , vc et les petits-fils w1 , . . . , wg . On note

Su un ensemble indpendant de poids maximal pour le sous-arbre de racine u.
Montrer que :
Question 1.
si u 6 S , alors Su = Sv1 Svc , o Svi est un ensemble indpendant de poids
maximal pour larbre de racine vi ,
si u S , alors Su = {u} Sw1 Swg , o Swi est un ensemble indpendant de poids
maximal pour larbre de racine wi .
En dduire une relation de rcurrence permettant de calculer le poids de
Question 2.
S = Sr , le sous-ensemble indpendant de poids maximal de larbre a de racine r.
Question 3.
On suppose disponible lopration procdure Collecte(a ; : modif vof, vopf,
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.

134 - Q 1

134 - Q 2

134 - Q 3

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.
Exemple Avec larbre
1
2
4

7, 7, {4},

4, /, /, /

3, 3, {2}, {4, 5}
5

2, 2, {3},

6, 6, {5},

o tout nud est tiquet par son identifiant et complt par ses quatre autres composants ; lappel de Collecte retourne 5 pour vof, 13 pour vopf, {2, 3} pour eof et {4, 5} pour
eopf.
Expliciter un algorithme de programmation dynamique pour calculer simultanment S et
son poids. Quelle en est la complexit temporelle en prenant la visite dun nud comme
opration lmentaire ?
134 - Q 4

Question 4.
Appliquer cet algorithme larbre de la figure 9.5 page 220, pour en dterminer 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 :
les lments sont pris de gauche droite dans x,
les lments croissent strictement de gauche droite.
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.

223

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

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.

135 - Q 1

Question 2.

135 - Q 2

## Pourquoi nest-il pas possible de calculer lssc(x) en (n) avec un algorithme

Question 3.
analogue au prcdent ?
Question 4.
On va construire un algorithme de programmation dynamique qui calcule
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

10

u[i]

11

lssct(i)

135 - Q 3

135 - Q 4

Connaissant lssct(1), . . . , lssct(n), le calcul de lssc(x) est immdiat par une boucle recherchant 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, permettant de plus didentifier ultrieurement une sous-squence de cette longueur. On en
prcisera les complexits spatiale et temporelle.
Question 5.

## Exercice 136. Plus courte sur-squence commune

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.
En dbut de chapitre, on a tudi le problme de la recherche de la plus longue soussquence commune deux squences et on sintresse maintenant celui de la dtermination de la plus courte sur-squence commune deux squences. Par exemple, si u = actuel
et v = actionne, la squence anticonstitutionnellement est une sur-squence qui leur est
commune de longueur 25. Cependant, une de leurs plus courtes sur-squences communes
est actuionnel de longueur 10, et leur unique plus longue sous-squence commune est acte
de longueur 4.
Soit x et y deux squences. On note lssc(i, j) (resp. cssc(i, j) la longueur de la (dune)
plus longue sous-squence (resp. plus courte sur-squence) commune aux prfixes de longueur j de x et de longueur i de y.

224
136 - Q 1

136 - Q 2

136 - Q 3
136 - Q 4

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Question 1.
En sinspirant de celle tablie dans lexercice trait en dbut de chapitre,
donner une rcurrence complte de calcul de cssc.
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.
Question 3.

## Appliquer cet algorithme aux squences u =

vache et v = veau.

Question 4.
on a :

Montrer que pour tout couple de squences x, y tel que |x| = m et |y| = n,

lssc(n, m) + cssc(n, m) = m + n.
Le vrifier pour u =

## Exercice 137. Distance entre squences : algorithme de Wagner

et Fischer

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.
Soit deux squences x et y et deux super-squences de x et de y de mmes longueurs
construites sur lalphabet . On appelle alignement entre x et y la mise en correspondance lettre lettre des deux super-squences. Par exemple, entre les squences u = bcaa
et v = acbca, on peut crer lalignement :

## avec u 0 = bcaa et v 0 = acbca.

Une formulation alternative de lalignement entre deux squences est celle de trace ,
dans laquelle on utilise les squences sans y insrer de caractre . La trace correspondant
lexemple prcdent est :

225

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

Une trace doit tre telle que deux traits dassociation entre lettres ne se croisent jamais. 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

4. suppression de

2.

5. transformation de

a
insertion de c

3. transformation de

b en b

a en c
transformation de a en a

6.

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

1
0
1.5
1.2

1
1.5
0
1.7

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 :

## 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 :
1. Parfois plusieurs, mais ils ont la mme interprtation.

226

a
|

## pour un cot (moindre) de 1.5 (transformation de b en a) + 0 (transformation de c en

c) + 1.5 (transformation de a en b) + 1 (insertion de c) + 0 (transformation de a en a) = 4.
On remarquera quun alignement associant des paires de symboles ne prsente pas
dintrt. En effet, un tel alignement algn est quivalent au sens du cot un autre
alignement algn 0 priv des paires de symboles , puisque pour toute matrice , on a
(, ) = 0. Par exemple, lalignement algn :

## a le mme cot que lalignement algn 0 :

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 coteux, entre deux squences x et y. On appelle (x, y) le cot dun (de l)alignement optimal 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 chemin 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 remarque 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
|

## entre les squences u =

b
|

acbca et v = bcaa.

227

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

4/0

4/1

4/2

4/3

4/4

4/5

3/0

3/1

3/2

3/3

3/4

3/5

2/0

2/1

2/2

2/3

2/4

2/5

1/0

1/1

1/2

1/3

1/4

1/5

0/0

0/1

0/2

0/3

0/4

0/5

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
(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.

137 - Q 2

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
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
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
alignement optimal entre x et y en fonction dun alignement optimal entre x et y ?

137 - Q 4

137 - Q 5

137 - Q 6

228
137 - Q 7

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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 ?

## Exercice 138. Dissemblance entre chanes

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 alphabet . 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 :

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

0
2
1.5

2
0
1

1.5
1
0

## lassociation vue ci-dessus entre les squences u =bcaa et v =

acbca :

h(1, 1), (1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5)i
a comme cot :














b, a + b, c + b, b + c, b + c, c + a, a + a, a =
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
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
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,
puis crire le programme effectuant le calcul de la dissemblance entre deux squences. Quels
en sont les complexits spatiale et temporelle ?
Appliquer lalgorithme avec u =acbca et v =bcaa pour la matrice donne
Question 4.
auparavant.
Question 5.
Expliquer comment reconstituer une (l)association optimale. En donner une
pour lexemple prcdent.
Question 6.
Comment un tel programme pourrait-il servir dans un correcteur orthographique de traitement de texte (dont on mettra en vidence les limites) ?

138 - Q 1

138 - Q 2

138 - Q 3

138 - Q 4

138 - Q 5

138 - Q 6

230

## Exercice 139. Plus lourd et moins balourd

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

## Par exemple, pour les six lphants suivants :

i

pds

2300

2000

2800

2100

2500

2600

int

14

13

11

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

139 - Q 2

139 - Q 3

Donner le principe dune solution par essais successifs. Quelle en est la comQuestion 1.
plexit au pire ?
Question 2.
Proposer une solution fonde sur la programmation dynamique ce problme. Comparer sa complexit celle de la solution prcdente.
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 trouver une bonne stratgie de triangulation, ce qui constitue un des points cls
de la rsolution.
Un polygone P du plan possdant n sommets (n > 3) est par dfinition convexe si et
seulement si, quand on construit une droite sur deux sommets conscutifs quelconques, les
(n2) sommets restants sont du mme ct de cette droite. Une corde de polygone convexe
est dfinie comme le segment joignant deux sommets non adjacents. Une triangulation
dun polygone convexe P est un ensemble de cordes tel que :
deux cordes ne se coupent pas,
les cordes divisent compltement le polygone en triangles.
s2 (8, 26) s3 (15, 26)
s4 (27, 21)

s1 (0, 20)

s5 (22, 12)

s0 (0, 10)

s6 (10, 0)
Fig. 9.7 Un heptagone et une triangulation de valeur approximativement gale 77.56
` 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 supposerons 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 .
Une premire stratgie de triangulation (appele UnTrUnPol) venant assez naturellement lesprit consiste sparer un polygone n cts (n > 3) en un triangle et un
polygone ayant (n 1) cts. Une telle approche prsente linconvnient majeur damener considrer plusieurs fois la mme triangulation. Par exemple, avec lheptagone de
la figure 9.7, page 231, la triangulation partielle de la figure 9.8 est obtenue : i) en sparant le polygone initial en un triangle de sommets s0 , s1 et s2 et un polygone de sommets
s0 , s2 , s3 , s4 , s5 , s6 , puis en sparant ce dernier polygone en un triangle de sommets s3 , s4

232

## et s5 et un polygone de sommets s0 , s2 , s3 , s5 , s6 , mais aussi ii) en procdant linverse en

sparant le polygone initial en un triangle de sommets s3 , s4 et s5 et un polygone de sommets s0 , s1 , s2 , s3 , s5 , s6 , puis en sparant ce dernier polygone en un triangle de sommets
s0 , s1 et s2 et un polygone de sommets s0 , s2 , s3 , s5 , s6 .Avec cette dmarche, le nombre de
triangulations nbtr1(n) examines pour un polygone de n cts est donn par :
nbtr1(3) = 1
nbtr1(4) = 2
nbtr1(n) = n nbtr1(n 1)

n>5

## soit nbtr1(n) = n!/12 pour n > 3, ce qui est pire quexponentiel.

s2

s3
s4

s1
s5

s0

s6
Fig. 9.8 Une triangulation partielle de lheptagone de la figure 9.7

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

...

si+2

si+1 si

...

si+1 si
Fig. 9.9 La stratgie de triangulation retenue

si1

si+1 si

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

233

Question 1.
Calculer le nombre nbtr2(n) de triangulations engendres par la stratgie
UnTrDeuxPol pour un polygone ayant n cts. Lexprimer comme un nombre de Catalan
(voir page ??) et le comparer nbtr1(n), le nombre de triangulations obtenu avec la
stratgie UnTrUnPol. quels autres problmes de ce chapitre nbtr2(n) fait-il penser ?
Question 2.
La stratgie UnTrDeuxPol propose vaut en particulier si lon choisit comme
ct de rfrence (sn1 , s0 ) qui dcompose le polygone initial en :

140 - Q 1

140 - Q 2

## 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

si+t1

o k varie de 2 (t 2). Expliquer pourquoi le polygone P doit tre convexe pour que
cette stratgie soit convenable.
Question 3.
On appelle lgtrmin(i, t) la longueur de la (dune) triangulation optimale du
polygone de sommets si , . . . , si+t1 avec i + t 1 < n. tablir la rcurrence de calcul de
lgtrmin(i, t).
Donner les lments (structure tabulaire, stratgie de remplissage, emplaceQuestion 4.
ment de la solution recherche) dun algorithme dcoulant de la formule prcdente. En
prciser les complexits spatiale et temporelle.
Question 5.

s3 (8, 22)
s4 (16, 20)
s5 (20, 17)
s2 (2, 13)

s6 (21, 13)
s7 (20, 5)

s1 (0, 4)
s0 (5, 0)

s8 (15, 1)

140 - Q 3

140 - Q 4

140 - Q 5

234

## en calculant non seulement la valeur de la triangulation optimale, mais aussi lidentification

des cordes la composant.

## Exercice 141. Plus grand carr noir

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

Fig. 9.10 Une image noir et blanc 6 8 et son plus grand carr noir (encadr)

141 - Q 1

141 - Q 2

141 - Q 3

141 - Q 4

## On va tout dabord construire une solution itrative en utilisant la procdure

Question 1.
dfinie dans lexercice 114 page 173, calculant le ct du plus grand carr sous un histogramme. 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.
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.
Question 3.
Expliciter la structure tabulaire utiliser pour la mise en uvre et la stratgie permettant de la remplir.
Question 4.
Donner lalgorithme de programmation dynamique correspondant, en prcisant ses complexits spatiale et temporelle. Comparer la complexit temporelle celle de
la solution itrative.

4
3

235

9 10

Question 5.

141 - Q 5

## 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.

## On dispose dune image binaire sous forme de matrice de pixels IMG[1 .. m, 1 .. n] (m

lignes, n colonnes), dont les lments valent 0 (blanc) ou 1 (noir). On cherche partitionner
(ou segmenter) limage en un ensemble de rectangles entirement noirs ou entirement
blancs. La technique utilise est celle de la guillotine , dont la rgle est la suivante :
tant donn un rectangle, on a le droit de le partager en deux rectangles plus petits soit par
un trait horizontal, soit par un trait vertical. Le problme est de trouver le nombre minimal
de coups de guillotine pour sparer compltement les pixels noirs des pixels blancs.
Dans lexemple ci-aprs dune image 4 5, la segmentation propose (qui nest pas
rpute optimale) requiert sept coups de guillotine (traits reprs par une flche).

236
142 - Q 1

142 - Q 2

142 - Q 3

142 - Q 4

142 - Q 5

142 - Q 6

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Question 1.
Reprsenter la segmentation prcdente par un arbre dont chaque nud
(feuilles comprises) est associ lun des rectangles (par exemple en coordonnes cartsiennes). Larbre est-il unique ? Combien de nuds internes (non feuilles) possde-t-il ?
Quelle proprit ont les feuilles ?
Question 2.
guillotine ?

Comment peut-on introduire dans cet arbre une numrotation des coups de

## tablir une relation de rcurrence pour calculer le nombre minimal de coups

Question 3.
de guillotine ncessaires pour segmenter une image quelconque de m lignes et n colonnes
(m, n > 1).
Question 4.
Proposer une structure tabulaire et expliciter la stratgie gouvernant son
remplissage.
Donner le code de lalgorithme de segmentation optimale. Quelles en sont
Question 5.
les complexits spatiale et temporelle ?
Question 6.

## Appliquer lalgorithme limage 3 4 ci-aprs :

5

5
5

9.1.6 Jeux
Exercice 143. Empilement de briques

Cet exercice, comme quelques autres, ncessite une tape pralable danalyse menant une nouvelle formulation du problme. En effet, le problme initial considre 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 assez 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 .
On cherche faire un empilement de hauteur maximale. On commence par poser une
brique sur une de ses faces, puis une seconde sur la premire, les cts parallles, puis une
troisime, etc. La contrainte est que lon ne peut poser une brique sur le tas en construction
que si la face que lon pose est strictement incluse dans les deux dimensions dans la face
suprieure de la brique prcdente. Autrement dit, chaque nouvelle brique, lempilement
rtrcit strictement.

## CHAPITRE 9. PROGRAMMATION DYNAMIQUE

237

Question 1.
Montrer quil y a au plus trois faons rellement diffrentes de poser une
nouvelle brique sur une brique dj pose.
Question 2.
Montrer que, dans un empilement, il ne peut y avoir au plus que deux briques
dun type donn.
Question 3.
Reformuler le problme comme un empilement optimal, avec un choix non
plus parmi un nombre illimit de briques, mais parmi 3n objets diffrents.
Donner la formule de rcurrence permettant de construire lempilement le
Question 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 respectives 10 12 16, 8 9 18 et 4 6 25.

## Exercice 144. Gain maximum au jeu patagon

143 - Q 1

143 - Q 2

143 - Q 3

143 - Q 4

143 - Q 5

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 valeurs 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 lexercice 18 page 11, on a tudi le nombre de faons raisonnables de jouer
not nfr, autrement dit la combinatoire du jeu. Celle-ci se rvle exponentielle puisque
avec un tableau T de taille n, nfr est lentier le plus proche de (1.324 )n1 /1.045 .
On va montrer que lon peut trouver la valeur sopt(n) sans examiner lensemble exhaustif
de ces candidats.
Question 1.
Que penser de lalgorithme glouton qui procde par paire de valeurs de T et
choisit, pour autant que la contrainte soit satisfaite, la plus grande valeur ?
Question 2.

## tablir une relation de rcurrence complte de calcul de sopt(n).

Question 3.
En dduire un algorithme de programmation dynamique qui calcule sopt
et permet de produire ultrieurement un ensemble I associ. Quelle en est la complexit
temporelle ? La situer par rapport nfr.

144 - Q 1

144 - Q 2
144 - Q 3

Question 4.

144 - Q 4

Question 5.

144 - Q 5

238

## Dans ce jeu de stratgie, le but est dliminer un maximum de robots arrivant

par vagues successives. Loutil de destruction dont on dispose est dautant plus
puissant que le temps de charge est long, mais quand il est dclench, il ne dtruit
que des robots de la vague venant darriver.

Dans ce jeu, il sagit dliminer un maximum des robots ennemis qui attaquent une plante. 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

f(i)

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.
Plusieurs solutions soffrent au joueur pour grer le rechargement et la mise en action de
la MVR. Toujours dans lexemple prcdent, on peut choisir de dclencher la vaporisation
chaque instant. Au dpart (instant 0), la machine na aucune capacit. linstant 1, la
machine est recharge au niveau 1, dclenche et vaporise lunique robot venant darriver.
Ensuite, elle vaporise un des dix robots arrivs linstant 2, puis un des dix robots arrivs
linstant 3, et enfin le seul robot arrivant linstant 4. Au total, avec cette stratgie,
seulement quatre robots sont dtruits. Si on avait attendu linstant 3 pour le premier tir,
la MVR aurait t recharge au niveau 4 et aurait limin quatre robots. En la dclenchant
encore linstant 4 (auquel la MVR est charge au niveau 1), elle vaporise le robot arrivant
cet instant. Au total, cinq robots sont dtruits, ce qui est mieux que les quatre de la
premire option.

239

## Le problme est de trouver la tactique optimale de recharge et de dclenchement de la

MVR qui permet, tant donne une attaque de robots, den vaporiser le maximum. Pour
formaliser, notons qrob(i) la quantit strictement positive de robots qui arrivent chaque
instant i et f(j) le niveau de rechargement de la MVR quand on attend j instants. Si la
machine est dclenche linstant i avec un niveau M, le nombre de robots vaporiss
est gal min({qrob(i), M}). Notons nbrvopt(j) le nombre de robots vaporiss en suivant
la tactique optimale, en supposant que la squence des robots sarrte linstant j. On
cherche donc nbrvopt(n), o n est linstant darrive du dernier groupe de robots.
Question 1.

## Commenter la situation o la fonction de chargement de la MVR est f(i) = i.

Question 2.
Dfinir nbrvopt(j) (j > 0) en fonction de nbrvopt(i) pour 0 6 i < j, qrob(j)
et f. En dduire la rcurrence complte permettant le calcul de nbrvopt(n).
Question 3.
Spcifier la structure tabulaire utiliser par un algorithme de programmation dynamique rsolvant ce problme et la progression de son remplissage. Quelles sont
les complexits temporelle et spatiale de cet algorithme ?
Question 4.

145 - Q 2

145 - Q 3

145 - Q 4

## n = 6, qrob(1) = 3, qrob(2) = 5, qrob(3) = 2, qrob(4) = 4, qrob(5) = 3, qrob(6) = 2,

f(1) = 1, f(2) = 2, f(3) = 4, f(4) = 6, f(5) = 9, f(6) = 12.

## Exercice 146. Jeu des extrmes

145 - Q 1

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
146 - Q 1

146 - Q 2

146 - Q 3

146 - Q 4

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

Question 1.
Montrer sur un exemple que le gain maximal nest pas toujours gal la
somme des n plus grandes valeurs des cartes.
Question 2.
Donner une rcurrence qui permet de calculer le gain final maximal du joueur
qui joue le premier.
Question 3.
En dduire un algorithme de complexits spatiale et temporelle en (n2 )
pour calculer cet optimum.
Question 4.

## Fournir une trace de lexcution de cet algorithme avec la ligne de cartes :

12

146 - Q 5

10

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

146 - Q 7

146 - Q 8
146 - Q 9

Donner une rcurrence qui permet de calculer le gain final maximal du joueur
Question 6.
qui joue le premier, en tenant compte du fait que chaque joueur cherche maximiser son
propre gain.
Dcrire le principe de lalgorithme calculant cet optimum. Prciser o se
Question 7.
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.
Question 8.

## Appliquer cet algorithme sur la ligne de six cartes donne prcdemment.

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 ?

241

## 9.1.7 Problmes pseudo-polynomiaux

Exercice 147. Le petit commerant

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 comportant 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].
Pour achever de dfinir le problme, on va supposer que le commerant cherche redonner le moins de pices possibles. On peut donc lappeler RLMMO comme rendre la
monnaie de manire optimale et lnoncer comme suit. On se donne un ensemble C.
chaque lment ci de C est associe une valeur di , un nombre entier strictement positif,
tout comme N, la somme rendre. Trouver un multiensemble S compos dlments de C
tel que :
la somme des valeurs des lments de S vaille exactement N,
le nombre des lments de S soit minimum.
Sil nexiste aucun multiensemble rpondant au premier des deux critres ci-dessus, le
problme est dclar insoluble. Cette situation peut survenir notamment si le systme
montaire ne comporte pas de pice de valeur unitaire.

## Un algorithme glouton rapide, mais pas toujours exact

La mthode employe en gnral par un commerant peut se dcrire ainsi : utiliser les
pices par valeur dcroissante, en prenant le plus possible de chacune delles. Cest cet algorithme glouton qui, dans lexemple introductif, produit la premire solution Jc2 , c3 , c4 , c4 K.

242
147 - Q 1

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

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
147 - Q 3

147 - Q 4

147 - Q 5

Question 2.

## Donner la rcurrence complte dfinissant nbpmin.

Question 3.
En dduire le principe dun algorithme pseudo-polynomial (voir section ??,
page ??) dont on prcisera la complexit temporelle, fond sur la programmation dynamique, dterminant le nombre de pices que comporte la solution optimale.
Question 4.
Lappliquer pour N = 12 avec le systme montaire C = {c1 , c2 , c3 }, avec
d1 = 4, d2 = 5, d3 = 1.
Comment complter lalgorithme pour savoir quelles pices sont rendues et
Question 5.
en quelles quantits ?

Notations
exp1 =
b exp2
ident exp1 exp2
ident exp1 et exp2
X

exp2

exp1

#ident exp
dexpe
bexpc
|exp|
{exp1 , . . . , expn }
{ListeIdent | exp}
exp1 .. exp2
exp1 exp2
exp1 exp2
(exp1 , exp2 )
(exp1 , . . . , expn )
exp1 exp2
exp1 exp2
ident[exp1 , . . . , expn ]
ident[exp .. exp]
[exp1 , . . . , expn ]

exp1,1 exp1,n

..
..

.
expm,1 expm,n

exp1 <
exp2
Jexp1 , . . . , expn K
exp2
exp1
exp1 u exp2
exp1 t exp2
exp1 < exp2
exp1 6< exp2
exp1 v exp2
exp1 6v exp2
hexp1 , . . . , expn i
B
C
card(exp)
|
chane
chane(exp)
codom(exp)
dom(exp)
im(exp)
max(exp)

dfinition
quantification universelle
quantification
existentielle

## Variante du quantificateur daddition.

Somme des valeurs exp2

## lorsque exp1 est satisfaite.

comptage : nombre de fois o le prdicat exp est satisfait
oprateur plafond : plus petit entier suprieur ou gal exp
oprateur plancher : plus grand entier infrieur ou gal exp
valeur absolue ou taille dune entit (liste, sac, etc.)
ensemble dfini en extension
ensemble dfini en comprhension
intervalle de relatifs
soustraction densembles
produit cartsien
couple (lment dun produit cartsien)
nuplet (extension de la notion de couple)
composition de relations

## exp1 : intervalle ou produit cartsien dintervalles,

exp2 : ensemble quelconque,

## ensemble des fonctions de exp1 dans exp2

lment du tableau ident, n dimensions
tranche de tableau une dimension
constante de tableau une dimension
constante de tableau deux dimensions
constante reprsentant le sac vide
prdicat dappartenance un sac
dfinition dun sac en extension
soustraction de sacs
intersection de sacs
union de sacs
prdicat dinclusion stricte de sacs
prdicat de non inclusion stricte de sacs
prdicat dinclusion au sens large de sacs
prdicat de non inclusion au sens large de sacs
liste de n valeurs
ensemble des boolens ({vrai, faux})
nombres complexes
cardinal dun ensemble
ensemble des chanes de caractres
ensemble des chanes de caractres sur le vocabulaire exp
codomaine de la relation exp
domaine de la relation exp
partie imaginaire du complexe exp
plus grand lment dun ensemble numrique (si vide : )

244

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

max (exp2 )

exp1

min(exp)
min (exp2 )

exp1

mult(exp1 , exp2 )
N
N1
pred(exp1 , exp2 )
P(exp)
R
R+
R+
re(exp)
sac(exp)

## soit v1 , . . . , v2 tel que

exp
dbut

instr

fin
smax(exp)
smin(exp)
succ(exp1 , exp2 )
Z
dxe
bxc
[
exp2
exp1
\

exp2

## Quantificateur max. Plus grand lment dune expression exp2

lorsque exp1 est satisfaite.
plus
petit lment dun ensemble numrique (si vide : )

Quantificateur min. Plus petit lment dune expression exp2
lorsque exp1 est satisfaite.
multiplicit de llment exp1 dans le sac exp2
entiers naturels
N {0}
prdcesseur de llment exp1 dans la relation binaire exp2
ensemble des parties finies de lensemble exp
rels numriques
rels positifs ou nuls numriques
rels strictement positifs numriques
partie relle du complexe exp
ensemble des sous-sacs finis du sac exp
instruction qui permet de spcifier les variables v1 , . . . , vn
et de localiser leurs dclarations
plus grand lment dun sac numrique (si vide : )
plus petit lment dun sac numrique (si vide : )
successeur de llment exp1 dans la relation binaire exp2
entiers relatifs
pour x rel, dxe =
b min({m Z | m > x}) (voir [31])
pour x rel, bxc =
b max({m Z | m 6 x}) (voir [31])
quantificateur gnralisant loprateur (union ensembliste)
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 galement 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, lexpression #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 lment neutre unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 lment minimum dun ensemble muni dun ordre partiel . . . . . . . . . .
3 Factorielle et exponentielle . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 Par ici la monnaie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 Nombres de Catalan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 Dmonstrations par rcurrence simple errones . . . . . . . . . . . . . . . .
7 Dmonstration par rcurrence forte errone dune formule pourtant exacte
8 Schma alternatif de dmonstration de rcurrence deux indices . . . . . .
9 De 7 77 et plus si . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10 Une petite place svp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11 Suite du lzard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 propos de la forme close de la suite de Fibonacci . . . . . . . . . . . . .
13 Nombre darbres binaires n nuds . . . . . . . . . . . . . . . . . . . . .
14 Identification dune forme close . . . . . . . . . . . . . . . . . . . . . . . .
15 Dplacements dun cavalier sous contrainte . . . . . . . . . . . . . . . . . .
16 Nombre de partitions p blocs dun ensemble n lments . . . . . . . .
17 La monte de lescalier . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18 Le jeu patagon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19 Le jeu deux tas de jetons . . . . . . . . . . . . . . . . . . . . . . . . . . .
20 Les pices jaunes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 Mlange de mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

1
1
1
2
2
3
4
5
6
6
7
7
8
8
9
9
10
11
11
12
14
15

## Chapitre 2. Complexit dun algorithme

22 propos de quelques fonctions de rfrence
23 Proprit des ordres de grandeur O et . .
24 Variations sur les ordres de grandeur O et
25 Ordre de grandeur : polynmes . . . . . . .
26 Ordre de grandeur : paradoxe ? . . . . . . .
27 Un calcul de complexit en moyenne . . . .
28 Trouver un gu dans le brouillard . . . . . .
Chapitre 3. Spcification, invariants, itration
29 Les haricots de Gries . . . . . . .
30 On a trouv dans une poubelle . . .
31 Somme des lments dun tableau
32 Recherche dans un tableau deux
33 Tri par slection simple . . . . . .
34 sope reste ici et se repose . . . .
35 Drapeau hollandais revisit . . . .
36 Les sept et les vingt-trois . . . . .
37 Le Me zro . . . . . . . . . . . . .
38 Alternance pair impair . . . . .
39 Plus longue squence de zros . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

17
17
17
18
18
19
19
20

. . . . . . .
. . . . . .
. . . . . . .
dimensions
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

23
23
23
24
25
25
27
27
28
29
29
31

246
40
41
42
43

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

lment majoritaire . . . . . . . . . . . . . . .
Cherchez la star . . . . . . . . . . . . . . . . .
Affaiblissement de la prcondition . . . . . . .
Meilleure division du primtre dun polygone

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

32
34
35
37

## Chapitre 4. Diminuer pour rsoudre, rcursivit

44 Double appel rcursif . . . . . . . . . . . . . . . . . .
45 Complexit du calcul rcursif de la suite de Fibonacci
46 Le point dans ou hors polygone . . . . . . . . . . . . .
47 Dessin en doubles carrs imbriqus . . . . . . . . . . .
48 Dessin en triangles . . . . . . . . . . . . . . . . . . . . .
49 Parcours exhaustif dun chiquier . . . . . . . . . . . .
50 Courbes de Hilbert et W-courbes . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

41
41
41
43
43
45
46
47

## Chapitre 5. Essais successifs

51 Le problme des n reines . . . . . . . . . . . . . . . .
52 Les sentinelles . . . . . . . . . . . . . . . . . . . . . .
53 Parcours dun cavalier aux checs . . . . . . . . . . .
54 Circuits et chemins eulriens tracs dun seul trait
55 Chemins hamiltoniens : les dominos . . . . . . . . . .
56 Le voyageur de commerce . . . . . . . . . . . . . . . .
57 Isomorphisme de graphes . . . . . . . . . . . . . . . .
58 Coloriage dun graphe . . . . . . . . . . . . . . . . . .
59 lections prsidentielles lamricaine . . . . . . . .
60 Crypto-arithmtique . . . . . . . . . . . . . . . . . . .
61 Carrs latins . . . . . . . . . . . . . . . . . . . . . . .
62 Le jeu de sudoku . . . . . . . . . . . . . . . . . . . . .
63 Sept onze . . . . . . . . . . . . . . . . . . . . . . . .
64 Dcomposition dun nombre entier . . . . . . . . . .
65 Madame Dumas et les trois mousquetaires . . . . . .
66 Mini Master Mind . . . . . . . . . . . . . . . . . . . .
67 Le jeu des mots cass . . . . . . . . . . . . . . . . . .
68 Tableaux autorfrents . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

49
49
51
53
57
59
61
62
64
65
65
67
68
69
70
71
72
75
77

## Chapitre 6. Sparation et Evaluation Progressive

69 Assignation de tches . . . . . . . . .
70 Le voyageur de commerce (le retour)
71 Le taquin . . . . . . . . . . . . . . . .
72 Le plus proche voisin . . . . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

79
79
81
82
85

.
.
.
.

87
87
87
89
89

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

## Chapitre 7. Algorithmes gloutons

73 la recherche dun algorithme glouton . . . . . . . . . . . . . . . . . . . . .
74 Arbres binaires de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . .
75 Les relais pour tlphones portables . . . . . . . . . . . . . . . . . . . . . . .
76 Ordonner des achats dont le prix varie . . . . . . . . . . . . . . . . . . . . .
77 Plus courts chemins dans un graphe partir dun sommet donn : lalgorithme
de Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78 Compression de donnes : lalgorithme de Huffman . . . . . . . . . . . . . .
79 Fusion de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 90
. 94
. 100

247

80
81
82
83
84
85

## Coloriage dun graphe avec deux couleurs . . . . . . . .

Carrs magiques dordre impair . . . . . . . . . . . . .
Dun ordre partiel un ordre total : le tri topologique
Encore le photocopieur . . . . . . . . . . . . . . . . . .
Tournois et chemins hamiltoniens . . . . . . . . . . . .
Un problme dpinglage . . . . . . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

102
107
108
110
112
113

## Chapitre 8. Diviser pour Rgner

86 Le tri-fusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87 Recherches dichotomique, trichotomique et par interpolation . . . . .
88 Recherche dun point fixe . . . . . . . . . . . . . . . . . . . . . . . . .
89 Le pic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90 Tableau tri cyclique . . . . . . . . . . . . . . . . . . . . . . . . . . .
91 Minimum local dans un arbre binaire . . . . . . . . . . . . . . . . . .
92 Diamtre dun arbre binaire . . . . . . . . . . . . . . . . . . . . . . .
93 Le problme de la slection et de la recherche de llment mdian .
94 crous et boulons . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
95 La fausse pice division en trois et quatre tas . . . . . . . . . . . .
96 La valeur manquante . . . . . . . . . . . . . . . . . . . . . . . . . . .
97 Le meilleur intervalle . . . . . . . . . . . . . . . . . . . . . . . . . . .
98 Le sous-tableau de somme maximale . . . . . . . . . . . . . . . . . .
99 Pavage dun chiquier par des triminos . . . . . . . . . . . . . . . . .
100 La btire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
101 Nombre dinversions dans une liste de nombres . . . . . . . . . . . .
102 Le dessin du skyline . . . . . . . . . . . . . . . . . . . . . . . . . . .
103 La suite de Fibonacci . . . . . . . . . . . . . . . . . . . . . . . . . .
104 lment majoritaire (le retour) . . . . . . . . . . . . . . . . . . . . .
105 Les deux points les plus proches dans un plan . . . . . . . . . . . .
106 Distance entre squences : lalgorithme de Hirschberg . . . . . . . .
107 Lenveloppe convexe . . . . . . . . . . . . . . . . . . . . . . . . . . .
108 La sous-squence bgue . . . . . . . . . . . . . . . . . . . . . . . . .
109 La transforme de Fourier rapide (FFT) . . . . . . . . . . . . . . . .
110 Le produit de polynmes . . . . . . . . . . . . . . . . . . . . . . . .
111 Loi de Coulomb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
112 Lchers dufs par la fentre . . . . . . . . . . . . . . . . . . . . . .
113 Recherche dun doublon dans un sac . . . . . . . . . . . . . . . . . .
114 Le plus grand carr et le plus grand rectangle sous un histogramme

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

115
115
115
117
118
118
120
120
121
122
123
125
125
126
127
129
130
132
135
137
140
144
151
155
158
162
165
166
170
173

## Chapitre 9. Programmation dynamique

115 Approximation dune fonction chantillonne
une ligne brise . . . . . . . . . . . . . . . . .
116 Le meilleur intervalle (le retour) . . . . . . .
117 Installation de stations-service . . . . . . . .
118 Le voyageur dans le dsert . . . . . . . . . .
119 Formatage dalina . . . . . . . . . . . . . . .
120 Codage optimal . . . . . . . . . . . . . . . . .
121 Dcoupe de barre . . . . . . . . . . . . . . . .
122 Affectation de dure des tches . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

187
par
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

188
190
191
192
193
195
195
196

248
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147

## Produit chan de matrices . . . . . . . . . . . . . . . . . . .

Dcoupe de planche . . . . . . . . . . . . . . . . . . . . . . .
Les pilleurs de coffres . . . . . . . . . . . . . . . . . . . . . .
Trois problmes dtagres . . . . . . . . . . . . . . . . . . .
Distribution de skis . . . . . . . . . . . . . . . . . . . . . . .
Lchers dufs par la fentre (le retour) . . . . . . . . . . . .
Chemin de valeur minimale dans un graphe particulier . . .
Chemins de valeur minimale depuis une source
Algorithme de Bellman-Ford . . . . . . . . . . . . . . . . . .
Chemins de valeur minimale Algorithme de Roy-Warshall
et algorithme de Floyd Algbres de chemins . . . . . . . .
Chemin de cot minimal dans un tableau . . . . . . . . . . .
Arbres binaires de recherche pondrs . . . . . . . . . . . . .
Ensemble indpendant de poids maximal dans un arbre . . .
Plus longue sous-squence croissante . . . . . . . . . . . . . .
Plus courte sur-squence commune . . . . . . . . . . . . . . .
Distance entre squences : algorithme de Wagner
et Fischer . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dissemblance entre chanes . . . . . . . . . . . . . . . . . . .
Plus lourd et moins balourd . . . . . . . . . . . . . . . . . . .
Triangulation optimale dun polygone convexe . . . . . . . .
Plus grand carr noir . . . . . . . . . . . . . . . . . . . . . . .
Segmentation dune image . . . . . . . . . . . . . . . . . . . .
Empilement de briques . . . . . . . . . . . . . . . . . . . . .
Gain maximum au jeu patagon . . . . . . . . . . . . . . . . .
Vaporisation des robots . . . . . . . . . . . . . . . . . . . . .
Jeu des extrmes . . . . . . . . . . . . . . . . . . . . . . . . .
Le petit commerant . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

197
198
199
200
203
205
208

. . . . . . . . . 210
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

213
216
218
220
222
223

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

224
228
230
231
234
235
236
237
238
239
241

Bibliographie
[1] J.-R. Abrial, The B-Book, Cambridge University Press, 1996.
[2] A. Arnold et I. Guessarian, Mathmatiques pour linformatique, Masson, 1992.
[3] J. Arsac, Premires leons de programmation, Cdic/F. Nathan, 1980.
[4] J. Arsac, Les bases de la programmation, Dunod, 1983.
[5] J. Arsac, Prceptes pour programmer, Dunod, 1991.
[6] O. Arsac-Mondou, C. Bourgeois-Camescasse et M. Gourtray, Premier livre
de programmation, Cdic/F. Nathan, 1982.
[7] O. Arsac-Mondou, C. Bourgeois-Camescasse et M. Gourtray, Pour aller plus
loin en programmation, Cdic/F. Nathan, 1983.
[8] S. Baase et A. V. Gelder, Computer Algorithms, Addison-Wesley Longman, 2000.
[9] B. Baynat, P. Chrtienne, C. Hanen, S. Kedad-Sidhoum, A. Munier-Kordon
et C. Picouleau., Exercices et problmes dalgorithmique, Dunod, 2007.
[10] G. Beauquier, J. Berstel et P. Chrtienne, Elments dalgorithmique, Masson,
1992.
[11] J. Bentley, Programming Pearls, Addison-wesley, 1986.
[12] J. Bentley, More Programming Pearls. Confessions of a Coder, Addison-wesley,
1988.
[13] P. Berlioux et P. Bizard, Algorithmique, Dunod, 1983.
[14] L. Boug, C. Kenyon, J.-M. Muller et Y. Robert, Algorithmique, exercices
corrigs, Ellipses, 1993.
[15] G. Brassard et P. Bradley, Fundamentals of Algorithmics, Prentice-Hall, 1996.
[16] E. Cohen, Programming in the 1990s, an Introduction to the Calculation of Programs, Springer-Verlag, 1990.
[17] T. Cormen, C. Leiserson, C. Stein et R. Rivest, Introduction lalgorithmique,
Dunod, 2002.
[18] J. Courtin et I. Kowarsky, Introduction lalgorithmique et aux structures de
donnes, Volume 2, Dunod, 1995.
[19] J. Courtin et I. Kowarsky, Introduction lalgorithmique et aux structures de
donnes, Volume 1, Dunod, 1998.
[20] M. Crochemore, C. Hancart et T. Lecroq, Algorithmique du texte, Vuibert,
2001.
[21] A. Darte et S. Vaudenay, Algorithmique et optimisation. Exercices corrigs, Dunod, 2001.
[22] J.-P. Delahaye, La suite du lzard et autres inventions, Pour La Science, No 353,
(2007).
[23] E. Dijkstra, A Discipline of Programming, Prentice-Hall, 1976.
[24] E. Dijkstra et W. Feijen, A Method of Programming, Addison-Wesley, 1988.
[25] A. Ducrin, Programmation, Tome 1. Du problme lalgorithme, Dunod, 1984.

250

## [26] A. Ducrin, Programmation, Tome 2. De lalgorithme au programme, Dunod, 1984.

[27] J. Edmonds, How to Think about Algorithms, Cambridge, 2008.
[28] C. Froidevaux, M.-C. Gaudel et M. Soria, Types de donnes et algorithmes,
McGraw-Hill, 1990.
[29] M. Gondran et M. Minoux, Graphes et algorithmes, Lavoisier Tec & Doc, 2009.
[30] M. Goodrich et R. Tamassia, Algorithm Design, Wiley, 2001.
[31] R. Graham, D. Knuth et O. Patashnik, Mathmatiques concrtes : fondations
pour linformatique, International Thomson Publishing France, 1998.
[32] D. Gries, The Science of Programming, Springer, 1983.
[33] D. Gries et F. Schneider, A Logical Approach to Discrete Mathematics, Springer,
1993.
[34] D. Gusfield, Algorithms on Strings, Trees and Sequences, Cambridge University
Press, 1997.
[35] M. Guyomard, Spcification et raffinement en B : deux exemples pdagogiques,
International B Conference, APCB (2002).
[36] M. Guyomard, Structures de donnes et mthodes formelles, Springer, 2011.
[37] M.
Guyomard,
Dveloppement
informatique
=
spcification
+
programmation.
une
dmarche
mthodologique
pour
concevoir
des algorithmes, Support de cours stage du groupe Liesse. Enssat, Universit de Rennes 1. Mars 2014. Disponible sur le site
http
2014.
[38] C. Hoare, Procedures and Parameters : An Axiomatic Approach, in Proceedings
of the Symposium on Semantics of Algorithmic Languages, 1971.
[39] E. Horowitz, S. Sahni et S. Rajasekaran, Computer Algorithms, Computer
Science Press, 1998.
[40] R. Johnsonbaugh et M. Schaeffer, Algorithms, Pearson, Prentice-Hall, 2004.
[41] J. Julliand, Cours et exercices corrigs dalgorithmique, Vuibert, 2010.
[42] A. Kaldewaij, Programming : the Derivation of Algorithms, Prentice Hall, 1990.
[43] J. Kleinberg et E. Tardos, Algorithm Design, Addison Wesley, 2006.
[44] D. Knuth, The Art of Computer Programming, Addison-Wesley, 2015.
[45] T. Lecroq, C. Hancart et M. Crochemore, Algorithmique du texte, Vuibert,
2001.
[46] A. Levitin, The Design and Analysis of Algorithms, Addison-Wesley, 2003.
[47] J.-M. Lry, Algorithmique. Applications en C, Pearson, 2005.
[48] U. Manber, Introduction to Algorithms : a Creative Approach, Addison Wesley,
1989.
[49] B. Meyer, Introduction la thorie des langages de programmation, InterEditions,
1997.
[50] M. Minoux, Programmation Mathmatique. Thorie et Algorithmes, Lavoisier,
2008.

Bibliographie

251

[51] A. Mirzaian, A Halving Technique for the Longest Sluttering Sequence, Information 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
A? (algorithme) . . . . . . . . . . . . . . . . . . . . 114
abr. . . . . .voir arbre binaire de recherche
affaiblissement
de la prcondition . . . . . . voir boucle
algbre de chemins . . . . . . . . . . . . . . . . . 245
algorithme
A? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
de Bellman-Ford . . . . . . . . . . . . . . . 242
de Dijkstra . . . . . . . . . . . . . . . . . . . . 122
de Floyd. . . . . . . . . . . . . . . . . . . . . . .245
de Hirschberg . . . . . . . . . . . . . . . . . .176
de Huffman . . . . . . . . . . . . . . . . . . . . 126
de Roy-Warshall . . . . . . . . . . . . . . . 245
de Wagner et Fischer . . . . . . . . . . 256
algorithmes gloutons . . . . . . . . . . . . . . . 119
exercices . . . . . . . . . . . . . . . . . . 119146
appel rcursif
double . . . . . . . . . . . . . . . . . . . . . . . . . . 73
approximation dune fonction . . . . . . . 220
arbre
binaire . . . . . . . . . . . . . . . . . . . . . 42, 152
binaire de recherche . . . . . . . . 31, 119
pondr . . . . . . . . . . . . . . . . . . . . . 250
complet. . . . . . . . . . . . . . . . . . . . . . . . .32
dfinition . . . . . . . . . . . . . . . . . . . . . . . 29
de dcision . . . . . . . . . . . . . . . . . 31, 149
de frquences . . . . . . . . . . . . . . . . . . 129
diamtre dun . . . . . . . . . . . . . . 31, 152
filiforme . . . . . . . . . . . . . . . . . . . . . . . . 31
hauteur dun . . . . . . . . . . . . . . . . . . . 30
minimum local dans un . . . . . . . . 152
parfait . . . . . . . . . . . . . . . . . . . . . . . . . . 31
plein. . . . . . . . . . . . . . . . . . . . . . . . . . . .31
poids dun . . . . . . . . . . . . . . . . . . . . . . 30
arc dun graphe . . . . . . . . . . . . . . . . . . . . . . 23
valu . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
assignation de tches . . . . . . . . . . . . . . . 111
autorfrence
dun tableau . . . . . . . . . . . . . . . . . . . 109
dans un index . . . voir autorfrence
B
Bachet, C.-G.. . . . . . . . . . . . . . . . . . . . . . .139

btire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
boucle
affaiblissement de prcondition. .67
exercices de construction . . . . 5572
C
calcul
des prdicats . . . . . . . . . . . . . . . . . . . . . 2
des propositions . . . . . . . . . . . . . . . . . 2
carr
latin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
magique . . . . . . . . . . . . . . . . . . . . . . . 139
noir . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
sous un histogramme . . . . . . . . . . 205
cases de courrier (principe des) . . . . . 202
cavalier (jeu dchecs) . . . . . . . . . . . . 78, 85
chane . . . . . . . . . . . . . . . . . . . . voir squence
miroir . . . . . . . . . . . . 21, 177, 178, 259
chemin dans un graphe . . . . . . . . . . . . . . 24
de valeur minimale . . 122, 240, 242,
245, 248
eulrien . . . . . . . . . . . . . . . . . . . . . . . . . 25
hamiltonien . . . . . . . . . . . . 25, 91, 144
chemin dans un tableau . . . . . . . . . . . . 248
circuit dans un graphe . . . . . . . . . . . . . . . 25
eulrien . . . . . . . . . . . . . . . . . . . . . . . . . 89
codage optimal . . . . . . . . . . . . . . . . . . . . . 227
codomaine dune relation . . . . . . . . . . . . 19
coloriage dun graphe . . . . . . . . . . . 96, 134
complexit
en moyenne . . . . . . . . . . . . . . . . 51, 149
pseudo-polynomiale. . . . . . . . . . . .273
compression de donnes . . . . . . . . . . . . 126
construction de boucle
exercices . . . . . . . . . . . . . . . . . . . . 5572
principes . . . . . . . . . . . . . . . . . . . . . . . 55
Coulomb, C.-A. (loi de). . . . . . . . . . . . .197
courbes
de Hilbert . . . . . . . . . . . . . . . . . . . . . . 79
de Sierpinski . . . . . . . . . . . . . . . . . . . . 80
crypto-arithmtique . . . . . . . . . . . . . . . . . 97
cyclique (tableau) . . . . . . . . . . . . . . . . . . 150
D
dcoupe

254

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

de barre . . . . . . . . . . . . . . . . . . . . . . . 227
de planche . . . . . . . . . . . . . . . . . . . . . 230
DAG (directed acyclic graph) . . . . . . 140
dmonstration
par labsurde . . . . . . . . . . . . . . . . . . 24
exercices de . . . . . . . . . . . . . . . 3536
par rcurrence . . . . . . . . . . . . . . . . 416
plusieurs indices . . . . . . . . . . . . . 9
et induction de partition . . . . . . 7
errone . . . . . . . . . . . . . . . . . . . . . . . 37
exercices de . . . . . . . . . . . . . . . 3543
forte . . . . . . . . . . . . . . . . . . . . . . . . . . 6
partielle . . . . . . . . . . . . . . . . . . . . . . . 6
dnombrements
exercices de . . . . . . . . . . . . . . . . . 4348
dessin rcursif . . . . . . . . . . . . . . . . 75, 77, 79
diamtre dun arbre . . . . . . . . . . . . . 31, 152
Dijkstra, E. . . . . . . . . . . . . . . . . . . . . . 59, 122
diminuer pour rsoudre . . . . . . . . . . . . . . 73
exercices . . . . . . . . . . . . . . . . . . . . 7380
dissemblance
entre squences . . . . . . . . . . . . . . . . 260
distance
de Manhattan . . . . . . . . . . . . . . . . . 116
entre deux sommets dun graphe134
entre squences . . . . . . 176, 256, 260
distribution
de skis . . . . . . . . . . . . . . . . . . . . . . . . .235
diviser pour rgner . . . . . . . . . . . . . . . . . 147
exercices . . . . . . . . . . . . . . . . . . 147216
domaine dune relation . . . . . . . . . . . . . . 19
dominos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
DpR . . . . . . . . . . . voir diviser pour rgner
E
crous et boulons . . . . . . . . . . . . . . . . . . . 154
lagage . . . . . . . . . . . . . . . . . 94, 99, 104, 108
lections prsidentielles lamricaine97
lment
mdian . . . . . . . . . . . . . . . . . . . . . . . . 153
majoritaire. . . . . . . . . . . . . . . . .64, 169
lment neutre. . . . . . . . . . . . . . . . . . . . . . .35
lphant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
lvation la puissance . . . . . . . . . . . . . 168
empilement de briques . . . . . . . . . . . . . . 268
ensemble
dfini en extension . . . . . . . . . . . . . . 17
dfini en intension (ou en comprhension) . . . . . . . . . . . . . . . . . . . 17

## dfini par induction . . . . . . . . . . . . . 17

indpendant dans un arbre . . . . 252
notations . . . . . . . . . . . . . . . . . . . . . . . 17
enveloppe convexe . . . . . . . . . . . . . . . . . . 183
pinglage . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
essais successifs . . . . . . . . . . . . . . . . . . . . . . 81
exercices . . . . . . . . . . . . . . . . . . . 81110
tagres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Euclide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
F
factorielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
fausse pice . . . . . . . . . . . . . . . . . . . . . . . . . 155
fermeture transitive . . . . . . . . . . . . . . . . . . 25
file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
file de priorit . . . . . . . . . . . . . . . . . . . . . . . 33
file FIFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
fils (ou successeur) dun nud . . . . . . . 30
Floyd, R. . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
bijective . . . . . . . . . . . . . . . . . . . . . . . . 19
injective . . . . . . . . . . . . . . . . . . . . . . . . 19
partielle . . . . . . . . . . . . . . . . . . . . . . . . 19
surjective . . . . . . . . . . . . . . . . . . . . . . . 19
totale . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
formatage dun alina. . . . . . . . . . . . . . .225
Fourier J. (transforme de) . . . . . . . . . 190
G
graphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
arc dun . . . . . . . . . . . . . . . . . . . . . . . . 23
bipartite . . . . . . . . . . . . . . . . . . . . . . . 134
boucle sur un sommet . . . . . . . . . . 23
chemin dans un . . . . . . . . . . . . . . . . . 24
circuit dans un . . . . . . . . . . . . . . . . . 25
coloriage . . . . . . . . . . . . . . . . . . . 96, 134
conforme . . . . . . . . . . . . . . . . . . . . . . 241
de numrotation conforme . . . . . 241
de tournoi . . . . . . . . . . . . . . . . . . . . . 144
degr dun sommet . . . . . . . . . . . . . 24
fermeture transitive dun . . . . . . . 25
isomorphisme . . . . . . . . . . . . . . . 27, 94
nud dun . . . . . . . . . . . . . . . . . . . . . . 23
non orient . . . . . . . . . . . . . . . . . . . . . 27
orient . . . . . . . . . . . . . . . . . . . . . . . . . . 22
orient acyclique . . . . . . . . voir DAG
plus court chemin . . . 122, 240, 242,
245, 248
valu . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Index

Gries, D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
gu dans le brouillard . . . . . . . . . . . . . . . . 52
guillotine . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
H
hauteur dun arbre . . . . . . . . . . . . . . . . . . 30
Hilbert, D. (courbes de) . . . . . . . . . . . . . 79
Hirschberg, D. . . . . . . . . . . . . . . . . . . . . . . 176
Huffman, D. A. . . . . . . . . . . . . . . . . . . . . . 126
I
identification des nombres dun intervalle
240
implication logique . . . . . . . . . . . . . . . . . . . 3
induction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
induction de partition . . . . . . . . . . . . . . . . 7
inversion . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
isomorphisme de graphes . . . . . . . . . 27, 94
J
jeu

## deux tas de jetons . . . . . . . . . . . . 46

des mots cass . . . . . . . . . . . . . . . . . 107
du Master Mind . . . . . . . . . . . . . . . 104
des extrmes. . . . . . . . . . . . . . . . . . .271
du carr latin . . . . . . . . . . . . . . . . . . . 99
du sudoku . . . . . . . . . . . . . . . . . . . . . 100
du taquin. . . . . . . . . . . . . . . . . . . . . .114
patagon . . . . . . . . . . . . . . . . . . . . 45, 269

L
cher dufs par les fentres . . 198, 237
ligne brise . . . . . . . . . . . . . . . . . . . . . . . . . 220
liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
loi de Coulomb . . . . . . . . . . . . . . . . . . . . . 197
M
mlange de mots . . . . . . . . . . . . . . . . . . . . . 48
majoritaire (lment) . . . . . . . . . . . . . . . 169
Master Mind . . . . . . . . . . . . . . . . . . . . . . . 104
meilleur intervalle . . . . . . . . . . . . . 157, 222
mmosation. . . . . . . . . . . . . . . . . . . . . . . .167
minimum
local dans un arbre . . . . . . . . . . . . 152
Morgan, C. . . . . . . . . . . . . . . . . . . . . . . . . . 213
mot . . . . . . . . . . . . . . . . . . . . . . voir squence
mots cass . . . . . . . . . . . . . . . . . . . . . . . . . . 107
multiensemble . . . . . . . . . . . . . . . . . . voir sac

255
N
n reines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
nud dun graphe . . . . . . . . . . . . . . . . . . . 23
nid de pigeon . . . . . voir cases de courrier
(principe des)
nombre
entier (dcomposition) . . . . . . . . . 102
nombres
dAckerman . . . . . . . . . . . . . . . . . . . . . 11
de Catalan . . . . . . . . . . . . . . . . . . 10, 37
de Delannoy . . . . . . . . . . . . . . . . . . . . 14
de Stirling . . . . . . . . . . . . . . . . . . 11, 44
triangulaires . . . . . . . . . . . . . . . . . . . 201
numrotation conforme . . . . . . . . . . . . . 241
O
ufs par les fentres . . . . . . . . . . . 198, 237
optimisation
de la triangulation . . . . . . . . . . . . . 263
de rpartition de tches . . . . . . . . 228
du codage . . . . . . . . . . . . . . . . . . . . . 227
du placement de stations-service223
ordonnancement . . . . . . . . . . . . . . . . . . . . 121
ordre dun graphe . . . . . . . . . . . . . . . . . . . 23
ordre partiel . . . . . . . . . . . . . . . . . . . . . . . . 140
ordre total . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
P
palindrome . . . . . . . . . . . . . . . . . . . . . . . . . . 59
parcours en largeur dabord. . . . . . . . .134
partition
dun nombre entier . . . . . . . . . . . . 103
optimale dun tableau . . . . . . . . . 119
partitions
nombre de . . . . . . . . . . . . . . . . . . . . . . 44
pavage dun chiquier . . . . . . . . . . . . . . . 159
permutation
nombre dinversions . . . . . . . . . . . 162
sous contrainte . . . . . . . . . . . . . . . . 103
petit Poucet (mthode du) . . . . . . . . . 247
photocopieur . . . . . . . . . . . . . . . . . . . . . . . 142
pic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
pilleurs de coffres . . . . . . . . . . . . . . . . . . . 231
pivot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
plus court chemin . . . . . . . . . . . . . . . . . . 122
plus lourd et moins balourd . . . . . . . . 262
poids dun arbre . . . . . . . . . . . . . . . . . . . . . 30
point fixe . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
point simple . . . . . . . . . . . . . . . . . . . . . . . . . 30

256

## CONCEPTION DALGORITHMES PRINCIPES ET EXERCICES CORRIGS

points
enveloppe convexe . . . . . . . . . . . . . 183
les plus proches . . . . . . . . . . . . . . . . 172
polygone
division du primtre . . . . . . . . . . . 69
point dans ou hors . . . . . . . . . . . . . . 75
triangulation optimale . . . . . . . . . 263
polynmes (produit de) . . . . . . . . . . . . . 194
principe
des cases de courrier . . . . . . . . . . . 202
du tiers exclu . . . . . . . . . . . . . . . . . . . . 3
problme
du plus grand carr sous un histogramme . . . . . . . . . . . . . . . . . . 205
du plus grand rectangle sous un histogramme . . . . . . . . . . . . . . . . 205
dtagres . . . . . . . . . . . . . . . . . . . . . 232
dachat de joueurs . . . . . . . . . . . . . 121
dordonnancement . . . . . . . . . . . . . 121
de qui est o ? . . . . . . . . . . . . 103
de crypto-arithmtique . . . . . . . . . 97
de dcoupe . . . . . . . . . . . . . . . 227, 230
de distribution de skis . . . . . . . . . 235
de llment majoritaire . . . . 64, 169
de lpinglage dintervalles . . . . . 145
de lempilement de briques . . . . 268
de la dcomposition dun nombre
entier . . . . . . . . . . . . . . . . . . . . . 102
de la division du primtre dun polygone . . . . . . . . . . . . . . . . . . . . . 69
de la fausse pice . . . . . . . . . . . . . . 155
de la plus longue squence de zros
63
de la slection . . . . . . . . . . . . . . . . . 153
de la segmentation dune image 267
de la somme des lments dun tableau . . . . . . . . . . . . . . . . . . . . . . 56
de la star . . . . . . . . . . . . . . . . . . . . . . . 66
de la valeur manquante . . . . . . . . 157
de la vaporisation des robots. . .270
de Madame Dumas . . . . . . . . . . . . 103
de pese . . . . . . . . . . . . . . . . . . . . . . . 155
de rpartition de tches . . . . . . . . 228
des n reines. . . . . . . . . . . . . . . . . . . . .81
des stabbing intervals . . . . . . . . . 145
des crous et des boulons . . . . . . 154
des lphants . . . . . . . . . . . . . . . . . . 262
des lections prsidentielles . . . . . 97

## des ufs par les fentres . . 198, 237

des haricots de Gries . . . . . . . . . . . . 55
des pilleurs de coffres . . . . . . . . . . 231
des relais tlphoniques . . . . . . . . 121
des sentinelles . . . . . . . . . . . . . . . . . . 83
des sept et des vingt-trois . . . . . . . 60
du Me zro . . . . . . . . . . . . . . . . . . . . . 61
du coloriage dun graphe . . . . . . . . 96
du doublon dans un sac. . . . . . . .202
du drapeau hollandais . . . . . . . . . . 59
du gu dans le brouillard . . . . . . . 52
du meilleur intervalle . . . . . 157, 222
du petit commerant . . . . . . . . . . 273
du photocopieur . . . . . . . . . . . . . . . 142
du pic . . . . . . . . . . . . . . . . . . . . . . . . . 150
du plus grand carr noir . . . . . . . 266
du plus proche voisin . . . . . . . . . . 117
du point fixe . . . . . . . . . . . . . . . . . . 149
du rendu de monnaie . . . . . . . . . . 273
du sept onze . . . . . . . . . . . . . . . . . 101
du sous-tableau de somme maximale
158
du tableau autorfrent . . . . . . . . 109
du voyageur dans le dsert . . . . . 224
du voyageur de commerce . . 93, 113
pseudo-polynomial . . . . . . . . . . . . . 273
procdure rcursive . . . . . . . . . . . . . . . . . . 73
exercices . . . . . . . . . . . . . . . . . . . . 7380
produit
cartsien . . . . . . . . . . . . . . . . . . . . . . . . 17
chain de matrices . . . . . . . . . . . . . 229
de polynmes . . . . . . . . . . . . . . . . . . 194
programmation dynamique . . . . . . . . . 219
exercices . . . . . . . . . . . . . . . . . . 219274
PSEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
exercices . . . . . . . . . . . . . . . . . . 111118
pseudo-polynomiale (complexit) . . 273
Q
qui est o ? . . . . . . . . . . . . . . . . . . . . 103
quick sort . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
R
radixchotomie . . . . . . . . . . . . . . . . . . . . . . 199
recherche
dun pic . . . . . . . . . . . . . . . . . . . . . . . 150
dun point fixe . . . . . . . . . . . . . . . . . 149
dans un tableau deux dimensions
57

Index

## dans une btire . . . . . . . . . . . . . . . 161

de llment mdian . . . . . . . . . . . 153
dichotomique . . . . . . . . . . . . . . . . . . 147
version de Bottenbruch . . . . . . 148
linaire borne . . . . . . . . . . . . . . . . . . 59
par interpolation . . . . . . . . . . . . . . 147
trichotomique . . . . . . . . . . . . . . . . . 147
rectangle sous un histogramme . . . . . 205
rcurrence . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
relation de . . . . . . . . . . . . . . . . . . . . . . 10
rcurrence (dmonstration par) . . . . . voir
dmonstration par rcurrence
rcursivit . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
rcursivit . voir diminuer pour rsoudre
rcursivit terminale . . . . . . . . . . . . . . . . . 15
reine (jeu dchecs) . . . . . . . . . . . . . . . . . . 81
relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
inverse . . . . . . . . . . . . . . . . . . . . . . . . . . 19
rciproque . . . . . . . . . . . . . . . . . . . . . . 19
rendu de monnaie . . . . . . . . . . . . . . . . . . 273
Roy, B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
S
sac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
doublon dans un . . . . . . . . . . . . . . . 202
segmentation dune image . . . . . . . . . . 267
slection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
sentinelles . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
sparation et valuation progressive voir
PSEP
sept onze . . . . . . . . . . . . . . . . . . . . . . . . . 101
squence . . . . . . . . . . . . . . . . . . . . voir chane
de zros . . . . . . . . . . . . . . . . . . . . . . . . 63
dissemblance entre . . . . . . . . . . . . . 260
distance entre . . . . . . . . . . . . . . . . . 256
sous-squence bgue . . . . . . . . . . . 187
situation
intermdiaire . . . . . . . . . . . . . . . . . . 204
skyline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
somme des lments dun tableau . . . . 56
sommet (ou nud) dun graphe . . . . . . 23
sous-squence
bgue . . . . . . . . . . . . . . . . . . . . . . . . . 187
croissante . . . . . . . . . . . . . . . . . . . . . .254
croissante contigu. . . . . . . . . . . . .254
sous-tableau de somme maximale . . . 158
stabbing intervals . . . . . . . . . . . . . . . . . . 145
star (cherchez la) . . . . . . . . . . . . . . . . . . . . 66
station-service . . . . . . . . . . . . . . . . . . . . . . 223

257
sudoku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
suite
de Fibonacci . . . . . . . . 10, 41, 73, 167
du lzard . . . . . . . . . . . . . . . . . . . . . . . 41
sur-squence . . . . . . . . . . . . . . . . . . . . . . . . 255
T
tableau
lment majoritaire . . . . . . . . . . . . 169
autorfrent . . . . . . . . . . . . . . . . . . . 109
comme fonction totale . . . . . . . . . . 19
cyclique . . . . . . . . . . . . . . . . . . . . . . . 150
tiers exclu (principe du) . . . . . . . . . . . . . . 3
tournoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
transforme de Fourier. . . . . . . . . . . . . .190
tri
par fusion . . . . . . . . . . . . . . . . . . . . . 147
par slection simple . . . . . . . . . . . . . 57
rapide . . . . . . . . . . . . . . . . . . . . . . . . . . 59
topologique . . . . . . . . . . . . . . . . . . . . 140
triangulation optimale . . . . . . . . . . . . . . 263
trimino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
V
valeur manquante . . . . . . . . . . . . . . . . . . 157
vaporisation de robots . . . . . . . . . . . . . . 270
voyageur
dans le dsert. . . . . . . . . . . . . . . . . .224
de commerce . . . . . . . . . . . . . . . 93, 113
W
Warshall, S. . . . . . . . . . . . . . . . . . . . . . . . . 245