đ 1. DĂ©finitions & Cadre d'Ă©tude
đ 1. DĂ©finitions & Cadre dâĂ©tude
Section titled âđ 1. DĂ©finitions & Cadre dâĂ©tudeâSoit un graphe orientĂ© ou non orientĂ©, oĂč reprĂ©sente lâensemble des sommets et lâensemble des arĂȘtes (ou arcs). On note le nombre de sommets et le nombre dâarĂȘtes.
- RĂ©seau de transport : Un quadruplet oĂč :
- est un graphe orienté.
- est la source (de degré entrant nul).
- est le puits (de degré sortant nul).
- est une application appelée capacité. Flot: Une application est un flot sur si elle satisfait les conditions suivantes :
- Antisymétrie (pour les graphes implicites) ou positivité : .
- Conservation du flot : ,
- Valeur dâun flot : La valeur dâun flot est la quantitĂ© totale sortant de la source : Coupe: Une coupe du rĂ©seau est une partition de telle que et .
- CapacitĂ© dâune coupe : .
đ 2. ThĂ©orĂšmes fondamentaux & DĂ©monstrations clĂ©s
Section titled âđ 2. ThĂ©orĂšmes fondamentaux & DĂ©monstrations clĂ©sâThĂ©orĂšme de Ford-Fulkerson (Max-Flow Min-Cut)
Section titled âThĂ©orĂšme de Ford-Fulkerson (Max-Flow Min-Cut)âĂnoncĂ© : Dans tout rĂ©seau de transport, la valeur maximale dâun flot est Ă©gale Ă la capacitĂ© minimale parmi toutes les coupes du rĂ©seau.
Démonstration (Esquisse) :
Section titled âDĂ©monstration (Esquisse) :â- Lemme prĂ©liminaire (Faible dualitĂ©) : Soit un flot quelconque et une coupe quelconque. Par sommation sur la conservation du flot et les bornes de capacitĂ©, on montre que . En particulier, la valeur de tout flot est minorĂ©e par la capacitĂ© de toute coupe.
- Saturation et maximalitĂ© : Si lâon dispose dâun flot pour lequel il nâexiste plus de chemin augmentant dans le graphe rĂ©siduel , on construit explicitement une coupe oĂč est lâensemble des sommets accessibles depuis dans .
- On vĂ©rifie que (sinon il y aurait un chemin augmentant) et que le flot net traversant cette coupe sature toutes les arĂȘtes de vers . Ainsi, , ce qui prouve Ă la fois lâoptimalitĂ© du flot et lâĂ©galitĂ© du thĂ©orĂšme.
đĄ 3. MĂ©thodes de calcul & Algorithmes
Section titled âđĄ 3. MĂ©thodes de calcul & AlgorithmesâAlgorithme dâEdmonds-Karp
Section titled âAlgorithme dâEdmonds-KarpâLâalgorithme dâEdmonds-Karp est une implĂ©mentation de la mĂ©thode de Ford-Fulkerson qui utilise un parcours en largeur (BFS) pour trouver le chemin augmentant le plus court (en nombre dâarĂȘtes) dans le graphe rĂ©siduel.
- Complexité en temps :
- Complexité en espace :
Implémentation de référence (Python) :
Section titled âImplĂ©mentation de rĂ©fĂ©rence (Python) :âfrom collections import deque
def bfs(s, t, parent, residual_graph, n): visited = [False] * n queue = deque([s]) visited[s] = True
while queue: u = queue.popleft() for v in range(n): if not visited[v] and residual_graph[u][v] > 0: queue.append(v) visited[v] = True parent[v] = u if v == t: return True return False
def edmonds_karp(capacity, s, t): n = len(capacity) # Matrice du graphe résiduel initialisée avec les capacités residual_graph = [row[:] for row in capacity] parent = [-1] * n max_flow = 0
while bfs(s, t, parent, residual_graph, n): # Trouver la capacite residuelle minimale le long du chemin trouve par BFS path_flow = float("inf") v = t while v != s: u = parent[v] path_flow = min(path_flow, residual_graph[u][v]) v = u
# Mettre a jour les capacites residuelles des aretes et des aretes inverses v = t while v != s: u = parent[v] residual_graph[u][v] -= path_flow residual_graph[v][u] += path_flow v = u
max_flow += path_flow
return max_flowâ ïž 4. PiĂšges classiques aux Concours
Section titled ââ ïž 4. PiĂšges classiques aux Concoursâ- Graphes non orientĂ©s : Ne pas oublier de dĂ©doubler les arĂȘtes non orientĂ©es en deux arcs opposĂ©s dans la matrice de capacitĂ© lors de la modĂ©lisation sous forme de rĂ©seau de transport.
- CapacitĂ©s irrationnelles : Avec des capacitĂ©s rĂ©elles quelconques, lâalgorithme de Ford-Fulkerson naĂŻf (via DFS arbitraire) peut ne pas terminer ou converger vers une valeur autre que le flot maximal. En MPI, on utilise systĂ©matiquement Edmonds-Karp ou Dinitz pour garantir la terminaison polynomiale.
- Confusion entre flot et capacitĂ© rĂ©siduelle : Lors de la mise Ă jour du graphe rĂ©siduel, lâerreur classique est dâoublier dâincrĂ©menter la capacitĂ© de lâarc retour (flux nĂ©gatif ou arĂȘte inverse), ce qui interdit la ârepentirâ (annulation dâun choix glouton antĂ©rieur).
- ComplexitĂ© spatiale : Utiliser des matrices dâadjacence pour des graphes creux () entraĂźne un dĂ©passement mĂ©moire (). PrĂ©fĂ©rer les listes dâadjacence pour les structures rĂ©siduelles si est grand.