Lycée Carnot — 2016-2017 Option informatique MP/MP*
1. Donner des exemples de files de priorité et de leurs applications.
2. Au vu de la signature de la structure de données, que font les différentes opérations?
3. Expliquer comment implémenter une pile et une file si l’on dispose d’une file de priorité.
4. On propose d’implémenter cette structure de données à l’aide d’un tas-min. On défini alors
type ’a pprio =Empty |’a pprio *’a*int *’a pprio;;
5. Implémenter les fonctions empty,is_empty et get_min.
6. On suppose disposer d’une fonction merge :’a pprio -> ’a pprio -> ’a pprio qui fu-
sionne deux tas. Implémenter les opérations add et remove_min.
7. Implémenter la fonction merge. On ne cherchera pas à équilibrer les arbres.
8. Proposer la signature pour une file de priorité impérative. On pourra ajouter une exception dans le
cas où la file est pleine et un opérateur is_full. Ceci n’est bien sûr pas lié à l’aspect modifiable mais
au fait que nous allons utiliser un tableau (non redimensionnable).
9. Pour réaliser la version impérative on propose toujours d’utiliser un tas-min, mais on représente
celui-ci à l’aide d’un tableau. La racine de l’arbre occupe la case d’indice 0. Les racines des sous-
arbres du nœud stocké à la case isont stockées respectivements aux cases 2i+1 et 2i+2. Où est
stocké le père du nœud i?
10. Proposer un type ’a mprio utilisant un tas-min représenté dans un tableau. Implémenter les opé-
rations empty,is_empty,is_full et get_min.
11. Écrire une fonction récursive percolate_up :’a mprio -> ’a-> int -> int -> unit
telle que percolate_up p elt prio i insère l’élément elt de priorité prio dans un tas pen
partant de la position i. Cette fonction suppose que l’arbre de racine iobtenu en plaçant elt en i
est un tas.
12. En déduire une implémentation de l’opération add.
13. Écrire une fonction récursive percolate_down :’a mprio -> ’a-> int -> int -> unit
telle que percolate_down p elt prio i insère l’élément elt de priorité prio dans le tas p, à
la place de l’élément en position i.
14. Implémenter l’opération remove_min. On pourra insérer à la racine l’élément le plus à droite du tas.
15. Quelle est la complexité des différentes opérations ?
EXERCICE 8Arbres binomiaux
Pour k∈N, un arbre binomial Bkest un arbre ordonné (la liste des fils est ordonnée) défini récursivement
par : (a) B0est constitué d’un nœud unique ; (b) pour k≥1, Bkest l’arbre Bk−1auquel on a rajouté comme
fils le plus à gauche un autre arbre Bk−1.
1. Dessiner les arbres Bkpour 0 ≤k≤4.
2. Montrer qu’un arbre binomial Bkest constitué de 2knœuds.
3. Montrer que sa hauteur est k.
4. Pour 0 ≤i≤k, montrer qu’il existe exactement (k
i)noeuds de profondeur i.
5. Montrer que la racine a pour degré k, et que ce degré est supérieur à celui des autres nœuds. Montrer
que les fils de Bksont, dans l’ordre : Bk−1,Bk−2, . . . , B0.
6. Montrer que le degré maximal d’un nœud quelconque dans un arbre binomial à nnœuds est log2n.
http://carnot.cpge.info 3