Implementações do Implementações do método de aproximação método de aproximação primal-dualprimal-dual
Aluno: Rafael Pereira LunaAluno: Rafael Pereira Luna
Orientadora: Cristina Gomes Orientadora: Cristina Gomes FernandesFernandes
Aplicado ao problema da floresta de Steiner
SumárioSumário
1.1. O problema da floresta de O problema da floresta de SteinerSteiner
2. Algoritmo de Goemans e 2. Algoritmo de Goemans e WilliamsonWilliamson
3. Implementação do algoritmo3. Implementação do algoritmo
O Problema da Floresta de O Problema da Floresta de Steiner Steiner
Dados:Dados: um grafo um grafo G G com custos nas arestas e com custos nas arestas e uma família uma família R R de subconjuntos de de subconjuntos de V(G)V(G)..
Encontrar:Encontrar: uma uma R R -floresta de custo mínimo.-floresta de custo mínimo.
Uma Uma RR -floresta-floresta é uma floresta geradora na é uma floresta geradora naqual cada conjunto de qual cada conjunto de RR se encontra em se encontra emuma única componente.uma única componente.
Um exemplo:Um exemplo:
TerminologiaTerminologia
• Conjunto de terminais: Conjunto de terminais: cada um dos cada um dos conjuntos da coleção conjuntos da coleção RR . .
• Vértices de Steiner: Vértices de Steiner: vértices que vértices que não estão nos conjuntos de não estão nos conjuntos de terminais.terminais.
Voltando ao exemplo...Voltando ao exemplo...
Como resolver o Como resolver o problema?problema?• Não se conhece algoritmo Não se conhece algoritmo
polinomial para resolver o problema polinomial para resolver o problema de maneira exata.de maneira exata.
• Problema NP-difícil: quando |Problema NP-difícil: quando |R R | = 1, | = 1, o problema se reduz ao problema o problema se reduz ao problema de Steiner em grafos, o qual é NP-de Steiner em grafos, o qual é NP-difícil [Garey & Johnson’ 79].difícil [Garey & Johnson’ 79].
Algoritmo de Goemans e Algoritmo de Goemans e WilliamsonWilliamson
• 2-aproximação para o problema da 2-aproximação para o problema da floresta de Steiner.floresta de Steiner.
• Algoritmo baseado no método de Algoritmo baseado no método de aproximação primal-dual.aproximação primal-dual.
Conjunto ativo:Conjunto ativo: subconjunto de subconjunto de V(G) V(G) que separa vértices de um mesmo que separa vértices de um mesmo conjunto de terminais.conjunto de terminais.
maximize
sob as restriçoes para todo
para todo ativo.
y
y c e E G
y S
SS e S
e
S
( )~ ( ),
: ( )
S
0
Dual:Dual:
minimize
sob as restriçoes para todo ativo
para todo
cx
x S S
x e E Ge
~ ( ( )) ,
( ).
1
0
Primal:Primal:
Algoritmo Algoritmo MinFs-GW(MinFs-GW(G G ,, c c ,, R R )) 1
2 0
3
4
5
6
7
8
9
10
.
.
.
.
.
.
( )
. ( )
.
.
.
: ( )
: ( )
,
para cada ativo faça
seja o conjunto das componentes ativas de
enquanto faça
seja o vetor caracteristico de
seja o maior valor tal que
para cada aresta externa
seja uma aresta externa tal que
seja uma
F V
S y
F
y
y y c e
f y y c
y y y
F F f
F
G
S
F
F
F
S eS e S
S fS f S
S
S
S
R - floresta minimal de
devolva
F
F11.
Algumas alteraçõesAlgumas alterações
Definir:Definir:
d v ySS v S
( ):
folga( )
( ) ( ) ( )
( ) ( ) ( )uv
c uv d u d vS S
c uv d u d v S S
S S
u v
u v
u v
2, e ativas
, ou ativa
, e inativas
Algoritmo Algoritmo MinFs-GW2(MinFs-GW2(G G ,, c c ,, R R )) 1
2 0
3
4
5
6
7
8
9
.
. ( ) ( )
.
.
. ( ) { ( ) }
. ( ) ( ) ( )
.
.
.
,
para cada faça
seja o conjunto das componentes ativas de
enquanto faça
seja tal que : externa
para cada faça
seja uma floresta minimal de
devolva
F V
v V G d v
F
f f min e e
v S d v d v f
F F f
F F
F
G
F
F
F
S
S
S
R -
folga folga
folga
Implementação do Implementação do algoritmoalgoritmo[[OO((n² log nn² log n))]]
Estruturas de dados:Estruturas de dados:
• Conjuntos de terminais: Conjuntos de terminais: a cada a cada conjunto de terminais conjunto de terminais TT em em R R associamosassociamos
uma lista dos vértices de uma lista dos vértices de T T ;;
o número de vértices em o número de vértices em T T ;;
• Componentes: Componentes: a cada componente a cada componente S S da florestada floresta associamosassociamos
1.. HH0 0 (S)(S):: mantém as arestas que mantém as arestas que ligam ligam SS a componentes inativas da a componentes inativas da floresta;floresta;
2.. HH1 1 (S)(S):: mantém as arestas que mantém as arestas que ligam ligam SS a componentes ativas da a componentes ativas da floresta;floresta;
(cada heap contém no máximo uma (cada heap contém no máximo uma aresta para cada outra componente) aresta para cada outra componente)
uma lista dos vértices que fazem parte uma lista dos vértices que fazem parte dede S S ;;
dois heaps de arestas:dois heaps de arestas:
• Componentes (continuação): Componentes (continuação):
um vetor que informa para cada um vetor que informa para cada conjunto de terminais conjunto de terminais RR o número de o número de vértices de vértices de RR que se encontram na que se encontram na componente componente S S ;; contador do número de conjuntos de contador do número de conjuntos de terminais não conectados que terminais não conectados que intersectam intersectam S S ;;• Vértices: Vértices: a cada vértice a cada vértice vv associamos associamos
o conjunto de terminais ao qual o conjunto de terminais ao qual vv pertence;pertence; a componente da qual a componente da qual v v faz parte;faz parte; o valor corrente de o valor corrente de d(v) d(v) ..
Implementação do Implementação do algoritmoalgoritmo
Inicialização das estruturas (Inicialização das estruturas (linhas 1 a 3linhas 1 a 3))
• Conjuntos de terminaisConjuntos de terminais::
• ComponentesComponentes::
• VérticesVértices::
OO( ( nn22 ) ) ..
OO( ( n n ) ) ..
OO( ( n n ) ) ..
Implementação do Implementação do algoritmoalgoritmoFase iterativa (Fase iterativa (linhas 4 a 7linhas 4 a 7))
1 escolha da aresta escolha da aresta uvuv a ser incluída na a ser incluída na floresta floresta :: são examinadas apenas são examinadas apenas duas arestas por componente ativaduas arestas por componente ativa[[OO( ( n n ))]] ..
[[OO( ( n n ))]] ..
2 atualização do valor de atualização do valor de d(w)d(w) :: é é efetuada percorrendo-se a lista de efetuada percorrendo-se a lista de componentes da florestacomponentes da floresta
3 união das componentes união das componentes SSu u e e SSvv : : é é realizada em duas etapasrealizada em duas etapas (3a e 3b)(3a e 3b)
Implementação do Implementação do algoritmoalgoritmo
Fase iterativa (continuação)Fase iterativa (continuação)
3 a. União das listas de vértices e a. União das listas de vértices e definição do estado de definição do estado de SSuu U U SSvv [[OO( ( n log n n log n ) ) no totalno total]] ..
[[OO( ( n log n n log n ))]] ..3 b. União dos heaps de arestasb. União dos heaps de arestas
Implementação do Implementação do algoritmoalgoritmoSegunda fase (Segunda fase (linha 8linha 8))
1 determinação do ancestral comum mais próximo determinação do ancestral comum mais próximo (acmp) de cada conjunto de terminais.(acmp) de cada conjunto de terminais.
2 Seleção das arestas: para cada árvore Seleção das arestas: para cada árvore TT
• seja seja l l uma lista em pré-ordem dos acmp’s uma lista em pré-ordem dos acmp’s
• percorre-se percorre-se ll, selecionando, para cada acmp , selecionando, para cada acmp vv, as , as arestas no caminho entre cada vértice no(s) arestas no caminho entre cada vértice no(s) conjunto(s) de terminais correspondente(s) e conjunto(s) de terminais correspondente(s) e vv..
Outras implementaçõesOutras implementações
• Cole, Hariharan, Lewenstein e Porat : Cole, Hariharan, Lewenstein e Porat : OO( (( (n+m n+m )) log log22 n n ) ) ..
• Klein: Klein: OO((n mn m1/21/2 log n log n) ) ..
• Gabow, Goemans e Williamson: Gabow, Goemans e Williamson: OO((n n ((n + mn + m1/21/2 log log n log log n ) ) ) ) . .