MASTER 1 MA408 Algorithmique Partiel

Transcription

MASTER 1 MA408 Algorithmique Partiel
UNIVERSITE DE CAEN
U.F.R. de Sciences
Mathématiques
Année 2006-2007
MASTER 1 MA408
Algorithmique
Partiel - Durée 2h
Sans documents ni calculatrice.
Exercice 1 Soit k un entier fixé >1.
On considère l’algorithme suivant, dont les données d’entrée sont un entier n>1 et un tableau
t = [t1 , . . . , tn ] de n entiers ∈ [1, k].
proc P (n, t)
inconnu := vrai ; i := 0;
tant que inconnu = vrai faire
i := i + 1;
si i = n + 1 alors inconnu := f aux sinon
si ti = 1 alors inconnu := f aux finsi
finsi ;
fin ;
i;
fin ;
1
Expliciter le résultat de cette procédure, et prouver l’algorithme.
2
Calculer la complexité au pire en nombre de tests ti = 1.
On cherche à évaluer la complexité moyenne de cette procédure.
3 Pour k et n fixés, calculer pour tout r ∈ N le nombre ur de tableaux pour lesquels le test
ti = 1 est exécuté r fois.
Montrer que la série génératrice
P∞
0
ur X r est égale à
X
k n − (k − 1)n X n
+ (k − 1)n X n .
k − (k − 1)X
4 Montrer que la complexité en moyenne de l’algorithme en nombre de tests ti = 1 (la moyenne
n
étant prise sur l’ensemble des n-uplets d’éléments de [1, k]) est égale à k 1 − (1 − k1 ) .
Exercice 2 : Algorithme de Floyd
On considère un graphe orienté valué G = (S, A, c) de sommets S = {1, . . . n}, ayant une fonction
de coût à valeurs entières : c : A → Z. On suppose que G ne contient pas de circuit (chemin fermé)
de coût total strictement négatif. On implémente G par une matrice D(0) avec


si i = j,
0
(0)
Di,j = c((i, j)) pour une arête i −→ j,


+∞
s’il n’y a pas d’arête de i vers j.
L’algorithme de Floyd calcule les coûts les moins élevés entre tous les couples de sommets de G,
(k)
en calculant pour k = 1, 2, . . . n des matrices D(k) = (Di,j )) grâce à la formule :
(k)
(k−1)
Di,j = min{Di,j
(k−1)
, Di,k
(k−1)
+ Dk,j
}
L’algorithme se termine à l’étape n, et renvoie la matrice D = D(n) comme la table des plus courtes
distances, Di,j étant la longueur du chemin le plus court allant du sommet i vers le sommet j.
1
Exécuter l’algorithme de Floyd sur le graphe suivant :
2
3
1
-4
7
2
5
2
4
8
1
6
3
-5
4
Ecrire formellement l’algorithme de Floyd.
3
A quoi correspondent les valeurs de la matrice D(k) calculée à l’étape k de
l’algorithme ?
4
Démontrer l’algorithme de Floyd.
5
Quelle est la complexité de l’algorithme de Floyd en fonction de n ?
6 En donnant autant d’information pertinente et précise que possible, mais dans la limite de
100 mots1 , résumer en français courant l’algorithme de Dijkstra sur les graphes et l’étude de sa
complexité. Comparer en une courte phrase les algorithmes de Dijkstra et de Floyd.
1 Une
courte formule comptera pour un mot