Edmonds-Karp algorithm

Üdvözlöm, Ön a Edmonds-Karp algorithm szó jelentését keresi. A DICTIOUS-ban nem csak a Edmonds-Karp algorithm szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a Edmonds-Karp algorithm szót egyes és többes számban mondani. Minden, amit a Edmonds-Karp algorithm szóról tudni kell, itt található. A Edmonds-Karp algorithm szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. AEdmonds-Karp algorithm és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

Főnév

Edmonds-Karp algorithm (tsz. Edmonds-Karp algorithms)

  1. (informatika) Edmonds-Karp-algoritmus

Az Edmonds–Karp algoritmus a Ford–Fulkerson-módszer egy konkrét megvalósítása maximális áramlás (max-flow) problémára irányított, kapacitással ellátott hálózatokban. A kulcslépés: minden augmentáló utat nem mélységi, hanem szélességi kereséssel (BFS) találunk, így garantáltan az élek szerinti legrövidebb augmentáló utakat használjuk.



2. Algoritmus vázlata

  1. Inicializálás

    • Minden él kezdetben nullás áramlást kap: .

    • A maradékgráf kapacitásai:

  2. Augmentáló út keresése

    • Minden iterációban BFS-sel keressük meg az útvonalat a maradékgráfban, csak olyan éleken haladva, ahol .
    • A BFS biztosítja, hogy az út él­száma minimális legyen.
  3. Bővítés (augmentation)

    • Ha találtunk egy útvonalat , annak bottleneck kapacitása: .

    • Minden $ (u,v)P$ élre növeljük az áramlást:

  4. Ismétlés

    • Amíg van út a maradékgráfban, ismételjük a BFS-t és a bővítést.
    • Ha BFS nem talál utat, akkor az aktuális maximális.



3. Pseudokód

EdmondsKarp(G, c, s, t):
    // G = (V,E), c(u,v) kapacitás, s forrás, t nyelő
    f(u,v) = 0 minden (u,v) ∈ E
    max_flow = 0

    while van út P: s → t a maradékgráfban (BFS-en keresztül):
        // Bottleneck
        Δ = min{ c(u,v) - f(u,v) | (u,v) ∈ P }
        // Áramlás frissítése
        for minden (u,v) ∈ P:
            f(u,v) += Δ
            f(v,u) -= Δ
        max_flow += Δ

    return max_flow, f

4. Időkomplexitás

  • Minden iterációban egy BFS fut, ami .

  • Legrosszabb esetben az augmentációk száma (mivel minden bővítés legalább egy él maradékkapacitását csökkenti, és összesen legfeljebb különböző bottleneck-értékű változás lehet, mindegyiken át legfeljebb bővítés).

  • Így az Edmonds–Karp időkomplexitása:



5. Példa lépésről lépésre Legyen a hálózat:

 s → u → v → t
 |    ↘     ↑
 ↓     w → x

Kapacitások (rövid jelöléssel):

  1. 1. iteráció (BFS): út , bottleneck = . → növeljük ezen az úton .
  2. 2. iteráció: maradékgráfban újabb BFS: , bottleneck = . → augmentálunk 3-mal.
  3. 3. iteráció: például út vagy más, amíg nincs további Értelmezés sikertelen (formai hiba): {\textstyle s→t} út (ha az összes út élei lekorlátozódnak).
  4. Végül .



6. Python-implementáció

from collections import deque, defaultdict

def edmonds_karp(capacity, s, t):
    flow = defaultdict(lambda: defaultdict(int))
    max_flow = 0

    def bfs():
        parent = {s: None}
        q = deque()
        while q:
            u = q.popleft()
            for v in capacity:
                if v not in parent and capacity - flow > 0:
                    parent = u
                    if v == t:
                        return parent
                    q.append(v)
        return None

    while True:
        parent = bfs()
        if not parent:
            break
        # Bottleneck-érték számítása
        v = t
        delta = float('inf')
        while v != s:
            u = parent
            delta = min(delta, capacity - flow)
            v = u
        # Áramlás augmentálása
        v = t
        while v != s:
            u = parent
            flow += delta
            flow -= delta
            v = u
        max_flow += delta

    return max_flow, flow

# Példa hálózat definíciója
capacity = defaultdict(dict)
capacity = {'u':10, 'w':5}
capacity = {'v':4, 'w':2}
capacity = {'x':3}
capacity = {'v':6}
capacity = {'t':8}

max_flow, flow = edmonds_karp(capacity, 's', 't')
print("Maximális áramlás:", max_flow)

7. Alkalmazások

  • Hálózati adatátvitel: csomagok maximális száma sávszélességkorlátok mellett.
  • Párosítás kétoldalú gráfokon (maximum bipartit matching).
  • Képfeldolgozás: min-cut/max-flow alapú képszegmentálás.
  • Logisztikai tervezés: áruk hegymenetének optimalizálása.



8. Összefoglalás Az Edmonds–Karp algoritmus egyszerűen implementálható változata a Ford–Fulkerson-nak, BFS-sel biztosítva az augmentáló utak él­szám szerinti minimalitását. Noha elméleti időkomplexitása , gyakorlati problémákban gyakran megfelelő, és alapul szolgál fejlettebb max-flow eljárásoknak.