Ensimag 1A Apprentissage 2012-2013 Algorithmique & Programmation - Examen p´eriode 2
ALGORITHMIQUE ET PROGRAMMATION
Examen de p´eriode 2, 14 mars 2013
Dur´ee 3h, tous documents autoris´es.
Le bar`eme est indicatif (total sur 22 points).
La r´edaction de vos r´eponses devra contenir des commentaires et des explications pertinentes.
Sauf indication contraire, le code demand´e sera r´edig´e en Java. Si vous ne connaissez pas la
syntaxe d’une classe ou d’une m´ethode existante, d´ecrivez pr´ecisement l’op´eration attendue.
1 Recherche de points dans un intervalle (17 points)
Le but de ce probl`eme est d’´etudier une structure de donn´ees, nomm´ee RangeTree, perme-
ttant de d´eterminer efficacement quels points, parmi un grand ensemble, se trouvent dans
un intervalle donn´e (en g´en´eral de petite taille). La premi`ere partie ´etudie le probl`eme en
dimension 1 et la seconde ´etend le probl`eme `a 2 dimensions (l’“intervalle“ consid´er´e est alors
un rectangle).
1.1 Recherche de points dans un intervalle 1D
En 1D, on s’int´eresse `a un RangeTree contenant des valeur enti`eres. La structure utilis´ee
repose sur un arbre binaire de recherche avec les propri´et´es suivantes :
•chaque noeud de l’arbre porte une ´etiquette enti`ere v. Pour une feuille, vest une des
valeurs stock´ees (les valeurs sont donc toutes contenues dans les feuilles). Pour un
noeud interne, vest la plus grande valeur contenue dans son sous-arbre gauche.
•pour tout noeud d’´etiquette v, toutes les ´etiquettes vg dans le sous-arbre gauche
v´erifient vg ≤vet toutes les ´etiquettes vd du sous-arbre droit v´erifient vd ≥v.
Autrement dit, un autre noeud portant la mˆeme ´etiquette vpeut ˆetre stock´e soit
`a gauche soit `a droite.
•tout noeud interne est de plus ´etiquett´e par un intervalle, qui repr´esente l’intervalle
des feuilles contenus dans ses sous-arbres, les bornes ´etant atteintes. Par exemple sur
la figure 1, le noeud interne d’´etiquette 14, dont les feuilles sont 10, 14 et 20, porte
l’intervalle [10,20].
•l’arbre est ´equilibr´e. Un noeud interne a toujours exactement deux fils, dont les nombres
de valeurs port´ees diff`erent d’au plus 1.
1/8