12.07.2015 Views

Notes de correction - ENS Cachan

Notes de correction - ENS Cachan

Notes de correction - ENS Cachan

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Concours commun <strong>de</strong>s écoles normales supérieuresÉpreuve pratique d’algorithmique et <strong>de</strong> programmationHalmaSujet et éléments <strong>de</strong> <strong>correction</strong>Juillet 2004Note. Lorsque la <strong>de</strong>scription d’un algorithme est <strong>de</strong>mandée, celle-ci doitêtre courte et précise. Quand on <strong>de</strong>man<strong>de</strong> la complexité d’un algorithme enfonction d’un paramètre n, on <strong>de</strong>man<strong>de</strong> un ordre <strong>de</strong> gran<strong>de</strong>ur du temps <strong>de</strong>calcul dans le cas le pire, par exemple O(n 2 ) ou O(n log n).Des indications et <strong>de</strong>s éléments <strong>de</strong> <strong>correction</strong>du sujet sont ajoutés dans la marge.1 Description du problèmeLe jeu <strong>de</strong> Halma. Ce problème est consacré à la conception d’algorithmesjouant au jeu <strong>de</strong> Halma. C’est un jeu <strong>de</strong> plateau datant <strong>de</strong> l’époque victorienne,se jouant sur un plateau carré quadrillé.Règle <strong>de</strong> victoire. Dans ce problème, on s’intéresse au jeu <strong>de</strong> Halma àun seul joueur, avec un plateau carré <strong>de</strong> taille arbitraire n et un nombre <strong>de</strong>pions arbitraire p. On appelle configuration du jeu la position <strong>de</strong>s pions.La distance d’un pion se situant sur la case (x, y) est par définition x + y.La mesure <strong>de</strong> l’insatisfaction d’une configuration <strong>de</strong>s pions sur le plateau <strong>de</strong>jeu est la somme <strong>de</strong>s distances <strong>de</strong>s pions. Si l’insatisfaction d’une configurationest minimale parmi toutes les configurations ayant le même nombre<strong>de</strong> pions, on dit que la configuration est rangée. Le but <strong>de</strong> ce problème est<strong>de</strong> trouver <strong>de</strong>s algorithmes permettant d’arriver à une configuration rangée,<strong>de</strong> préférence en minimisant le nombre <strong>de</strong> coups entre la configuration <strong>de</strong>départ et cette configuration d’arrivée.Règles <strong>de</strong> déplacement <strong>de</strong>s pions. À chaque coup, on déplace un pion.Plusieurs types <strong>de</strong> déplacements sont possibles.On peut choisir <strong>de</strong> déplacer un pion vers l’une <strong>de</strong>s quatre cases voisines, sicelle-ci est libre.Un pion peut aussi être déplacé par une succession <strong>de</strong> petits sauts. On définitun petit saut comme un déplacement <strong>de</strong> <strong>de</strong>ux cases, dans l’une <strong>de</strong>s quatredirections. Ce déplacement est autorisé si la case d’arrivée est libre, et si lacase intermédiaire est occupée. Contrairement aux dames, le pion par <strong>de</strong>ssuslequel on saute reste sur le plateau <strong>de</strong> jeu. Une succession <strong>de</strong> petits sauts,en nombre arbitraire, est considéré comme un unique coup.Une règle optionnelle permet non seulement <strong>de</strong> faire <strong>de</strong> petits sauts (définisci-<strong>de</strong>ssus) mais aussi <strong>de</strong> grands sauts. Un grand saut est un déplacementd’un nombre pair <strong>de</strong> cases dans l’une <strong>de</strong>s quatre directions, tel que la caseau milieu <strong>de</strong> ce trajet soit occupée, et toutes les autres soient libres.•◦◦◦◦• ◦ ◦ ◦−→◦ • −→ · ◦Exemple <strong>de</strong> déplacementExemple <strong>de</strong> déplacementpar petits sauts ◦ · ◦ ·◦par grands sauts ◦ ◦ ◦Il y a ici une ambiguïté remarquée par unseul candidat. Le sujet aurait dû préciserqu’on n’autorise pas un déplacement dontla case d’arrivée est celle <strong>de</strong> départ.1


