E3A Option Informatique MP 2017Sujet et corrigé
- Arbres binaires et récursivité
- Complexité algorithmique
- Listes et tableaux
- Suites récurrentes linéaires (Fibonacci)
- Programmation dynamique
- Graphes non orientés pondérés et algorithme de Floyd-Warshall
Téléchargements
- Rapport du jury : non disponible
Présentation du sujet
Arbres binaires « peignes », complexité algorithmique, décomposition de Zeckendorf et plus courts chemins dans un grapheAfficher ou masquer la section
Présentation du sujet
L'exercice 1 étudie une famille particulière d'arbres binaires appelés peignes, leur reconnaissance, et une opération de rotation permettant de les ranger. L'exercice 2 étudie plusieurs méthodes, sur des listes puis sur des tableaux, pour déterminer les élèves absents d'une classe, en comparant leurs complexités. L'exercice 3 étudie la suite de Fibonacci, la décomposition de Zeckendorf d'un entier et son codage binaire associé. L'exercice 4 applique l'algorithme de Floyd-Warshall, en Python, au calcul des plus courts trajets dans le graphe d'un réseau de métro.
- 1Exercice 1 : arbres binaires « peignes »On définit les arbres peignes, stricts et rangés, on écrit des fonctions OCaml de reconnaissance, puis une opération de rotation permettant de ranger un peigne quelconque.
- 2Exercice 2 : recherche des élèves absentsOn écrit des fonctions déterminant les entiers absents d'une liste, d'abord en manipulant des listes puis en utilisant un tableau représentant une salle de classe, en comparant les complexités obtenues.
- 3Exercice 3 : suite de Fibonacci et décomposition de ZeckendorfOn étudie le calcul efficace des termes de la suite de Fibonacci, la décomposition de Zeckendorf d'un entier comme somme de termes de Fibonacci non consécutifs, et son codage binaire associé.
- 4Exercice 4 : plus courts trajets dans un réseau de métroOn modélise un réseau de métro par un graphe non orienté pondéré par des durées de trajet, et on met en œuvre, en Python, l'algorithme de Floyd-Warshall pour calculer les durées minimales entre toutes les paires de stations.
Ces sujets peuvent vous intéresser
Lecture du sujet en ligne
L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.Afficher ou masquer la section
Lecture du sujet en ligne
e3a 2017 : option informatique
Exercice 1
type arbre =
|Feuille of int
|Noeud of arbre * arbre ;;

