Adloun

informatique (tronc commun des prépas scientifiques) · Chapitre 14 · Exercice de TD

L'assertion qui sauve — poids négatifs

Plus courts chemins : Dijkstra et au-delà · niveau 2

Énoncé

Proposer un exemple de graphe comportant un poids négatif pour lequel Dijkstra renvoie un résultat erroné, et montrer l'utilité d'une assertion.

Corrigé

Soit le graphe .

  • Dijkstra commence par figer à la distance 2 (puisque ).
  • La distance de est gelée. Ensuite, est figé à la distance 3, et l'arc est relâché. Cependant, étant déjà figé, sa distance n'est plus modifiée.
  • L'algorithme renvoie , alors que la distance réelle minimale est de (via ). Pour éviter cette erreur silencieuse, on place une assertion en entrée de fonction :
def dijkstra_secu(R: dict, source):
    assert all(R[u][v] >= 0 for u in R for v in R[u]), "Poids négatifs interdits !"
    return dijkstra(R, source)

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre