Adloun

Compter les chemins de longueur donnée

Exercice d'entraînement · niveau 3 (difficile) · mathématiques appliquées (ECG 1re année), chapitre 11 — Informatique et algorithmique · Graphes

Énoncé

Soit la matrice d'adjacence d'un graphe non orienté à sommets. Le coefficient de compte les chemins de longueur de à . Écrire puissance(A, k) avec np.dot, puis vérifier à la main sur le graphe d'arêtes , , , .

Corrigé

Le code.

import numpy as np

A = np.array([[0, 1, 0, 0],
              [1, 0, 1, 1],
              [0, 1, 0, 1],
              [0, 1, 1, 0]])

def puissance(A, k):
    n = np.shape(A)[0]
    P = np.eye(n)                 # matrice identite : A puissance 0
    for _ in range(k):
        P = np.dot(P, A)
    return P

print(puissance(A, 2))

Le résultat.

Vérification à la main de trois coefficients.

Pourquoi la formule est vraie. Par définition du produit matriciel,

Chaque terme vaut si est voisin à la fois de et de , et sinon : la somme compte donc exactement les sommets intermédiaires réalisant un chemin . Le raisonnement se poursuit par récurrence sur : , et l'on décompose un chemin de longueur en un chemin de longueur suivi d'une arête.

Deux points de vigilance. D'abord, np.dot(P, A) est le produit matriciel — l'opération P * A de numpy multiplierait coefficient par coefficient, ce qui n'a rien à voir et ne provoque aucune erreur. Ensuite, « chemin » s'entend ici au sens large : un même sommet peut être revisité, comme dans .

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.