Gomory–Hu-träd
I kombinatorisk optimering är Gomory -Hu-trädet för en oriktad graf med kapacitet ett viktat träd som representerar minsta s - t - snitt för alla s - t -par i grafen. Gomory–Hu-trädet kan konstrueras i | V | − 1 maximalt flödesberäkningar.
Definition
Låt G = (( V G , E G ), c ) vara en oriktad graf där c ( u , v ) är kapaciteten för kanten ( u , v ) respektive.
- Ange den minsta kapaciteten för en s - t skär med λ st för varje s , t ∈ V G.
- Låt T = ( V G , E T ) vara ett träd, beteckna uppsättningen av kanter i en st - t bana med P st för varje s , t ∈ V G .
Då sägs T vara ett Gomory–Hu-träd av G , om för varje s , t ∈ V G
- λ st = min e∈P st c ( S e , T e ),
var
- S e , T e ⊆ V G är de två sammankopplade komponenterna i T ∖{ e } och bildar således ( S e , T e ) ett s - t snitt i G .
- c ( S e , T e ) är kapaciteten för snittet i G.
Algoritm
Gomory–Hu Algoritm
- Ingång : En viktad oriktad graf G = (( V G , E G ), c )
- Utdata : A Gomory–Hu-träd T = ( V T , E T ).
- 1. Ställ in V T = { V G } och E T = ∅.
- 2. Välj några X ∈ V T med | X | ≥ 2 om ett sådant X finns. Gå annars till steg 6.
- 3. För varje ansluten komponent C = ( V C , E C ) i T ∖ X . Låt S C = ∪ v T ∈V C v T . Låt S = { SC | C är en ansluten komponent i T ∖ X }.
- Dra ihop komponenterna så att de bildar G ' = (( V G' , E G' ), c '), där
- VG ' = X ∪ S .
- E G' = E G | X×X ∪ {( u , S C ) ∈ X × S | ( u , v )∈ E G för vissa v ∈ S C } ∪ {( S C1 , S C2 ) ∈ S× S | ( u , v )∈ E G för vissa u∈ S C1 och v ∈ S C2 }.
-
c ' : V G' × V G' → R + är kapacitetsfunktionen definierad som,
- om ( u , S C )∈ E G | X×S , c '( u , S C ) = Σ v∈S C :(u,v)∈E Gc ( u , v ),
- om ( S C1 , S C2 )∈ E G | S×S , c '( S C1 , S C2 ) = Σ (u,v)∈E G :u∈S C1 ∧v∈S C2c ( u , v ) ,
- c '( u , v ) = c ( u , v ) annars.
- 4. Välj två hörn s , t ∈ X och hitta ett minimum s - t cut ( A ', B ') i G '.
- Set A = (∪ S C ∈ A '∩ S S C ) ∪ ( A ' ∩ X ) och B = (∪ S C ∈ B '∩ S S C ) ∪ ( B ' ∩ X ).
- 5. Ställ in V T = ( V T ∖ X ) ∪ { A ∩ X , B ∩ X }.
- För varje e = ( X , Y ) ∈ E T do
- Om Y ⊂ A , sätt e ' = ( A ∩ X , Y ), annars sätt e ' = ( B ∩ X , Y ).
- Ställ E T = ( E T ∖{ e }) ∪ { e '} och w ( e ') = w ( e ).
- Ställ in E T = E T ∪ {( A ∩ X , B ∩ X )}.
- Ställ in w (( A ∩ X , B ∩ X )) = c '( A ', B ').
- Gå till steg 2.
- 6. Ersätt varje { v } ∈ V T med v och varje ({ u },{ v }) ∈ E T med ( u , v ). Utgång T .
Analys
Genom att använda den submodulära egenskapen för kapacitetsfunktionen c har man
- c ( X ) + c ( Y ) ≥ c ( X ∩ Y ) + c ( X ∪ Y ).
Då kan det visas att det minsta s - t- snittet i G ' också är ett minsta s - t -snittet i G för alla s , t ∈ X.
För att visa att för alla ( P , Q ) ∈ E T , w ( P , Q ) = λ pq för vissa p ∈ P , q ∈ Q genom hela algoritmen, använder man sig av följande Lemma,
- För varje i , j , k i VG , λ ik ≥ min(λ ij , λ jk ) .
Lemma kan användas igen upprepade gånger för att visa att utgången T uppfyller egenskaperna hos ett Gomory-Hu-träd.
Exempel
Följande är en simulering av Gomory–Hu:s algoritm, där
- gröna cirklar är hörn på T .
- röda och blå cirklar är hörn i G '.
- grå hörn är de valda s och t .
- röd och blå färg representerar s - t cut.
- streckade kanter är s - t cut-set.
- A är uppsättningen av hörn inringade i rött och B är uppsättningen av hörn inringade i blått .
Implementeringar: Sekventiella och parallella
Gusfields algoritm kan användas för att hitta ett Gomory-Hu-träd utan någon vertexkontraktion i samma löpande tidskomplexitet, vilket förenklar implementeringen av att konstruera ett Gomory-Hu-träd.
Andrew V. Goldberg och K. Tsioutsiouliklis implementerade Gomory-Hu-algoritmen och Gusfield-algoritmen och utförde en experimentell utvärdering och jämförelse.
Cohen et al. rapportera resultat om två parallella implementeringar av Gusfields algoritm med OpenMP respektive MPI.
Relaterade begrepp
I plana grafer är Gomory-Hu-trädet dubbla till minimiviktscykelbasen, i den meningen att snitten av Gomory-Hu-trädet är dubbla till en samling cykler i den dubbla grafen som bildar en minimiviktcykelbas.
Se även
- BH Korte, Jens Vygen (2008). "8.6 Gomory-Hu-träd". Kombinatorisk optimering: teori och algoritmer (Algorithms and Combinatorics, 21) . Springer Berlin Heidelberg. s. 180 –186. ISBN 978-3-540-71844-4 .