200 likes | 274 Views
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. Sumário. 1. O problema da floresta de Steiner 2. Algoritmo de Goemans e Williamson 3. Implementação do algoritmo.
E N D
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
Sumário 1.O problema da floresta de Steiner 2. Algoritmo de Goemans e Williamson 3. Implementação do algoritmo
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.
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.
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].
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.
Primal: Dual: Conjunto ativo: subconjunto de V(G) que separa vértices de um mesmo conjunto de terminais.
Algumas alterações Definir:
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 ;
dois heaps de arestas: • .H0 (S):mantém as arestas que ligam Sa 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) • Componentes: a cada componente S da florestaassociamos • uma lista dos vértices que fazem parte deS ;
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) .
Implementação do algoritmo Inicialização das estruturas (linhas 1 a 3) • Conjuntos de terminais: • Componentes: • Vértices: O( n ) . O( n2) . O( n ) .
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 )].
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 )].
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.
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 ) ) .