Maximális folyam-minimális vágás tétele
- Sablon:Label A Maximális folyam – Minimális vágás tétele egy alapvető eredmény a hálózatáramlás elméletében. A tétel kimondja:
Egy hálózatban a forrásból a nyelőbe irányuló maximális folyam értéke megegyezik az összes minimális vágás kapacitásával.
Fogalmak
Hálózat
- Egy irányított gráf , ahol:
* : csúcsok halmaza. * : élek halmaza.
- Minden élhez tartozik egy nemnegatív kapacitás , amely az -ból -be szállítható maximális mennyiséget jelöli.
Folyam
- Egy hozzárendelés minden élhez, amely teljesíti:
* **Kapacitáskorlát:** . * **Folytonosság:** Minden csúcson kívül a forrás () és nyelő () esetén a bejövő és kimenő folyam összege egyenlő:
Maximális folyam
- A folyam értéke:
amely a forrásból kilépő összes folyam mennyisége. A maximális folyam a -et maximalizáló .
Vágás
- Egy vágás a gráf csúcsainak és (, ) particionálása, ahol és . - A vágás kapacitása:
amely az -ből -be vezető élek kapacitásainak összege.
Minimális vágás
- Az összes lehetséges vágás közül a legkisebb -vel rendelkező vágás.
A Tétel Bizonyítása
1. Maximális folyam felső korlátja
- Minden folyam értéke () korlátozott a vágás kapacitása által:
2. Ford-Fulkerson algoritmus és reziduális hálózat
- A maximális folyamot **Ford-Fulkerson algoritmus** vagy más iteratív módszer számítja ki. - A reziduális hálózat az aktuális folyam alapján meghatározza azokat az éleket, amelyeken további folyamot lehet növelni. - Amikor a reziduális hálózatban nincs több növelő út, a folyam eléri a maximumát.
3. Vágás és folyam összefüggése
- A végső reziduális hálózatban nincs növelő út. - Az -hez tartozó csúcsok azok, amelyeket a forrásból el lehet érni, míg -hez azok tartoznak, amelyeket nem. - A minimális, mert a folyam minden növelő lehetőségét kihasználtuk.
4. Egyenlőség
- Az egyenlőség teljesül, mert a maximális folyam teljesen kitölti a minimális vágás kapacitását.
Példa
Hálózat
Legyen a hálózat:
Kapacitások:
Maximális folyam
A Ford-Fulkerson algoritmussal:
A maximális folyam értéke:
Minimális vágás
A vágás kapacitása:
Eredmény:
Python Implementáció
import networkx as nx
# Gráf definiálása
G = nx.DiGraph()
G.add_edge('s', 'A', capacity=10)
G.add_edge('s', 'B', capacity=5)
G.add_edge('A', 't', capacity=10)
G.add_edge('B', 't', capacity=5)
G.add_edge('A', 'B', capacity=15)
# Maximális folyam számítása
flow_value, flow_dict = nx.maximum_flow(G, 's', 't')
print("Maximális folyam értéke:", flow_value)
print("Folyam eloszlás:", flow_dict)
# Minimális vágás számítása
cut_value, partition = nx.minimum_cut(G, 's', 't')
print("Minimális vágás kapacitása:", cut_value)
print("Vágás particionálása:", partition)
Kimenet
Maximális folyam értéke: 15
Folyam eloszlás: {'s': {'A': 10, 'B': 5}, 'A': {'t': 10, 'B': 0}, 'B': {'t': 5}, 't': {}}
Minimális vágás kapacitása: 15
Vágás particionálása: ({'s', 'A'}, {'B', 't'})
Alkalmazások
- Hálózattervezés: Kapacitás-optimalizálás adatátviteli hálózatokban.
- Közlekedési rendszerek: Úthálózatokon áthaladó járművek optimális útvonalának meghatározása.
- Ellátási láncok: Maximális szállítási kapacitás meghatározása.
- Bioinformatika: Fehérjehálózatok és genetikai kapcsolatok optimalizálása.
Összegzés
A **Maximális folyam – Minimális vágás tétele** az egyik legfontosabb eredmény a hálózatáramlás elméletében. A tétel gyakorlati jelentőséggel bír számos területen, beleértve a logisztikát, a közlekedési hálózatokat és a kommunikációs rendszereket. Az algoritmusok, például a Ford-Fulkerson, hatékonyan alkalmazhatók a maximális folyam és minimális vágás kiszámítására. A Python egyszerű eszközöket biztosít ezek megvalósítására és ellenőrzésére.