Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouLarissa Azeredo Coimbra Alterado mais de 8 anos atrás
1
Implementações do método de aproximação primal-dual
Aplicado ao problema da floresta de Steiner Aluno: Rafael Pereira Luna Orientadora: Cristina Gomes Fernandes
2
Sumário 1. O problema da floresta de Steiner
2. Algoritmo de Goemans e Williamson 3. Implementação do algoritmo
3
O Problema da Floresta de Steiner
Dados: um grafo G com custos nas arestas e uma família R de subconjuntos de V(G). Encontrar: uma R -floresta de custo mínimo. Uma R -floresta é uma floresta geradora na qual cada conjunto de R se encontra em uma única componente.
4
Um exemplo:
5
Terminologia Conjunto de terminais: cada um dos conjuntos da coleção R . Vértices de Steiner: vértices que não estão nos conjuntos de terminais.
6
Voltando ao exemplo...
7
Como resolver o problema?
Não se conhece algoritmo polinomial para resolver o problema de maneira exata. Problema NP-difícil: quando |R | = 1, o problema se reduz ao problema de Steiner em grafos, o qual é NP-difícil [Garey & Johnson’ 79].
8
Algoritmo de Goemans e Williamson
2-aproximação para o problema da floresta de Steiner. Algoritmo baseado no método de aproximação primal-dual.
9
Conjunto ativo: subconjunto de V(G) que separa vértices de um mesmo conjunto de terminais.
Primal: Dual:
10
Algoritmo MinFs-GW(G , c , R )
11
Algumas alterações Definir:
12
Algoritmo MinFs-GW2(G , c , R )
13
Implementação do algoritmo [O(n² log n)]
Estruturas de dados: Conjuntos de terminais: a cada conjunto de terminais T em R associamos uma lista dos vértices de T ; o número de vértices em T ;
14
Componentes: a cada componente S da floresta associamos
dois heaps de arestas: . H0 (S): mantém as arestas que ligam S a componentes inativas da floresta; . H1 (S): mantém as arestas que ligam S a componentes ativas da floresta; (cada heap contém no máximo uma aresta para cada outra componente) uma lista dos vértices que fazem parte de S ;
15
Componentes (continuação):
um vetor que informa para cada conjunto de terminais R o número de vértices de R que se encontram na componente S ; contador do número de conjuntos de terminais não conectados que intersectam S ; Vértices: a cada vértice v associamos o conjunto de terminais ao qual v pertence; a componente da qual v faz parte; o valor corrente de d(v) .
16
Implementação do algoritmo
Inicialização das estruturas (linhas 1 a 3) Conjuntos de terminais: Componentes: Vértices: O( n ) . O( n2 ) . O( n ) .
17
Implementação do algoritmo
Fase iterativa (linhas 4 a 7) escolha da aresta uv a ser incluída na floresta : são examinadas apenas duas arestas por componente ativa [O( n )] . atualização do valor de d(w) : é efetuada percorrendo-se a lista de componentes da floresta união das componentes Su e Sv : é realizada em duas etapas (3a e 3b) [O( n )] .
18
Implementação do algoritmo
Fase iterativa (continuação) a. União das listas de vértices e definição do estado de Su U Sv [O( n log n ) no total] . b. União dos heaps de arestas [O( n log n )] .
19
Implementação do algoritmo
Segunda fase (linha 8) determinação do ancestral comum mais próximo (acmp) de cada conjunto de terminais. Seleção das arestas: para cada árvore T seja l uma lista em pré-ordem dos acmp’s percorre-se l, selecionando, para cada acmp v, as arestas no caminho entre cada vértice no(s) conjunto(s) de terminais correspondente(s) e v.
20
Outras implementações
Cole, Hariharan, Lewenstein e Porat : O( (n+m ) log2 n ) . Klein: O(n m1/2 log n) . Gabow, Goemans e Williamson: O(n (n + m1/2 log log n ) ) .
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.