Concours commun <strong>de</strong>s écoles normales supérieuresÉpreuve pratique d’algorithmique et <strong>de</strong> programmationOrganisation du problème. Dans la section 2 on étudie quelques propriétés<strong>de</strong>s configurations rangées. Dans la section 3 on définit une configuration<strong>de</strong> départ. Ces <strong>de</strong>ux sections sont indépendantes. Dans la section4 on étudie comment, à partir d’une configuration donnée, choisir undéplacement <strong>de</strong> pion qui diminue le plus possible l’insatisfaction. Cette sectionne dépend que partiellement <strong>de</strong>s résultats <strong>de</strong> la section 2. Dans la section5 on construit <strong>de</strong>s algorithmes <strong>de</strong> rangement utilisant les techniques <strong>de</strong> lasection précé<strong>de</strong>nte.Rappel sur la représentation <strong>de</strong> tableaux bidimensionnels. Onpeut représenter les tableaux bidimensionnels dans <strong>de</strong>s tableaux simples.Par exemple, pour un tableau <strong>de</strong> dimension n, on peut représenter l’élément<strong>de</strong> coordonnées (x, y) par T[x+n*y].2 Préliminaires : configurations rangéesDans cette section, la taille du plateau est arbitrairement gran<strong>de</strong>. Autrementdit, les pions peuvent être sur toute case <strong>de</strong> coordonnées (x, y) avec x ≥ 0 ety ≥ 0. On étudie quelques propriétés élémentaires <strong>de</strong>s configurations rangées.Question 1 Montrez que dans une configuration rangée avec p pions, ladistance du pion le plus loin est min{k| (k+1)(k+2)2≥ p}.Question 2 Décrire comment calculer l’insatisfaction d’une configurationrangée à p pions. Quelle est la complexité <strong>de</strong> votre algorithme en fonction<strong>de</strong> p ? Quelle est l’insatisfaction d’une configuration rangée à 1000 pions ?Question 3 Montrez que si le nombre <strong>de</strong> pions n’est pas un entier <strong>de</strong> laforme k(k−1)2alors il y a plusieurs configurations rangées.3 Préliminaires : configuration <strong>de</strong> départOn utilisera la suite (pseudo-aléatoire) d’entiers positifs (u n ) définie ci-<strong>de</strong>ssous.– u 0 est donné sur votre table. (À reporter en haut <strong>de</strong> votre copie !)– u n = (16383 × u n−1 ) mod 59047, pour n > 0.Question 4 Que valent u 992 et u 9992 ?L’algorithme qui permet <strong>de</strong> répondre àla question 2 peut être en O(p 2 ), O(p),O( √ p) ou O(1). Toutes ces solutions ontété proposées par <strong>de</strong>s candidats.Pour la question 3 il n’est pas nécessaire<strong>de</strong> calculer le nombre <strong>de</strong> configurationsrangées, mais exhiber un exemple ne suffitpas.Dans la suite du problème, on s’intéressera aux cas où le couple (n, p) estpris dans l’ensemble E = {(4, 6), (6, 10), (15, 20), (25, 10)}, et aux <strong>de</strong>ux variantesdu jeu. La configuration <strong>de</strong> départ est définie en plaçant p pions selonl’algorithme ci-<strong>de</strong>ssous : on pose (x i , y i ) = (u 2i mod n, u 2i+1 mod n) ; les positionsinitiales <strong>de</strong>s p pions sont les p premières valeurs distinctes <strong>de</strong> la suite(x 1 , y 1 ), (x 2 , y 2 ), ...On remarque que le premier pion posé sur le plateau a donc pour coordonnées(x 1 , y 1 ), mais que le p-ième pion posé a pour coordonnées (x π , y π ) pour unevaleur π ≥ p.Question 5 Pour chaque choix <strong>de</strong> paramètres (n, p) ∈ E, quelles sont lavaleur π et les coordonnées (x π , y π ) ?On rappelle que selon les règles du jeu, un pion peut se déplacer vers unecase voisine, ou bien faire une succession <strong>de</strong> (petits ou grands) sauts. Onpourrait imaginer <strong>de</strong> n’autoriser que <strong>de</strong>s sauts. La question suivante montreque cela restreindrait beaucoup le déplacement <strong>de</strong>s pions.Il ne faut pas oublier <strong>de</strong> répondre à laquestion 5 avec π et (x π, y π). Il faut faireattention aux indices : on commence par(x 1, y 1) et non (x 0, y 0).2


