Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 320 minIntermédiaire

Puissances de la matrice d'adjacence et chemins de longueur p

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • calculer M² et M³, et y lire le nombre de chemins de longueur p ;
  • calculer une somme et un produit booléens de matrices ;
  • distinguer puissance entière et puissance booléenne ;
  • lister les chemins qui correspondent à un coefficient.

4 exercices corrigés1 schéma

Si M est la matrice d'adjacence d'un graphe, le coefficient ligne i, colonne j de la puissance entière Mᵖ = M × M × … × M est le nombre de chemins de longueur p qui vont du sommet i au sommet j. La puissance booléenne M^[p], calculée avec la règle 1 + 1 = 1, dit seulement s'il existe au moins un tel chemin (1) ou non (0). Ce chapitre explique pourquoi, montre comment calculer ces puissances à la main et à la machine, et comment les interpréter : c'est la question de matrices la plus fréquente des exercices de graphes de l'E3.

Rappel : le produit de deux matrices

Le produit de deux matrices carrées A et B de même taille n est la matrice C = A × B dont le coefficient ligne i, colonne j est le produit de la ligne i de A par la colonne j de B : on multiplie les coefficients deux à deux et on additionne.

cᵢⱼ = aᵢ₁ × b₁ⱼ + aᵢ₂ × b₂ⱼ + … + aᵢₙ × bₙⱼ

Par exemple, si la ligne i de A est (1 0 1) et la colonne j de B est (1 1 1) lue de haut en bas, alors cᵢⱼ = 1 × 1 + 0 × 1 + 1 × 1 = 2. Le produit de matrices n'est pas commutatif en général, mais les puissances d'une même matrice ne posent pas ce problème : M² = M × M, M³ = M² × M = M × M², etc. Le calcul matriciel complet est dans le cours de matrices.

Pourquoi M² compte les chemins de longueur 2

