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