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
Ensimag 1A Apprentissage 2012-2013 Algorithmique & Programmation - Examen p´eriode 2
6
3
3
3
3 3
3
3 3
4
3
3 4
6
8
7
6
6 7
8
14
10
10 14
20
[3,20]
[3,6]
[3,3]
[3,3] [3,3]
[3,6]
[3,4]
[6,20]
[6,8]
[6,7]
[10,20]
[10,14]
Figure 1: Exemple de RangeTree 1D contenant {3, 3, 3, 3, 3, 4, 6, 6, 7, 8, 10, 14, 20}.
Question 1 : propri´et´es de l’arbre ´equilibr´e (1 point)
1. Soit nle nombre de valeurs stock´ees dans l’arbre, qui a donc nfeuilles.
Combien l’arbre contient-il de noeuds internes? (valeur exacte en fonction de n). Le
d´emonstrer par r´ecurrence.
2. Quelle est la hauteur de l’arbre en fonction de n? (par convention, la hauteur de l’arbre
vide est -1).
1.1.1 Repr´esentation de l’arbre, construction et affichage
Un RangeTree 1D est un objet de la classe Arbre, qui contient comme seul attribut la racine
de l’arbre de type Noeud :
public class Arbre {
private Noeud racine = null;
// pr econ diti on : le tableau valeurs est trie par ordre croiss ant
public Arbr e ( int [] valeurs ) {
if ( valeurs . length > 0) {
racine = c on st ru itArb re ( valeurs , 0, v aleurs . length - 1);
}
}
// METH ODES A COM PLETER DANS LES QUESTI ONS SUIVANT ES
private Noeud construitArbre(int [] valeurs , int indInf , int indSup) {
2/8
Ensimag 1A Apprentissage 2012-2013 Algorithmique & Programmation - Examen p´eriode 2
...
}
public String t oString () {
...
}
public String t oS tr in g ( int a , int b ) {
...
}
public Iterator < Integer > iter ato r ( int a , int b ) {
...
}
}
La hi´erarchie des noeuds est compos´ee classiquement d’une classe Noeud abstraite, h´erit´ee
par deux classes concr`etes Interne et Feuille.
Question 2 : classes de la hi´erarchie des noeuds (1 point)
D’apr`es les propri´et´es d´ecrites en section 1.1, ´ecrire la structure des classes Noeud,Interne et
Feuille repr´esentant les diff´erents noeuds d’un RangeTree.
Dans cette question, pr´eciser uniquement les attributs et constructeurs des classes.
Question 3 : construction de l’arbre (3 points)
L’arbre est construit directement `a partir d’un tableau tri´e contenant l’ensemble des valeurs.
1. ´ecrire la m´ethode de la classe Arbre :
private Noeud construitArbre(int [] valeurs , int indInf , int indSup)
En pr´econdition, le tableau valeurs est suppos´e tri´e, et les indices v´erifient 0 indInf
indSup valeurs.length. La m´ethode retourne la racine de l’arbre binaire de recherche,
´equilibr´e, dont les feuilles sont tous les ´el´ements du tableau valeurs compris entre les
indices indInf et indSup. Tous les champs des noeuds de l’arbre doivent ˆetre renseign´es
(valeur v, et intervalle pour les noeuds internes).
Indication : rien `a ajouter a priori dans la hi´erarchie des noeuds.
2. quel est son coˆut, pour un tableau de nvaleurs?
3/8
Ensimag 1A Apprentissage 2012-2013 Algorithmique & Programmation - Examen p´eriode 2
Question 4 : affichage de toutes les valeurs (0,5 points)
Ecrire la m´ethode de la classe Arbre qui retourne une chaˆıne contenant toutes les valeurs
d’un RangeTree :
public String t oString ()
Si n´ecessaire, ´ecrire toute m´ethode suppl´ementaire `a ajouter dans la hi´erarchie des noeuds.
1.1.2 Recherche de valeurs dans un intervalle
On s’int´eresse d´esormais `a la recherche de toutes les valeurs contenues dans un intervalle
donn´e. Soit la m´ethode (d´eclar´ee abstraite) de la classe Noeud :
abstract pro tected Noeud chercheValeurs(int a , int b );
L’objectif est de retourner un nouvel arbre, utilisant des noeuds de type Interne ou
Feuille, dont les feuilles sont le sous-ensemble des feuilles de l’arbre initial qui sont contenues
dans l’intervalle consid´er´e [a, b]. Cet arbre r´esultat ne sera utilis´e que pour ˆetre parcouru en
entier, par exemple pour l’affichage des valeurs dans l’intervalle. Ses propri´et´es sont donc :
il peut eutiliser des noeuds existants de l’arbre initial (sans les modifier)
il n’est pas forc´ement ´equilibr´e au sens de l’´enonc´e
il suffit que ses feuilles soient les bonnes et dans le bon ordre
les ´etiquettes des noeuds internes ne sont pas utilis´ees et n’ont pas `a respecter les
propri´et´es d’un RangeTree vues en section 1.1.
Par exemple, la m´ethode invoqu´ee sur l’arbre de la figure 1 pour l’intervalle [6,9] pourrait
retourner un noeud Interne ayant pour fils gauche la premi`ere feuille de valeur 6 et pour fils
droit le noeud interne de valeur 7 et d’intervalle [6,8].
Question 5 : arbre contenant les valeurs d’un intervalle (2 points)
Soit un noeud interne rportant la valeur vet d’intervalle [min, max]. On cherche toutes les
feuilles de rdont les valeurs sont contenues dans un intervalle [a, b].
1. En fonction de a, b, min, max et v, quel(s) sous-arbre(s) du noeud rdoivent ˆetre ex-
plor´es pendant la recherche? (justification avec un sh´ema et/ou des explications en
fran¸cais)
2. Ecrire l’impl´ementation de la m´ethode
abstract public Noeud chercheValeurs(int a , int b );
dans les classes Interne et Noeud.
4/8
Ensimag 1A Apprentissage 2012-2013 Algorithmique & Programmation - Examen p´eriode 2
Question 6 : affichage des valeurs dans un intervalle (1 point)
1. Ecrire la m´ethode
public String t oS tr in g ( int a , int b );
de la classe Arbre qui retourne une chaˆıne contenant toutes les valeurs d’un arbre
RangeTree dans l’intervalle [a, b].
(Vous pouvez bien sˆur utiliser les m´ethodes des questions pr´ec´edentes, eme si elles
n’ont pas ´et´e ´ecrites...)
2. Quelle est la complexit´e de cette m´ethode pour un arbre `a nnoeuds dont msont
contenus dans l’intervalle recherch´e ?
Question 7 : it´erateur dans un intervalle (3 points)
Ecrire maintenant tout le code n´ecessaire pour une m´ethode de la classe Arbre retournant
un it´erateur sur toutes les valeurs d’un arbre comprises dans un intervalle :
public Iterator < Integer > iter ato r ( int a , int b );
Attention : il n’est pas autoris´e d’utiliser l’op´erateur instanceof ou toute autre m´ethode
en simulant le comportement (genre boolean estFeuille() dans la classe Feuille...).
Indication : ajouter une m´ethode dans la hir´erarchie des noeuds!
5/8
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !