Le degré des sommets
Exercice d'entraînement · niveau 2 · mathématiques appliquées (ECG 1re année), chapitre 11 — Informatique et algorithmique · Graphes
Énoncé
Un graphe non orienté est donné par un dictionnaire de listes d'adjacence. Écrire degres(G) renvoyant le dictionnaire des degrés, puis vérifier sur l'exemple que la somme des degrés vaut deux fois le nombre d'arêtes. Expliquer pourquoi.
Corrigé
Le code.
G = {0: [1], 1: [0, 2, 3], 2: [1, 3], 3: [1, 2]}
def degres(G):
return {s: len(G[s]) for s in G}
def nb_aretes(G):
total = 0
for s in G:
total = total + len(G[s])
return total // 2 # chaque arete a ete comptee deux fois
d = degres(G)
print(d) # {0: 1, 1: 3, 2: 2, 3: 2}
print(sum(d[s] for s in d), 2 * nb_aretes(G)) # 8 8
Vérification à la main. Les arêtes sont , , et : il y en a . Les degrés sont , de somme . ✔
Pourquoi la somme des degrés vaut le double du nombre d'arêtes. Le degré d'un sommet est le nombre d'arêtes qui l'atteignent. En sommant les degrés sur tous les sommets, chaque arête est comptée deux fois : une fois dans le degré de , une fois dans celui de . D'où
C'est ce qui justifie le // 2 de nb_aretes.
Une conséquence immédiate. La somme des degrés est toujours paire. Un graphe dont les degrés seraient ne peut donc pas exister — leur somme vaut . C'est un contrôle de cohérence gratuit sur toute donnée de graphe.
Le contrôle de symétrie. Dans un graphe non orienté, la structure doit vérifier : figure dans G[u] si et seulement si figure dans G[v]. Une saisie asymétrique fausserait les degrés sans provoquer d'erreur. On peut le vérifier ainsi :
def symetrique(G):
for u in G:
for v in G[u]:
if u not in G[v]:
return False
return TrueLes 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.