Concours commun <strong>de</strong>s écoles normales supérieuresÉpreuve pratique d’algorithmique et <strong>de</strong> programmationQuestion 6 Montrez que si un pion ne se déplace que par sauts, il y a troisquarts <strong>de</strong>s cases du damier auxquelles il n’a pas accès, indépendamment <strong>de</strong>la position <strong>de</strong>s autres pions. Cette propriété définit une partition <strong>de</strong> l’ensemble<strong>de</strong>s cases du damier en quatre parties. Donnez une définition caractérisantces quatre parties, et donnez (pour la configuration <strong>de</strong> départdéfinie ci-<strong>de</strong>ssus) le nombre <strong>de</strong> pions dans chaque partie ainsi définie.Pour la question 6, il suffit <strong>de</strong> remarquerqu’un saut conserve la parité <strong>de</strong>s coordonnées.Certains candidats n’ont pasvérifié que la somme <strong>de</strong>s nombres <strong>de</strong> pions<strong>de</strong>s quatre parties doit être p.4 Étu<strong>de</strong> d’un coupDans cette section, on étudie la configuration <strong>de</strong> départ, pour savoir queldéplacement choisir. On étudie donc les coups possibles, et leur effet sur lerangement du plateau (variation <strong>de</strong> l’insatisfaction). On donnera les résultatspour les <strong>de</strong>ux variantes du jeu (petits sauts ou grands sauts) et toutes lesvaleurs (n, p) ∈ E.Question 7 Quelle est l’insatisfaction <strong>de</strong> la configuration <strong>de</strong> départ ? Décrivezl’algorithme que vous avez utilisé et sa complexité en fonction <strong>de</strong> n et p.Question 8 À partir <strong>de</strong> la configuration <strong>de</strong> départ, si on choisit <strong>de</strong> déplacerle pion <strong>de</strong> coordonnées (x 1 , y 1 ), combien <strong>de</strong> cases peut-il atteindre en uncoup ?Décrivez l’algorithme que vous avez utilisé et sa complexité en fonction <strong>de</strong> n.Question 9 À partir <strong>de</strong> la configuration <strong>de</strong> départ, combien y a-t-il <strong>de</strong> coupspossibles (un coup étant défini par la position <strong>de</strong> départ et la position d’arrivéedu pion qu’on déplace) ? Décrivez l’algorithme que vous avez utilisé etsa complexité en fonction <strong>de</strong> n et p.Choix du meilleur coup. On définit <strong>de</strong>ux ordres totaux sur les casesdu plateau : l’ordre ≺ L est l’ordre lexicographique et l’ordre ≺ D celui <strong>de</strong>sdistances. Formellement :– (a, b) ≺ L (c, d) ⇔ a < c ou (a = c et b < d)– (a, b) ≺ D (c, d) ⇔ a + b < c + d ou (a + b = c + d et a < c)Parmi toutes les configurations accessibles en un coup, certaines ont uneinsatisfaction minimale. Le “meilleur coup” est donc l’un <strong>de</strong> ceux-là. Si plusieursréponses sont possibles, on utilise l’un <strong>de</strong>s ordres définis ci-<strong>de</strong>ssus. Lemeilleur coup selon l’ordre ≺ est celui qui fait bouger le pion dont la caseest la plus gran<strong>de</strong> selon l’ordre ≺, et parmi les déplacements <strong>de</strong> ce pion celuipour lequel la case d’arrivée est la plus gran<strong>de</strong> selon l’ordre ≺.Question 10 Décrivez un algorithme qui à partir d’une configuration donnée,calcule le meilleur coup selon l’ordre <strong>de</strong>s distances. Quelle est la complexité<strong>de</strong> votre algorithme en fonction <strong>de</strong> n et p. Quel est son résultat pour laconfiguration <strong>de</strong> départ, pour chaque choix <strong>de</strong> paramètres (n, p) ∈ E.5 Algorithmes <strong>de</strong> résolution du problèmeOn se base sur l’algorithme glouton, qui cherche à chaque coup à minimiserl’insatisfaction. Plusieurs variantes <strong>de</strong> l’algorithme glouton sont possibles,selon la façon dont on choisit le coup parmi ceux qui minimisent l’insatisfactionà l’étape suivante.3La question 7 a permis à certains <strong>de</strong> penserà un algorithme <strong>de</strong> calcul d’insatisfactionmeilleur que le parcours en O(n 2 ) duplateau : le parcours en O(p) <strong>de</strong> la liste <strong>de</strong>spositions <strong>de</strong>s pions. On pouvait en déduirel’intérêt d’utiliser une structure <strong>de</strong> donnéesredondante, stockant simultanément l’état<strong>de</strong>s cases et la position <strong>de</strong>s pions.Pour la question 8, un algorithme naturelrevient à considérer les cases du damiercomme les sommets d’un graphe, quel’on parcourt en marquant les sommets visités.Dans la variante “petits sauts” larecherche <strong>de</strong>s arêtes sortantes se fait entemps constant : il suffit <strong>de</strong> regar<strong>de</strong>r lescases voisines et, pour celles qui sont occupéesla case d’après. La complexité <strong>de</strong>cet algorithme est O(n 2 ), et on peut exhiberun cas où cette borne est atteinte :toutes les cases <strong>de</strong> coordonnées impairesoccupées et le pion en (0, 1). La variante“grands sauts” apparaît plus lente carl’énumération <strong>de</strong>s sauts possibles à partird’une position prend un temps O(n), ce quidonnerait un majorant O(n 3 ). On n’attendaitpas <strong>de</strong> meilleure majoration, même siest possible <strong>de</strong> montrer que pour cette varianteaussi l’algorithme d’énumération <strong>de</strong>scoups possibles prend un temps O(n 2 ).L’algorithme <strong>de</strong> la question 9 a donc unecomplexité O(n 2 p).Un algorithme répondant à la question10 trie la liste <strong>de</strong>s pions par ordre ≺ Ddécroissant, puis la parcourt en calculantpour chacun la liste <strong>de</strong>s coups possibles(répertoriés par leur case d’arrivée). Danscette liste on sélectionne parmi les plusproches <strong>de</strong> l’origine celui dont la premièrecoordonnée est la plus gran<strong>de</strong>. Si la diminutiond’insatisfaction causée par ce coupest strictement meilleure que celle du coupgardé en mémoire, il le remplace. Puis onprend le pion suivant dans la liste.On initialise l’algorithme avec une diminutiond’insatisfaction -2, ce qui permet àl’algorithme <strong>de</strong> ne pas échouer si tous lescoups augmentent l’insatisfaction.


