710 likes | 877 Views
Otimização em grafos. Problemas de otimização em árvores. Otimização em árvores. ... voltando à primeira aula. Definição: uma árvore é um grafo conexo sem ciclos. uma árvore tem exatamente n-1 arcos. uma árvore tem ao menos dois nós folha (nós com grau 1)
E N D
Otimização em grafos Problemas de otimização em árvores
Otimização em árvores ... voltando à primeira aula...
Definição: uma árvore é um grafo conexo sem ciclos. uma árvore tem exatamente n-1 arcos. uma árvore tem ao menos dois nós folha (nós com grau 1) existe apenas um caminho entre dois nós quaisquer de uma árvore.
Minimum spanning tree (MST) Problema da árvore geradora mínima: Seja o grafo G=(V,A) Seja cij o custo associado a um arco (i,j) 2 A. Obter a árvore T que conecta todos os nós de V, com custo mínimo (custo = )
Aplicações Aplicações diretas O problema prático com o qual se quer trabalhar naturalmente pode ser definido como o problema de se encontrar uma MST. Aplicações indiretas Através de manipulações, pode-se obter a solução do problema original através da obtenção de uma MST. Como subproblema de outros problemas
Aplicações diretas Projeto de sistemas físicos onde entidades precisam ser conectadas e não é necessário redundância. Exemplos: projetos viários (em regiões periféricas) televisão a cabo linhas de transmissão linhas telefônicas redes de computadores etc.
Exemplos (Ahuja) Conectar terminais em equipamentos de maneira a minimizar o total de cobre gasto; Construir redes de tubulações conectando bairros, de modo a minimizar o comprimento da rede; Conectar vilas em regiões afastadas; Construir circuitos digitais de alta frequência; Conectar computadores em redes LAN.
Aplicações indiretas Manipulações no problema original, de modo a torná-lo um MST. retirado de Ahuja et al. (1993).
Cluster analysis: Particionar dados em grupos representativos. retirado de Ahuja et al. (1993).
Sequência Condições de otimalidade; Algoritmos: Kruskal Prim Sollin Modelos matemáticos Variações do problema.
Condições de otimalidade Condições de otimalidade de corte (cut optimality conditions) Condições de otimalidade de caminho (path optimality conditions)
Preliminares: arco-árvore (tree arcs): um arco que pertence à árvore que está sendo estudada; arco-não-árvore (nontree arcs): um arco que não pertence à árvore que está sendo estudada. retirado de Ahuja et al. (1993).
Observação simples (I): para todo arco-não-árvore(k,l), a árvore T contém um único caminho entre os nós k e l. O arco (k,l) em conjunto com este caminho define um ciclo.
Observação simples (II): se eliminarmos um arco-árvore(i,j) de uma árvore, o grafo resultante particiona o conjunto de nós V em dois subconjuntos. Chamamos o conjunto de arcos do grafo G com um terminal em cada subconjunto de corte (cut).
Condição de optimalidade de corte: Teorema: Uma árvore T* é uma MST se e somente se ela satisfaz as condições de otimalidade de corte: para cada arco (i,j) 2 T*, cij· ckl para todo arco (k,l) pertencente ao corte obtido pela exclusão do arco (i,j) de T*.
Teorema: Uma árvore T* é uma MST se e somente se ela satisfaz as condições de otimalidade de corte: para cada arco (i,j) 2 T*, cij· ckl para todo arco (k,l) pertencente ao corte obtido pela exclusão do arco (i,j) de T*. • Prova: !(toda árvore T* deve satisfazer a condição). Se existe um arco-não-árvore (k,l) pertencente ao corte gerado por (i,j) com ckl < cij, então trocar (i,j) por (k,l) em T* gera uma árvore T' de custo menor que T*.
Teorema: Uma árvore T* é uma MST se e somente se ela satisfaz as condições de otimalidade de corte: para cada arco (i,j) 2 T*, cij· ckl para todo arco (k,l) pertencente ao corte obtido pela exclusão do arco (i,j) de T*. • Prova: Ã(se T* satisfaz as condições, então T* é MST). Seja To uma uma MST, com To T*. T* contém um arco (i,j) que não está em To.
Teorema: Uma árvore T* é uma MST se e somente se ela satisfaz as condições de otimalidade de corte: para cada arco (i,j) 2 T*, cij· ckl para todo arco (k,l) pertencente ao corte obtido pela exclusão do arco (i,j) de T*. • Prova: Eliminando (i,j) de T* cria um corte . Adicionando (i,j) em To, cria um ciclo de deve conter um arco (k,l) que não estava em T*, com k2S e l2 . Como T* satisfaz as condições de otimalidade de corte, cij· ckl. Por outro lado, To é ótima, logo cij¸ckl. Logo cij=ckl. Trocando (i,j) por (k,l) em T*, temos uma árvore com mesmo custo e mais próxima de To. Repetindo o argumento, veremos que T* e To tem o mesmo custo e, consequentemente, T* é ótima.
Condições de otimalidade de corte, conclusão: Cada arco em uma MST é de custo mínimo no corte definido ao se retirá-lo da árvore. Por outro lado, as condições de otimalidade de corte implicam que sempre podemos adicionar à MST o arco de menor custo de um corte qualquer de um grafo.
Condição de otimalidade de caminho: Teorema: Uma árvore T* é uma MST se e somente se ela satisfaz as condições de otimalidade de caminho: para cada arco-não-árvore (k,l)2 G, cij· cklpara todoarco (i,j) contido no caminho em T* que conecta os nós k e l.
Teorema: Uma árvore T* é uma MST se e somente se ela satisfaz as condições de otimalidade de caminho: para cada arco-não-árvore (k,l)2 G, cij· cklpara todoarco (i,j) contido no caminho em T* que conecta os nós k e l. • Prova: !(toda árvore T* deve satisfazer a condição). Suponha que T* é MST e existe um arco (i,j) no caminho em T* conectando os nós k e l. Se cij¸ ckl, trocar o arco (i,j) pelo arco (k,l) geraria uma árvore de custo menor que T*, contradizendo a hipótese.
Teorema: Uma árvore T* é uma MST se e somente se ela satisfaz as condições de otimalidade de caminho: para cada arco-não-árvore (k,l)2 G, cij· cklpara todoarco (i,j) contido no caminho em T* que conecta os nós k e l. • Prova: Ã (se a condição de otim. de caminho é satisfeita em T*, então T* é ótima). Usamos a suficiência da condição de otim. de corte. Vamos mostrar que se uma árvore T* satisfaz as condições de otimalidade de caminho, então ela também satisfaz as condições de corte (e, consequentemente, podemos usar o teorema anterior para provar a suficiência das cond. de otim. de caminho).
Teorema: Uma árvore T* é uma MST se e somente se ela satisfaz as condições de otimalidade de caminho: para cada arco-não-árvore (k,l)2 G, cij· cklpara todoarco (i,j) contido no caminho em T* que conecta os nós k e l. • Prova: Seja (i,j) um arco-árvore de T* como na figura. Considere um arco T* contém um único caminho ligando k a l, logo (i,j) deve pertencer a este caminho (ele é o único que liga S a em T*). As condições de otimalidade de caminho garantem que cij· ckl. Como estas condições valem para qualquer arco (k,l), temos as cond. de otim. de corte e, portanto, T* é MST.
Algoritmos Kruskal Prim Sollin Boruvka
Kruskal (idéia) (inspirado nas condições de otimalidade de caminho) Algoritmo inocente não polinomial: 1. comece com uma árvore qualquer T; 2. teste as condições de otimalidade de caminho; se satisfeitas, pare. T é ótima. 3. como as condições não são satisfeitas, existe um arco árvore (i,j) e um arco-não-árvore (k,l) tais que cij > ckl. Troque (i,j) por (k,l) em T e volte para 2.
Kruskal Polinomial. Constrói T* através da adição gulosa de arcos. 1. ordene os arcos de maneira que os custos sejam não decrescentes. Defina LIST, os arcos que pertencem à árvore (LIST = vazio). 2. Examine os arcos, verificando se a inserção deles gera um ciclo com os arcos de LIST. Se não, adicione o arco a LIST. 3. |LIST| = n-1 ? sim: pare (os arcos em LIST são os arcos da árvore ótima). não: volte para 2.
Ao adicionarmos arcos em uma ordem de custo não-decrescente, automaticamente satisfazemos as condições de otimalidade de caminho.
Algumas considerações computacionais (ver Ahuja). Brevemente: tempo para se detectar a existência ou não de um ciclo (método inocente): LIST a cada momento contém uma floresta. Guardamos os conjuntos conexos como diferentes listas ligadas e checar se os dois extremos do arco testado pertencem ao mesmo conjunto. Se sim, forma um ciclo (descartamos o arco). Se não, unimos os conjuntos conexos em um único. Complexidade total: O(nm)
Algumas considerações computacionais (ver Ahuja). estruturas de dados adicionais; complexidade O(m + n log n). O(m (n,m) ) usando melhores operações de union-find.
Prim Polinomial. Baseado na condição de otimalidade de corte. Começa de um nó qualquer e adiciona à árvore o arco que satisfaz a condição de otimalidade de corte. 1. Inicie com um nó qualquer i, S = {i}; S= V\S; 2. ache (i,j) 2 [S,S] de menor custo. 3. faça S=S+{j} e S= V\S; 4. |S| = n-1 ? se sim: pare; se não, volte a 2.
Sollin híbrido entre Kruskal e Prim. como em Kruskal: mantém uma floresta como em Prim: a cada iteração, adiciona os arcos de menor custo emanando desta floresta.
Sollin Considerações de implementação e complexidade, ver Ahuja. O(m log n).
Boruvka It was first published in 1926 by Otakar Borůvka as a method of constructing an efficient electricity network for Moravia.[1][2] The algorithm was rediscovered by Choquet in 1938; [3] again by Florek, Łukasiewicz, Perkal, Steinhaus, and Zubrzycki in 1951; and again by Sollin some time in the early 1960s. Because Sollin was the only Western computer scientist in this list, this algorithm is frequently called Sollin's algorithm, especially in the parallel computing literature. retirado da wikipedia.
Modelos matemáticos Dantzig-Fulkerson-Johnson (de novo!)
Flow formulation idéia: uma MST deve permitir um caminho entre cada par de nós. retirado dehttp://coral.ie.lehigh.edu/~belotti/teaching/ie426-08/lecture16.pdf
Steiner tree problem in graphs Nem todos os nós são obrigatórios... retirado deCOSTA, A. M. Otimização do planejamento da rede secundária de distribuição de energia elétrica. MSc. dissertation, Universidade Estadual de Campinas, 2002.
Steiner Tree Problem in Graphs (STP) Grafo equivalente nós de Steiner: não precisam ser conectados, mas podem ser usados...