Documente Academic
Documente Profesional
Documente Cultură
1 Aucun document n’est autorisé, en dehors de l’aide-mémoire distribué avec le sujet. Les calculatrices sont
également interdites.
2 Vous pouvez utiliser les ordinateurs pour expérimenter ou faire des calculs, mais rendez toutes vos
réponses sur la copie papier. Le contenu du compte informatique est effacé à la fin de l’examen.
3 Il y a 9 questions, compter au plus 5mn par question.
4 La plupart des questions sont indépendantes. Si vous n’arrivez pas à implémenter une fonction, vous
pouvez tout de même utiliser cette fonction pour les questions suivantes.
1
VILLES = [
[1 , 1] ,
[3 , 1] ,
[2 , 2] ,
[4 , 2] ,
[2 , 4]
]
N = len ( VILLES )
Dans la suite de l’exercice, on suppose que VILLES et N sont définies en variable globale.
La première ville est VILLES[0] et se trouve aux coordonnées (1, 1). La seconde, VILLES[1] aux coordonnées
(3, 1), etc. On a donc VILLES[1][0] == 3, VILLES[1][1] == 1...
On définit un itinéraire entre villes comme une liste d’indices i ∈ [0, n − 1] de villes, tel que chaque indice ap-
paraît une et une seule fois dans la liste. L’itinéraire de la figure 1.(b) est représenté par la liste [0, 3, 1, 4, 2]
et celui de la figure 1.(c) par [0, 1, 3, 4, 2]. Le fait que l’itinéraire soit cyclique est implicite : on ne fait pas
apparaître deux fois l’indice de la ville de départ. On peut remarquer que les dessins des figures 1.(b) et 1.(c)
peuvent être représentées par plusieurs listes (selon le sens de parcours et le choix de la ville de départ).
Question 1 (1.5 points) Écrire une fonction choisir_ville(itineraire) qui renvoie une ville (un entier
dans [0, n−1]) qui n’apparaît pas dans itineraire. La ville doit être choisie aléatoirement avec une distribution
uniforme sur les villes non-visitées.
Question 3 (1 point) Écrire une fonction choisir_itineraire() qui construit et renvoie une liste de n
villes différentes choisies aléatoirement.
Question 4 (0.5 point) Écrire une fonction distance(n1, n2) qui renvoie la distance entre la ville
d’indice n1 et celle d’indice n2. Sur notre exemple, distance(0, 1) doit renvoyer 2.
Question 5 (1.5 points) Écrire une fonction longueur_itineraire(itineraire) qui prend en paramètre
un itinéraire et renvoie la longueur de l’itinéraire (i.e. la somme des distances entre les villes apparaissant dans
l’itinéraire, sans oublier la distance à parcourir pour revenir au point de départ).
Question 6 (2 points) Écrire une fonction voyageur(k) qui tire k itinéraires aléatoirement et renvoie
l’itinéraire le plus court parmi ceux-ci.
Question 7 (1 point) Quelle est la complexité de la fonction voyageur que vous venez d’écrire (attention,
la complexité est fonction de plusieurs variables). Justifiez votre réponse.
Question 9 (0.5 point) Écrire le code Python qui calcule et affiche l’itinéraire le plus court parmi 1000
tirages aléatoires.