Concours commun <strong>de</strong>s écoles normales supérieuresÉpreuve pratique d’algorithmique et <strong>de</strong> programmationNB : on donnera les résultats pour les <strong>de</strong>ux variantes du jeu et toutes lesvaleurs (n, p).Dans l’algorithme A, si plusieurs coups minimisent autant l’insatisfaction,on choisit le meilleur coup selon l’ordre ≺ D .Question 11 Après combien <strong>de</strong> coups cette variante <strong>de</strong> l’algorithme gloutons’arrête-t-elle ? Quelle est l’insatisfaction à la fin ?Dans l’algorithme A, si plusieurs coups minimisent autant l’insatisfaction,on choisit le meilleur coup selon l’ordre ≺ L .Les questions 11 et 12 sont simplesdès que les algorithmes <strong>de</strong>s questionsprécé<strong>de</strong>ntes, et en particulier <strong>de</strong> la question10, ont été programmés <strong>de</strong> façon modulaire.Question 12 Après combien <strong>de</strong> coups cette variante <strong>de</strong> l’algorithme gloutons’arrête-t-elle ? Quelle est l’insatisfaction à la fin ?On remarque que les algorithmes ci-<strong>de</strong>ssus arrivent rarement à une configurationrangée. Il faut donc trouver un algorithme <strong>de</strong> résolution <strong>de</strong> fin <strong>de</strong>partie. Pour cela, on commence par définir un déplacement en diagonale :c’est une succession <strong>de</strong> <strong>de</strong>ux coups, le premier vers une case voisine, et lesecond vers une case voisine et dans une direction orthogonale à la première.On peut remarquer que certains déplacements en diagonale ne changent pasl’insatisfaction.On propose l’algorithme suivant (algorithme C) : à partir d’une configurationoù il existe un coup qui diminue l’insatisfaction, on applique l’algorithme A.À partir d’une configuration X où aucun coup ne diminue l’insatisfaction,on choisit le plus grand <strong>de</strong>s pions (dans l’ordre ≺ D ) tel que, après une succession<strong>de</strong> déplacements en diagonale ne changeant pas l’insatisfaction, il estpossible en un coup d’obtenir une insatisfaction plus faible que celle <strong>de</strong> laconfiguration X.Question 13 Montrer que l’algorithme C arrive toujours à une configurationrangée. En combien <strong>de</strong> coups range-t-il le plateau, à partir <strong>de</strong>s configurations<strong>de</strong> départ définies plus haut ?L’algorithme D généralise les algorithmes A et B <strong>de</strong> la façon suivante : si plusieurscoups minimisent autant l’insatisfaction, on les choisit simultanément,et on élimine dans l’arbre <strong>de</strong>s exécutions possibles les branches pour lesquellesil existe une autre branche qui à la même profon<strong>de</strong>ur (mesurée ennombre <strong>de</strong> coups) a une insatisfaction strictement plus faible.Question 14 Après combien <strong>de</strong> coups cette variante <strong>de</strong> l’algorithme gloutons’arrête-t-elle ? Quelle est l’insatisfaction à la fin ?La preuve <strong>de</strong> l’algorithme C est simpledès qu’on a prouvé qu’à partir <strong>de</strong> touteconfiguration non rangée il existe unpion qu’on peut rapprocher <strong>de</strong> l’originepar <strong>de</strong>s déplacements en diagonale suivisd’un déplacement vers l’origine. La question13 est légèrement ambiguë car ellespécifique quel pion <strong>de</strong> la configuration Xest déplacé, mais pas quel succession <strong>de</strong>déplacements est choisi. Par analogie avecla façon dont les autres algorithmes choisissentla case d’arrivée du pion déplacé, onpouvait choisir la plus gran<strong>de</strong> selon ≺ D <strong>de</strong>celle qui diminuent le plus l’insatisfaction.On pouvait aussi choisir parmi les successions<strong>de</strong> déplacement diminuant l’insatisfactionl’une <strong>de</strong> celles faisant le moins <strong>de</strong>coups, et s’il y en a plusieurs celle dont lacase d’arrivée est la plus gran<strong>de</strong> selon ≺ D.L’algorithme D se base sur une variante<strong>de</strong> l’algorithme <strong>de</strong> la question 10, qu’onva appeler D0, et qui a pour résultatla liste <strong>de</strong>s coups minimisant l’insatisfaction.L’algorithme D commence avec uneliste l 0 <strong>de</strong> configurations contenant un seulélément : la configuration <strong>de</strong> départ. Àchaque étape, il construit une nouvelle listel i+1 qui réunit toutes les configurations obtenuespar l’algorithme D0 à partir <strong>de</strong>séléments <strong>de</strong> la liste l i. Il ne gar<strong>de</strong> dans l i+1que les configurations d’insatisfaction minimale.4

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!