Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parPaule Dubois Modifié depuis plus de 11 années
1
UMLV 1 Problème G = (S, A) graphe (orienté) Calculer H = (S, B) où B est la clôture réflexive et transitive de A. Note : (s,t) B ssi il existe un chemin de s à t dans G graphe Ggraphe H Clôture transitive 12 3 4 12 3 4
2
UMLV 2 Matrices nxn où n = card S Amatrice d'adjacence de G = matrice des chemins de longueur 1 B matrice d'adjacence de H = matrice des chemins de G B 1111 0111 0010 0111 A 0100 0111 0000 0100 Représentations matricielles 12 3 4 12 3 4
3
UMLV 3 Notation A k = matrice des chemins de longueur k dans G A 0 = I (matrice identité) A 1 = matrice des chemins de longueur 1 = A Lemme Pour tout k 0, A k = A k Preuve A k [i,j] = 1 ssi s S A k-1 [i,s] = 1 et A[s,j] = 1 soit A k [i,j] = s A k-1 [i,s]. A[s,j] ( somme booléenne) soit A k = A k-1.A et A 0 = I donc A k = A k Clôture par produits i js k k-1
4
UMLV 4 Chemin simple : chemin qui passe une seule fois par chacun de ses sommets Lemme chemin de i à j dans G ssi chemin simple de i à j dans G B[i,j] =1 ssi chemin de i à j dans G ssi chemin simple de i à j dans G ssi k 0 k cardS -1 A k [i,j] =1 doncB = I + A + A 2 + … + A cardS-1 Calcul de B par schéma de Hörner en temps O(n 4 ) avec produit de matrice ordinaire Améliorable en temps < O(n 4 ) avec produit efficace de matrices booléennes Clôture par produits (suite) i s j
5
UMLV 5 3 produits de matrices 1 3 4 5 2 1 2 I + A + A 2 + A 3 = I + (I+A+A 2 ).A = 0 0 1 0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0 = I + A + A 2 + A 3 + A 4 = I + (I+A+A 2 +A 3 ).A = B A = I + A = I + A + A 2 = I + (I+A).A = 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 3 4 5 2 1 2
6
UMLV 6 Notation B k = matrice des chemins de longueur k dans G B 0 = I (matrice identité) B 1 = matrice des chemins de longueur 1= I + A B n-1 = matrice des chemins simples = B Lemme Pour tout k 1, B 2k = B k. B k car B 2k [i,j] =1 ssi B k [i,j] =1 ou ( s S B k [i,s] =1 et B k [s,j] =1 ) Calcul de B comme une puissance n-1 en temps O(n 3 logn) Autre récurrence i js 2k kk
7
UMLV 7 2 produits de matrices 0 0 1 0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0 A = B 1 = B 2 = 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 1 1 0 0 0 0 1 B = B 4 = 1 3 4 5 2 1 2 1 2 1 2
8
UMLV 8 G = (S, A) avec S = {0,1, 2,..., n-1} Chemin de longueur k : i s 1 s 2 ………………. s k-1 j Sommets intermédiaires : s 1, s 2,..., s k-1 Notation C k = matrice des chemins de G dont les sommets intermédiaires sont tous k C -1 = I + A C n-1 = matrice des chemins de G= B Algorithme de Warshall Chemin de 1 à 3 : (2,3), (3,1), (1,3), (3,4), (4,4) sommets intermédiaires : 1, 3, 4 0 2 3 4 1
9
UMLV 9 Lemme Pour tout k 0, C k [i,j] = 1 ssi C k-1 [i,j] = 1 ou ( C k-1 [i,k] =1 et C k -1 [k,j] =1 ) Calcul de C k à partir de C k-1 en temps O(n 2 ) de B = C n-1 en temps O(n 3 ) Récurrence pas de k i jk Chemin simple
10
UMLV 10 ~1 produit de matrice 0 2 3 4 1 0 1 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0 A = C -1 = C 0 = C 1 = C 2 = 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 1 1 1 0 1 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 1 1 0 0 0 0 1 B = C 3 = C 4 =
11
UMLV 11 fonction clôture (graphe G = (S, A)) : matrice ; début n card S ; pour i 0 à n-1 faire pour j 0 à n-1 faire si (i = j ou A[i,j] = 1) alors B[i,j] 1 ; sinon B[i,j] 0 ; pour k 0 à n-1 faire pour i 0 à n-1 faire pour j 0 à n-1 faire B[i,j] B[i,j] + B[i,k]. B[k,j] ; retour B ; fin + est la somme booléenne ; temps d exécution O(n 3 )
12
UMLV 12 G = (S, A, v) graphe valuéS = {0,1,…,n-1} v : A N Matrice des poids : W = (W [i,j]) avec W [i,j] =0 si i = j v((i,j)) si (i, j) A sinon Poids d une suite c = ( (s 0,s 1 ), (s 1,s 2 ), …, (s k-1,s k ) ) où les s i S w(c) = W [ s i-1,s i ] Distance de s à t d (s, t) = min{ w(c) | c suite de s à t } Plus court chemin de s à t : chemin c, s il existe, tel que w(c) = d (s, t) Distances
13
UMLV 13 Problème Calculer la matrice des distances D = ( d(i, j) | 1 i, j n ) Lemme de base ( (s 0,s 1 ), …, (s i,s i+1 ), …, (s j-1, s i ), …, (s k-1,s k ) ) plus court chemin de s 0 à s k dans G ( (s i,s i+1 ), …, (s j-1,s j ) ) plus court chemin de s i à s j dans G s 0 s i s j s k plus court
14
UMLV 14 Notation D k = (D k [i, j] | 1 i, j n ) avec D k [i, j] = min{ w(c) | c chemin de i à j dont les sommets intermédiaires sont tous k } D -1 = W D n-1 = matrice des distances de G = D Lemme Pour tout k 0, D k [i,j] = min{ D k-1 [i,j], D k-1 [i,k] + D k -1 [k,j] } Calcul de D k à partir de D k-1 en temps O(n 2 ) de D = D n-1 en temps O(n 3 ) Algorithme de Floyd pas de k i jk
15
UMLV 15 pour k 0 à n-1 faire pour i 0 à n-1 faire pour j 0 à n-1 faire D [i, j] min { D [i, j], D [i, k] + D [k, j] } ; k c i b a kj min { a, b + c } D k = i j a k b c
16
UMLV 16 D -1 = W = 0 1 3 2 9 2 4 0 7 8 1 0 1 8 0 4 7 0 9 0 2 0 D 0 = 0 1 8 0 4 7 0 9 0 1 0 D 1 = 0 1 5 8 0 4 7 0 9 0 1 5 0 D 2 = 0 1 5 8 0 4 13 7 0 9 0 1 5 0 D 3 = 0 1 5 8 13 0 4 13 9 7 0 9 0 1 5 0
17
UMLV 17 Mémorisation explicite des plus courts chemins de i à j, (0 i, j n-1) n 2 chemins de longueur maximale n-1 : espace O(n 3 ) Matrice des prédécesseurs : espace (n 2 ) P k = (P k [i, j] | 0 i, j n-1 ) avec P k [i, j] = prédécesseur de j sur un plus court chemin de i à j dont les sommets intermédiaires sont tous k Récurrence P -1 [i, j] =isi (i, j) A -sinon P k [i, j] =P k-1 [i, j] si D k-1 [i, j] D k-1 [i, k] + D k-1 [k, j] P k-1 [k, j] sinon Mémorisation des chemins i j D k-1 [i, j] k s t
18
UMLV 18 D -1 = W = 0 1 3 2 9 2 4 0 7 8 1 0 1 8 0 4 7 0 9 0 2 0 D 0 = 0 1 8 0 4 7 0 9 0 1 0 D 1 = 0 1 5 8 0 4 7 0 9 0 1 5 0 D 2 = 0 1 5 8 0 4 13 7 0 9 0 1 5 0 D 3 = 0 1 5 8 13 0 4 13 9 7 0 9 0 1 5 0 - 0 - 0 - - 1 - - 2 - 2 3 3 - - P 0 = P 1 = P 2 = P 3 = P -1 = - 0 - 0 - - 1 - - 2 - 2 3 0 - - - 0 1 0 - - 1 - - 2 - 2 3 0 1 - - 0 1 0 - - 1 2 - 2 - 2 3 0 1 - - 0 1 0 3 - 1 2 3 2 - 2 3 0 1 -
19
UMLV 19 0 1 3 2 9 2 4 0 7 8 1 D 3 = 0 1 5 8 13 0 4 13 9 7 0 9 0 1 5 0 P 3 = - 0 1 2 3 - 1 2 3 2 - 2 3 0 1 - Exemple de chemin distance de 1 à 0 = D 3 [1,0] = 13 P 3 [1,0] = 3 ;P 3 [1,3] = 2 ;P 3 [1,2] = 1 ; 1 2 4 3 9 0 0
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.