1. a) Rappel

publicité
M1
2012–2013
Algorithmique de base
Interrogation no 1
Durée : 1h
Les notes de cours sont autorisées.
Exercice 1 (sur 5 points)
1. a) Rappeler la définition d’un arbre binaire de recherche.
b) Rappeler l’algorithme, vu en cours, de recherche dans un arbre binaire de recherche
et donner sa complexité asymptotique.
2. a) Donner un algorithme qui prend en entrée un arbre binaire de recherche arbre et
un élément x et qui renvoie le plus petit élément y supérieur ou égal à x qui est
présent dans arbre (ou renvoie une erreur si un tel y n’existe pas).
3. a) Rappeler l’algorithme, vu en cours, de parcours en profondeur d’un graphe.
b) Soit arbre un arbre binaire de recherche ayant n éléments. En s’inspirant de
l’algorithme de parcours en profondeur, proposer un algorithme de complexité O(n)
qui imprime dans l’ordre croissant tous les éléments de arbre.
(On pourra écrire, au choix, un algorithme itératif ou récursif.)
Exercice 2 (sur 5 points)
Le but de cet exercice est de présenter un algorithme efficace de calcul de plus court
chemin sur un graphe acyclique (i.e. n’ayant pas de cycle).
Soit G un graphe orienté acyclique ayant S sommets et A arêtes. Chaque arête (u, v)
de G est, en outre, munie d’une longueur qui est un réel strictement positif noté
`(u, v). Si s et t sont deux sommets de G, la distance de s à t est alors définie comme
l’infimum des quantités `(s0 , s1 ) + `(s1 , s2 ) + · · · + `(sk−1 , sk ) pris sur tous les chemins
possibles hs0 , s1 , . . . , sk i reliant s à t (i.e. s0 = s, sk = t et (si , si+1 ) est une arête de G
pour tout i).
On rappelle que les sommets de G peuvent être triés topologiquement, c’est-à-dire
qu’il existe un ordre total noté ≺ sur les sommets de G tel que u ≺ v dès qu’il existe une
arête de u vers v.
1. Rappeler l’algorithme, vu en cours, permettant de calculer un ordre topologique sur
les sommets de G.
1. Par définition, un voisin v de u est un sommet v de G pour lequel l’arête (u, v) existe dans G.
1/2
Algorithme 1: Distance(s, t)
5
calculer un ordre topologique ≺ sur les sommets de G;
pour chaque sommet u de G faire δ[u] = +∞;
δ[s] = 0;
pour chaque sommet u de G parcouru selon l’ordre ≺ faire
pour chaque voisin 1 v de u faire δ[v] = min(δ[v], δ[u] + `(u, v));
6
retourner δ[t];
1
2
3
4
2. On se donne s et t deux sommets de G et on suppose que hs0 , s1 , . . . , sk i est un plus
court chemin reliant s à t.
a) Montrer que si ≺ si+1 pour tout i ∈ {1, . . . , k − 1}
b) Montrer que, pour tout i ∈ {1, . . . , k}, le chemin hs0 , s1 , . . . , si i est un plus court
chemin reliant s à si .
c) Montrer par recurrence sur i que la valeur δ[si ] calculée par l’algorithme Distance
ci-dessus est la distance de s à si .
d) En déduire que l’algorithme Distance(s, t) calcule la distance de s à t.
3. Montrer la complexité asymptotique de l’algorithme Distance est O(S +A). Comparer
avec la complexité de l’algorithme de Dijkstra.
2/2
Téléchargement