Arbres binaires d`intervalles. Graphes.

publicité
Année universitaire 2014/2015
Site : ⊠ Luminy ⊠ St-Charles St-Jérôme Cht-Gombert
Sujet de : ⊠ 1er semestre 2 ème semestre Session 2
⊠ Aix-Montperrin Aubagne-SATIS
Durée de l’épreuve : 2h
Examen de : L2
Code du module : SIN3U1
Nom du diplôme : Licence d’Informatique
Libellé du module : Algorithmique
Calculatrices autorisées : NON
Documents autorisés : OUI, polys et notes de Cours/TD/TP
Dans tout ce qui suit vous utiliserez les notations O(f (n)) et Θ(f (n)) pour décrire le comportement asymptotique d’un algorithme (sa complexité).
Arbres binaires d’intervalles.
Un arbre binaire d’intervalles est un arbre binaire dont les noeuds contiennent des intervalles (et non pas de
simples valeurs numériques). Etant donné un noeud p, on note inf (p) et sup(p) les bornes de l’intervalle du
noeud p, et f ilsg(p) et f ilsd(p) respectivement le fils gauche et le fils droit du noeud p. Les noeuds sont
organisés dans l’arbre de façon similaire à un arbre binaire de recherche classique : les intervalles figurant
dans le fils gauche du noeud p ont des bornes inf qui sont plus petites ou égales à inf (p), et les intervalles
figurant dans son fils droit ont des bornes inf qui sont strictement plus grandes que inf (p). Les bornes sup
des intervalles n’interviennent donc pas dans la structure de l’arbre.
Le problème qui nous intéresse est de déterminer, pour une valeur x donnée, s’il existe des intervalles dans
l’arbre qui contiennent x, c’est-à-dire s’il existe un noeud p tel que inf (p) ≤ x ≤ sup(p). Pour traiter ce
problème de manière efficace il est utile d’ajouter dans chaque noeud p la valeur maximale des bornes sup des
intervalles figurant dans l’arbre enraciné en p, notée max(p).
Question 1. Construisez l’arbre binaire de recherche correspondant aux insertions des intervalles (19, 22),
(27, 31), (33, 34), (10, 12), (25, 28), (3, 11), (14, 16), et (12, 17) dans cet ordre, partant d’un arbre vide.
Indiquez au-dessus de chaque noeud p la valeur max(p).
Soit p un noeud d’un arbre donné, et x une valeur qui n’appartient pas à l’intervalle [inf (p), sup(p)].
Question 2. Si x > max(f ilsg(p)) est-il utile de chercher x dans le fils gauche de p ? Justifiez votre réponse.
Question 3. Supposons maintenant que x ≤ max(f ilsg(p)) et qu’il existe un intervalle de l’arbre enraciné
en p qui contient x. Montrez qu’alors il existe un intervalle de f ilsg(p) qui contient x.
Question 4. En utilisant les propriétés introduites dans les questions 2 et 3, décrivez un algorithme qui, étant
donnés un arbre a et une valeur x, détermine si il existe un intervalle de a qui contient x. Cet algorithme ne
devra parcourir qu’une seule branche de l’arbre.
Graphes.
Un graphe orienté pondéré G est donné par la matrice d’incidence suivante, où les sommets du graphe sont
numérotés de 1 à 7 et où il existe un arc du sommet s1 vers le sommet s2 si et seulement si la case située à
l’intersection de la ligne s1 et de la colonne s2 contient un entier, égal au poids de l’arc (s1 , s2 ).
1
1
2
3
4
5
6
7
2
3
20
3
4
10
5
2
11
6
20
5
10
4
4
4
7
8
13
Question 1. Dessinez le graphe G.
Question 2. Calculez, au moyen de l’algorithme de Dijsktra, les distances des plus courts chemins allant du
sommet 1 à tous les autres sommets du graphe. Donnez toutes les étapes de l’algorithme.
Question 3. Quel est le plus court chemin permettant d’aller du sommet 1 au sommet 2 ?
Programmation dynamique
On dit qu’une suite d’entiers u0 , u1 , . . . , un est à variation bornée par l’entier k si pour tout indice i ∈ [0, n−1],
|ui − ui+1 | ≤ k.
Par exemple, la suite
0, −2, 2, −1, 4, 0, 1, 6, 7, 0, 6, 8, 1, 9, 7, −1
a une variation bornée par 8 car le plus grand écart entre 2 termes consécutifs est égal à 8 : entre 1 et 9, ou
entre 7 et -1. La sous-suite 0, −2, −1, 0, 1, 0, 1, −1 a une variation bornée par 2.
Étant donnés une suite u = (u0 , u1 , . . . , un ) et un entier k, on souhaite extraire de u une plus longue sous-suite
ui1 , . . . , uih à variation bornée par k, où i1 < i2 < · · · < ih .
Question 1 : Dans l’exemple ci-dessus, quelle est la plus longue sous-suite à variation bornée par k, pour
k = 0, k = 1 et k = 2 ?
On définit fk (i) comme étant égal à la longueur maximale d’une sous-suite extraite de u, à variation bornée
par k et se terminant par ui .
Question 2 : Donnez les valeurs de f5 (i) calculées sur la suite précédente pour i = 0, . . . , 15.
Question 3 : Pour tout entier i ∈ [1, n], exprimez fk (i) en fonction de {fk (j)|0 ≤ j < i}.
Soit sk la longueur maximale d’une sous-suite extraite de u à variation bornée par k.
Question 4 : Exprimez sk en fonction de {fk (j)|0 ≤ j ≤ n}.
Question 5 : Écrivez en C le programme qui prend en entrée une suite u = (u0 , u1 , . . . , un ) stockée dans un
tableau, et un entier k et retourne sk .
Téléchargement