- Représenter un peigne rangé à 5 feuilles.
- La hauteur d'un arbre est le nombre de noeuds maximal que l'on rencontre pour aller de la racine à une feuille (la hauteur d'une feuille seule est 0 ). Quelle est la hauteur d'un peigne rangé à
n feuilles? On justifiera la réponse. - Ecrire une fonction est_range : arbre
→ bool qui renvoie true si l'arbre donné en argument est un peigne rangé. - Ecrire une fonction est_peigne_strict : arbre
→ bool qui renvoie true si l'arbre donné en argument est un peigne strict. En déduire une fonction est_peigne : arbre→ bool qui renvoie true si l'arbre donné en argument est un peigne. - On souhaite ranger un peigne donné. Supposons que le fils droit
N de sa racine ne soit pas une feuille. NotonsA_1 le sous-arbre gauche de la racine,f l'une des feuilles du noeudN etA_2 l'autre sous-arbre du noeudN . On va utiliser l'opération de rotation qui construit un nouveau peigne où
- le fils droit de la racine est le sous-arbre
A_2 ; - le fils gauche de la racine est un noeud de sous-arbre gauche
A_1 et de sous-rabre droit la feuillef .

(b) Ecrire une fonction rotation : arbre
(c) Ecrire une fonction rangement : arbre
Exercice 2
Partie A
- Ecrire une fonction mini : int list
→ (int * int list) qui prend en argument une liste non vide d'entiers distincts, et renvoie le plus petit élément de cette liste, ainsi que la liste de départ privée de cet élément (pas forcément dans l'ordre initial). - En notant
k la longueur de la liste donnée en argument, quelle est la complexité en nombre de comparaisons de la fonction précédente? - En utilisant la fonction mini, écrire une fonction absents : int list
→ int→ int list qui, étant donné une liste non vide d'entiers distincts etn , renvoie, dans un ordre quelconque, la liste des entiers de[0; n − 1] qui n'y sont pas. - En notant
k la longueur de la liste donnée en argument, quelle est la complexité en nombre de comparaisons (en fonction den etk ) de la fonction précédente?
Partie B
5. Ecrire une fonction asseoir : int list
6. En déduire une fonction absent2 : int list
7. En notant
Partie C
8. On considère la fonction place : int vect
let rec place tab i =
if i <> -1 then
begin
let temp=tab.(i) in
tab.(i) <- i;
place tab temp
end;;
9. On considère la fonction placement : int vect
let placement tab n =
for i=0 to n-1 do
if tab.(i) <> -1 && tab.(i) <>i then
begin
let temp=tab.(i) in
tab.(i) <- -1;
place tab temp
end
done;;
Exercice 3
Partie A. Calcul des termes de la suite
- On considère la fonction fibo : int
→ int suivante :
let rec fibo = function
|0->0
|1->1
|n->fibo (n-1) + fibo (n-2);;
2. Ecrire une fonction fibo2 : int
Partie B. Décomposition de Zeckendorf
-
c_0 ≥ 2 , - pour tout
i < k, c_(i + 1) > c_i + 1 (pas d'indices consécutifs), -
n = ∑_(i = 0)^k F_(c_i) .
3. Déterminer une décomposition de Zeckendorf de 20,21 et 22 .
4. Montrer que tout entier strictement positif admet une décomposition de Zeckendorf (on admet qu'elle est unique).
Partie B. Codage de Fibonacci
5. Ecrire une fonction decode : int vect
6. (a) Decrire sans l'implémenter une fonction plusun : int vect
(b) Decrire sans l'implémenter une fonction moinsun : int vect
Exercice 4
-
zeros([n, p]) renvoie un tableau bidimensionnel (n, p ) rempli de 0 ; - si T est un tableau bidimensionnel,
T[i, j] accède à l'élément lignei et colonnej de ce tableau.
On représente ce réseau par un graphe non orienté
- l'ensemble des sommets est
[|0, N − 1|] ; on a numéroté les stations de 0 àN − 1 . Le sommeti du grapheG représente la stationi ; -
A désigne l'ensemble des arêtes deG . Un arête entre les sommetsi etj (éléments de[|0, N − 1|] ) n'existe que si les stationsi etj sont des stations adjacentes sur une même ligne de métro. Ce graphe est représenté par la liste Liste_A (donnée en variable globale) de ses arêtes sous la forme[i, j] tels quei < j .
- Ecrire une fonction voisin_G qui prend en entrée un entier
i ∈ [|0, N − 1|] et reourne la liste des sommets adjacents ài dansG .
On suppose le grapheG connexe et on cherche à déterminer le trajet le plus rapide entre deux stations du réseau.
Soit duree la fonction définie surA qui attribue à une arête(i, j) la durée du trajet entre la stationi et la stationj en minutes, arrondie sur un nombre entier.
Un trajet entre deux stationsi etj correspond à un chemin dansG qui part dei et arrive enj . La durée d'un tel trajeti = i_0 → i_1 → ⋯ → i_n = j utilisantn arêtes est la somme des durées des arêtes:
On dispose de la liste Duree des listes
2. Soient
Pour
3. Soient
4. En déduire, pour
5. Définir Tinit le tableau bidimensionnel (
- Définir la fonction FW qui prend en antrée un tableau bidimensionnel
(N, N)T et retourne le tableau bidimensionnel(N, N)T^′ défini par
- Ecrire un programme qui, en utilisant le tableau Tinit et la fonction FW, permet de calculer un tableau bidimensionnel (
N, N ) dont le (i, j )-ième coefficient vautδ_(min)(i, j) , pour tous sommetsi etj . Combien d'itérations sont-elles nécessaires pour conclure? - Expliquer comment modifier le programme pour obtenir un trajet de durée minimale entre
i etj pour tous sommetsi, j . On ne demande pas de le programmer précisément mais d'expliquer ce qu'il faudrait ajouter au programme précédent pour obtenir de plus ces informations.
Questions fréquentes
5 questionsSur quels chapitres porte ce sujet d'option informatique e3a MP 2017 ?Afficher ou masquer la section
Questions fréquentes
5 questionsSur quels chapitres porte ce sujet d'option informatique e3a MP 2017 ?
Il porte sur les structures de données arborescentes, la complexité des algorithmes sur les listes et tableaux, les suites récurrentes et la programmation dynamique appliquée aux graphes.
Les quatre exercices sont-ils indépendants ?
Oui, l'énoncé propose quatre exercices distincts et indépendants, chacun portant sur une structure de données ou un algorithme différent.
Qu'est-ce qu'un arbre « peigne » dans l'exercice 1 ?
C'est un arbre binaire particulier où tous les nœuds, sauf éventuellement la racine, ont au moins une feuille pour fils ; l'exercice étudie comment reconnaître un tel arbre et le ranger par une opération de rotation.
Qu'est-ce que la décomposition de Zeckendorf étudiée dans l'exercice 3 ?
C'est l'écriture unique d'un entier comme somme de termes de la suite de Fibonacci d'indices non consécutifs, qui permet de coder cet entier par un tableau binaire sans deux 1 consécutifs.
Quel algorithme est mis en œuvre dans l'exercice 4 sur le réseau de métro ?
L'algorithme de Floyd-Warshall, qui calcule par améliorations successives la durée minimale de trajet entre toutes les paires de stations d'un réseau représenté par un graphe pondéré.
Pas de description pour le moment
