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 yn’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
) +
· · ·
+
`
(
sk1, sk
) pris sur tous les chemins
possibles
hs0, s1, . . . , ski
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
uv
dès qu’il existe une
arête de uvers 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 vde uest un sommet vde Gpour lequel l’arête (u, v) existe dans G.
1/2
Algorithme 1: Distance(s, t)
1calculer un ordre topologique sur les sommets de G;
2pour chaque sommet ude Gfaire δ[u]=+;
3δ[s] = 0;
4pour chaque sommet ude Gparcouru selon l’ordre faire
5pour chaque voisin 1vde ufaire δ[v] = min(δ[v], δ[u] + `(u, v));
6retourner δ[t];
2. On se donne set tdeux sommets de Get on suppose que hs0, s1, . . . , skiest un plus
court chemin reliant sàt.
a) Montrer que sisi+1 pour tout i∈ {1, . . . , k 1}
b)
Montrer que, pour tout
i∈ {
1
, . . . , k}
, le chemin
hs0, s1, . . . , sii
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
1 / 2 100%