Prenons la matrice M du graphe G du ticket (sommets dans l'ordre A, B, C, D, E) :

MABCDE
A01001
B10100
C00110
D00101
E00000

Calculons le coefficient de M² à la ligne C, colonne C : la ligne C de M, (0 0 1 1 0), multipliée par la colonne C de M, (0 1 1 1 0).

(M²)_CC = 0 × 0 + 0 × 1 + 1 × 1 + 1 × 1 + 0 × 0 = 2.

Chaque terme correspond à un sommet intermédiaire k : le terme mₖ = m_Ck × m_kC vaut 1 exactement quand il y a un arc de C vers k et un arc de k vers C, c'est-à-dire quand (C, k, C) est un chemin de longueur 2. Ici, deux termes valent 1 : k = C (le chemin (C, C, C), deux fois la boucle) et k = D (le chemin (C, D, C)). La somme compte ces chemins.

CCdépartarrivéeABCDEm_Ck × m_kCk = A0 × 0 = 0k = B0 × 1 = 0k = C1 × 1 = 1k = D1 × 1 = 1k = E0 × 0 = 0total = 2
(M²)_CC = somme sur k des m_Ck × m_kC : un terme vaut 1 pour chaque intermédiaire k tel que C → k → C, ici k = C et k = D

En faisant ce calcul pour toutes les cases, on obtient M² :

M²ABCDE
A10100
B01111
C00211
D00110
E00000

Lecture de quelques coefficients :

  • (M²)_AA = 1 : un seul chemin de longueur 2 de A vers A, (A, B, A) ;
  • (M²)_BE = 1 : un seul chemin de longueur 2 de B vers E, (B, A, E) ;
  • (M²)_AE = 0 : aucun chemin de longueur 2 de A vers E (A → B → ? ne mène pas en E, et E n'a pas de successeur) ;
  • la ligne E reste nulle : aucun chemin ne part de E.

Le théorème : Mᵖ compte les chemins de longueur p

Le raisonnement se prolonge : un chemin de longueur 3 de i vers j, c'est un chemin de longueur 2 de i vers un sommet k, suivi d'un arc de k vers j. Le coefficient (M³)ᵢⱼ = (M² × M)ᵢⱼ additionne, pour chaque k, le nombre de chemins de longueur 2 de i vers k multiplié par 1 ou 0 selon que l'arc (k, j) existe : il compte donc les chemins de longueur 3.

Pour le graphe G, M³ = M² × M donne :

M³ABCDE
A01111
B10311
C00321
D00211
E00000

Vérifions un coefficient à la main. (M³)_BC est le produit de la ligne B de M², (0 1 1 1 1), par la colonne C de M, (0 1 1 1 0) : 0 + 1 + 1 + 1 + 0 = 3. Il y a donc 3 chemins de longueur 3 de B vers C. Les voici : (B, A, B, C), (B, C, C, C) et (B, C, D, C).

Et (M³)_CC = 3 : trois circuits de longueur 3 passent par C, à savoir (C, C, C, C), (C, C, D, C) et (C, D, C, C).

Le calcul booléen

Souvent, on ne veut pas savoir combien de chemins existent, mais seulement s'il en existe. On calcule alors avec l'algèbre de Boole, où les seules valeurs sont 0 et 1 et où l'on utilise deux opérations :

aba ⊕ b (somme booléenne, « ou »)a ⊗ b (produit booléen, « et »)
0000
0110
1010
1111

La seule différence avec le calcul ordinaire est 1 ⊕ 1 = 1 : « vrai ou vrai » reste vrai. Les manuels écrivent aussi + et ×, ou ∨ et ∧, en précisant qu'on calcule en booléen. C'est le calcul de la logique booléenne, appliqué aux matrices.

Somme booléenne de deux matrices. On fait la somme booléenne case par case : la case vaut 1 si l'une au moins des deux matrices a un 1 à cet endroit.

Produit booléen de deux matrices. On fait le produit ligne × colonne, mais avec ⊗ et ⊕ : la case (i, j) vaut 1 dès qu'au moins un terme aᵢₖ ⊗ bₖⱼ vaut 1.

Les puissances booléennes M^[p]

La puissance booléenne M^[p] est le produit booléen de p matrices égales à M. Son coefficient ligne i, colonne j vaut :

  • 1 s'il existe au moins un chemin de longueur p de i vers j ;
  • 0 s'il n'en existe aucun.

Pour le graphe G, M^[2] et M^[3] s'obtiennent en remplaçant par 1 les coefficients non nuls de M² et M³ :

M^[2]ABCDE
A10100
B01111
C00111
D00110
E00000
M^[3]ABCDE
A01111
B10111
C00111
D00111
E00000

La puissance booléenne perd une information (le nombre de chemins), mais elle se calcule plus vite et reste lisible même quand les nombres de chemins deviennent grands.

Lister les chemins de longueur p

La matrice dit combien de chemins existent, pas lesquels. Pour les écrire, on part du sommet de départ et on construit l'arbre des chemins : à chaque étape, on remplace chaque chemin par ses prolongements possibles, avec le tableau des successeurs.

Exemple : les chemins de longueur 3 qui partent de C (successeurs : A → B, E ; B → A, C ; C → C, D ; D → C, E ; E → aucun).

  • Longueur 1 : (C, C), (C, D).
  • Longueur 2 : (C, C, C), (C, C, D), (C, D, C), (C, D, E).
  • Longueur 3 : (C, C, C, C), (C, C, C, D), (C, C, D, C), (C, C, D, E), (C, D, C, C), (C, D, C, D). Le chemin (C, D, E) ne se prolonge pas : E n'a pas de successeur.

On trouve 6 chemins de longueur 3 partant de C : 3 arrivent en C, 2 en D, 1 en E. C'est exactement la ligne C de M³, (0 0 3 2 1). Faire ce recoupement est la meilleure vérification de ton calcul matriciel.

C'est aussi l'algorithme que demande le programme pour « obtenir les chemins de longueur p » : on calcule les puissances successives M, M², …, Mᵖ (ou on prolonge les chemins un arc à la fois), en réutilisant à chaque étape le résultat de l'étape précédente.

Vérifier avec la calculatrice ou Python

Les calculatrices autorisées à l'examen (en mode examen) ont un éditeur de matrices : on saisit M une fois, puis on calcule M² ou M³ avec la touche de puissance, comme pour un nombre. Le résultat est la puissance entière ; pour la puissance booléenne, remplace toi-même chaque coefficient non nul par 1.

En Python, sans bibliothèque :

python
def produit(A, B):
    """Produit ordinaire de deux matrices carrées."""
    n = len(A)
    return [[sum(A[i][k] * B[k][j] for k in range(n)) for j in range(n)]
            for i in range(n)]

def produit_booleen(A, B):
    """Produit booléen : 1 dès qu'un terme A[i][k] et B[k][j] vaut 1."""
    n = len(A)
    return [[1 if any(A[i][k] == 1 and B[k][j] == 1 for k in range(n)) else 0
             for j in range(n)] for i in range(n)]

def puissance(M, p, produit=produit):
    """M à la puissance p (p >= 1), ordinaire ou booléenne."""
    R = M
    for _ in range(p - 1):
        R = produit(R, M)
    return R

M = [[0, 1, 0, 0, 1],
     [1, 0, 1, 0, 0],
     [0, 0, 1, 1, 0],
     [0, 0, 1, 0, 1],
     [0, 0, 0, 0, 0]]

print(puissance(M, 3)[1])                    # [1, 0, 3, 1, 1] : ligne B de M³
print(puissance(M, 3, produit_booleen)[1])   # [1, 0, 1, 1, 1] : ligne B de M^[3]

Avec la bibliothèque NumPy, numpy.linalg.matrix_power(M, 3) calcule directement M³.

Ce que cela donne en informatique

  • Réseaux sociaux : si M est la matrice « suit », (M²)ᵢⱼ compte les comptes que i suit et qui suivent j. C'est le principe des suggestions « suivi par des personnes que vous suivez ».
  • Relais de messages : dans un réseau de relais, (Mᵖ)ᵢⱼ est le nombre d'acheminements possibles d'un message de i vers j en exactement p sauts.
  • Analyse de liens web : les algorithmes de classement des pages s'appuient sur des produits répétés d'une matrice dérivée de la matrice d'adjacence du web.
  • Bases de données : une jointure d'une table de relations avec elle-même calcule les liens de longueur 2, comme un produit de matrices.

Exercices

Exercice 1 sur 4 Puissances d'une matrice Réussi À revoir

On reprend le graphe H du chapitre 1, de matrice (sommets A, B, C, D) :

ABCD
A0110
B0001
C0101
D1000
  1. Calcule M².
  2. Combien y a-t-il de chemins de longueur 2 de A vers D ? Écris-les.
  3. Calcule M³. Combien de circuits de longueur 3 passent par A ? Écris-les.
Voir la réponseMasquer la réponse de l'exercice 1
  1. Par exemple, (M²)_AD est le produit de la ligne A, (0 1 1 0), par la colonne D lue de haut en bas, (0 1 1 0) : 0 × 0 + 1 × 1 + 1 × 1 + 0 × 0 = 2. En faisant de même pour chaque case :
M²ABCD
A0102
B1000
C1001
D0110
  1. (M²)_AD = 2 : deux chemins, (A, B, D) et (A, C, D).
  2. M³ = M² × M :
M³ABCD
A2001
B0110
C1110
D0102

(M³)_AA = 2 : deux circuits de longueur 3 passent par A, (A, B, D, A) et (A, C, D, A).

Tu avais trouvé ?

Exercice 2 sur 4 Un seul coefficient Réussi À revoir

Sans calculer toute la matrice M⁴ du graphe H, détermine le nombre de chemins de longueur 4 de A vers A, et écris ce ou ces chemins.

Voir la réponseMasquer la réponse de l'exercice 2

(M⁴)_AA = (M³ × M)_AA = ligne A de M³, (2 0 0 1), multipliée par la colonne A de M, (0 0 0 1) : 2 × 0 + 0 × 0 + 0 × 0 + 1 × 1 = 1. Un seul chemin de longueur 4 de A vers A : le seul prédécesseur de A est D, et le seul chemin de longueur 3 de A vers D est (A, C, B, D), d'où (A, C, B, D, A). C'est un circuit hamiltonien de H.

Tu avais trouvé ?

Exercice 3 sur 4 Puissances booléennes Réussi À revoir

  1. Déduis de l'exercice précédent les matrices M^[2] et M^[3] du graphe H.
  2. Existe-t-il un chemin de longueur 2 de B vers C ? De longueur 3 ?
  3. Quels couples (i, j) ne sont reliés ni par un chemin de longueur 1, ni de longueur 2, ni de longueur 3 ?
Voir la réponseMasquer la réponse de l'exercice 3
  1. On remplace les coefficients non nuls par 1 :
M^[2]ABCD
A0101
B1000
C1001
D0110
M^[3]ABCD
A1001
B0110
C1110
D0101
  1. (M^[2])_BC = 0 : pas de chemin de longueur 2 de B vers C. (M^[3])_BC = 1 : il existe un chemin de longueur 3, c'est (B, D, A, C).
  2. On calcule la somme booléenne M ⊕ M^[2] ⊕ M^[3] et on cherche ses 0. Chaque case vaut 1 dans au moins une des trois matrices (par exemple (B, B) dans M^[3], (B, C) dans M^[3], (A, A) dans M^[3]) : la somme ne contient que des 1, donc aucun couple. Tout sommet de H atteint tout sommet, y compris lui-même, en au plus 3 arcs.

Tu avais trouvé ?

Exercice 4 sur 4 Interpréter dans un contexte Réussi À revoir

Quatre serveurs de messagerie P, Q, R, S se relaient les courriels. L'arc (x, y) signifie que x peut transmettre directement à y. La matrice M du réseau (ordre P, Q, R, S) et sa puissance troisième sont :

MPQRS
P0110
Q0011
R0001
S1000
M³PQRS
P2001
Q1110
R0110
S0012
  1. Que signifie le coefficient 2 situé ligne P, colonne P de M³ ? Donne les acheminements correspondants.
  2. Un courriel peut-il aller de R à P en exactement 3 transmissions ? En exactement 2 ?
  3. Vérifie le coefficient ligne S, colonne R de M³ par un calcul.
Voir la réponseMasquer la réponse de l'exercice 4
  1. Il y a 2 façons, pour un courriel parti de P, d'y revenir en exactement 3 transmissions (2 circuits de longueur 3 passent par P) : (P, Q, S, P) et (P, R, S, P). Dans un vrai réseau, ce sont des boucles de routage à éviter.
  2. (M³)_RP = 0 : non, aucun acheminement en exactement 3 transmissions. En 2 transmissions, il faut un intermédiaire successeur de R et prédécesseur de P : R n'a qu'un successeur, S, et (S, P) est un arc. Oui, par (R, S, P).
  3. (M³)_SR est le produit de la ligne S de M² par la colonne R de M. Ligne S de M² : S n'a qu'un successeur, P, donc la ligne S de M² est la ligne P de M, (0 1 1 0). Colonne R de M : (1 1 0 0). Produit : 0 × 1 + 1 × 1 + 1 × 0 + 0 × 0 = 1. Le chemin est (S, P, Q, R).

Tu avais trouvé ?

Chapitre terminé !

Fais les 4 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Fermeture transitive : sommes booléennes et algorithme de Roy-WarshallRevoir le sommaire du cours