Si vous ne parvenez pas `a r´epondre `a une question, vous pouvez cependant l’utiliser comme hypoth`ese pour les questions suivantes.
Calculatrices interdites.
Exercice 1.
1. D´ecrire une structure de donn´ees S pour stocker des ´el´ements pond´er´es qui permet les op´erations suivantes.
• Ins´erer(S, elem,w) ajoute un ´el´ement de poids w `a la structure S,
• Recherche-min(S) retourne un ´el´ement de poids minimum dans S ainsi que son poids,
• Efface-min(S) enl`eve l’´el´ement de poids minimum de S.
Le temps de calcul deIns´erer etEfface-min doivent ˆetreO(logn) o`un est le nombre d’´el´ements dans S au moment de l’appel. Recherche-min doit fonctionner en O(1).
Vous pouvez supposer que les poids sont entiers.
Donner un argument bref expliquant que vos fonctions se d´eroulent dans les temps souhait´es et produisent des r´esultats corrects.
2. Combien de temps faut-il pour aller de la ville a `a la ville z si le temps de voyage entre les villes sont les suivantes?
• 1 minutes entre les villes a etb
• 9 minutes entre les villes a etc
• 4 minutes entre les villes a etd
• 5 minutes entre les villes b ete
• 12 minutes entre les villes b etf
• 12 minutes entre les villes b etf
• 4 minutes entre les villes cetf
• 4 minutes entre les villes cetg
• 2 minutes entre les villes d etg
• 8 minutes entre les villes e eth
• 3 minutes entre les villes f eth
• 7 minutes entre les villes f etz
• 2 minutes entre les villes f eti
• 3 minutes entre les villes h etz
E.N.S. Paris – S´election internationale 2014 63 Informatique (3 h) [i14uxue] 2/3
• 6 minutes entre les villes i etz
3. Utilisant le langage de programmation de votre choix, ´ecrire un programme qui prends en entr´ee des entiers d´ecrivant le temps de voyage entre deux villes et calcule le temps minimum qu’il faut pour aller de la ville 1 `a la ville 2. Chaque ville est repr´esent´e par un num´ero entre 1 et 1000000.
Le temps de calcul de votre programme devrait ˆetre O((m+n) logm) o`um est le nombre de paires de villes donn´es `a l’entr´ee et n le nombre de villes.
Supposer que vous avez acc`es `a la structure d´ecrit dans la Question 1.
4. Maintenant, supposons que traverser une ville (c’est `a dire arriver et repartir) prends aussi du temps. Le temps requis est la moiti´e du nombre de minutes restant jusqu’`a la prochaine heure. Donc, si vous arrivez `a 2:16 (soit 136 minutes apr`es le d´epart), vous sortez de la ville dans 44/2 = 22 minutes. Arriver pile `a l’heure vous laisser sortir imm´ediatement.
D´ecrire un algorithme pour trouver le temps minimum requis pour arriver `a la ville z de la ville a si vous commencez `a a `a minuit (i.e., 00:00).
5. D´ecrire comment le temps de calcul d’une des op´erations Ins´erer orEfface-min de la Question 1 peut ˆetre am´elior´ee en gardant le temps de calcul des deux autres op´erations.
Exercice 2.
Un graphe G est un paire ordonn´ee (V, E) o`u V est un ensemble appel´e sommets et E est un sous ensemble des paires (non-ordonn´ees) de V appel´e arˆetes. Deux sommets u, v ∈ V sont adjacentsi (u, v) est un ´el´ement deE. Ledegr´e d’un sommetuest le nombre d’arˆetes contenant u.
Unchemin dans un grapheGest une suite de sommetsv1, v2, . . . , vko`uvi etvi+1sont adjacents pour tout iand aucun sommet n’apparaˆıt deux fois dans cette suite. Un cycledans un graphe G est un chemin o`u v1 et vk sont adjacent. Un cycle Hamiltonian dans un graphe G est un cycle qui contient tout sommet deG.
Le but de cet exercice est de donner un algorithme polynomial pour trouver un cycle Hamilto-nian dans un grapheG= (V, E) avec au moins trois sommets et o`u tous les sommets ont degr´e au moins |V|/2. Un graphe avec ces propri´et´es est un graphe de degr´e ´elev´e.
Vous pouvez directement donner un tel algorithme et d´emontrer qu’il est correcte et a un temps de calcul polynomial `a la place de r´epondre aux Questions 1-5. Dans ce cas, vous devez toujours r´epondre `a la Question 6.
1. Donner un algorithme polynomial qui prends en entr´ee un graphe de degr´e ´elev´e G et chemin P =v1, . . . , vk dans G o`u k < n et retourne soit un chemin avec k+ 1 sommets ou un cycle contenant les sommets de P (possiblement dans un ordre diff´erent).
2. Donner un algorithme polynomial qui prends en entr´ee un graphe de degr´e ´elev´e G et cycle C dans G o`u k < n et retourne un chemin avec k+ 1 sommets contenant tous les sommets de C (possiblement dans un ordre diff´erent).
64 E.N.S. Paris – S´election internationale 2014 Informatique (3 h) [i14uxue] 3/3
3. Donner un algorithme polynomial qui prends en entr´ee un graphe de degr´e ´elev´e G et retourne un cycle Hamiltonian dans G.
4. Montrer que le temps de calcul de votre algorithme de la Question 3 est bien polynomial.
Ecrire explicitement la valeur de´ k pour lequel votre algorithme a un temps de calcul O(nk).
5. Montrer que votre algorithme de la Question 3 est correcte. C’est `a dire, montrer qu’il retourne bien un cycle et que celui-ci est Hamiltonian. (Selon votre algorithme, il est peut ˆetre n´ecessaire de montrer qu’il ne bloque pas et termine.)
6. Expliquer comment changer l’algorithme de la Question 3 en un algorithme qui prends en entr´ee un graphe G= (V, E) avec au moins 3 sommets et o`u la somme des degr´es de n’importe quel paire de sommets non-adjacents u, v est au moins |V| et qui retourne un cycle Hamiltonian dans G.
E.N.S. Paris – S´election internationale 2014 65 Informatique (2 h) [i14uxve] 1/2
S´ election internationale Session 2014
Ecole Normale Sup´ ´ erieure Paris
Epreuve de culture scientifique - ´ Informatique Dur´ee : 2 heures Pour les candidats ayant choisi l’informatique comme sp´ ecialit´ e
secondaire
Si vous ne parvenez pas `a r´epondre `a une question, vous pouvez cependant l’utiliser comme hypoth`ese pour les questions suivantes.
Calculatrices interdites.
Exercice 1.
Les portes logiques sont des ´el´ements d’un circuit dont les entr´ees et les sorties sont binaires.
Les trois portes logiques ´el´ementaires et, ou and non sont d´ecrites ci-dessous.
x
y x∧y
ET
x
y x∨y
OU
x ¬x
NON
Dans les questions suivantes, indiquer clairement les entr´ees et les sorties dans tous les dia-grammes de circuit. ´Eviter autant que possible d’utiliser des symboles suppl´ementaires et si c’est le cas, indiquer dans votre r´eponse ce qu’ils repr´esentent.
1. En utilisant uniquement les porteset,ouetnon, dessiner un diagramme de circuit pour un additionneur de 1 bit qui prend en entr´ee deux bits a0, b0 et (´eventuellement) une retenue r et retourne la somme s0 de a0, b0 etr et la retenue s1.
s0 =a0+b0+rmod 2 ets1 =b(a0+b0+r)/2c
2. En utilisant uniquement les portes et, ou etnon et le circuit de la question pr´ec´edente, dessiner un diagramme pour un additionneur de 3 bits qui prend en entr´ee a2,b2, a1, b1, a0, b0, r representant deux nombres de 3 bits a and b en binaire (not´ea2a1a0 et b2b1b0), et un bit de retenue r. Il devra retourner la sommes de ces trois nombres en binaire sous la forme s3, s2, s1, s0.
X3 i=0
si2i = X2
i=0
ai2i+ X2
i=0
bi2i+r
Expliquer comment ´etendre cet additionneur en un additionneur pour n bits.
3. D´eterminer le nombre de portesg(n) n´ecessaires pour le circuit de l’additionneur pourn bits de la Question 2.
4. Supposons que le temps de propagation d’un signal logique `a travers une porte ´el´ementaire est de t secondes (ind´ependamment de la porte). Si tous les signaux d’entr´ee sont alt´er´es pour l’additionneur pour n bits de la Question 2 au temps 0, quel est le temps n´ecessaire pour l’obtention du r´esultat en sortie du circuit (en fonction de n et t).
66 E.N.S. Paris – S´election internationale 2014 Informatique (2 h) [i14uxve] 2/2
Nous appelons un additionneur de 2kbits diviser-pour-r´egner le circuit d´efini r´ecursivement de la fa¸con suivante :
• L’additionneur de 1-bit diviser pour r´egner est l’additionneur de 1-bit de la Question 1.
• Pour k ≥ 1, l’additionneur de 2k-bit diviser pour r´egner est obtenu en fusionnant deux additionneurs de 2k−1-bit diviser pour r´egner A et B en envoyant les 2k−1 bits de poids faible des entr´ees a et b et l’´eventuelle retenue r `a A et tous les bits restants `a B. La retenue de la sortie deA est envoy´ee `a B.
5. D´eduire le d´elai pour l’obtention du r´esultat pour ce circuit en fonction den = 2k et det.
Nous consid´erons maintenant un additionneur de 2k bits diviser-pour-r´egner am´elior´e o`u le circuit agissant sur les bits de poids forts est remplac´e par deux additionneurs, l’un supposant que la retenue entrante vaut 1 et l’autre supposant que la retenue entrante vaut 0.
6. Dessiner le diagramme de circuit utilisant trois additionneurs de 2k−1 bits diviser-pour-r´egner am´elior´e et quelques portes logiques ´el´ementaires pour construire un additionneur de 2k bits diviser-pour-r´egner am´elior´e.
7. D´eduire le d´elai pour l’obtention du r´esultat pour cet additionneur de 2k bits diviser-pour-r´egner am´elior´e en fonction de n= 2k et de t.
8. Donner une formule r´ecursive donnant le nombre de portes logiques ´el´ementaires dans cet additionneur de 2k bits diviser-pour-r´egner am´elior´e.
E.N.S. Lyon – Second concours 2015 67 Informatique (3 h) [i1532ue] 1/6
Ce sujet comporte trois parties ind´ependantes. Il est recommand´e de lire l’ensemble du sujet avant de commencer la r´edaction. Il est ´egalement conseill´e de traiter les questions dans l’ordre de l’´enonc´e. On pourra ce-pendant aborder une question en admettant les r´esultats des questions pr´ec´edentes. Les algorithmes demand´es seront ´ecrits dans un langage de programmation au choix du candidat.