Teoria dos Grafos Aula 5 - Estruturas de Dados para Grafos Profª. Alessandra Martins Coelho março/2013
Estrutura é o que caracteriza o próprio grafo e independe da forma como ele é representado.
A representação geométrica de um grafo é conveniente ao ser humano por ser visual. Não é adequada para fornecer a um computador dados sobre uma estrutura de grafo. Os dados relativos a um grafo precisarão sempre de uma representação numérica interna, com a qual o computador possa trabalhar.
A variedade, em termos de dimensão e de complexidade, dos problemas de grafos, tem levado à definição de diversas formas de representação que procuram, em alguns casos, atender a necessidades algébricas ou combinatórias e, em outros casos, a questões de busca ou armazenamento de caráter essencialmente algorítmico.
Um aspecto importante na estrutura de um grafo é a sua formação a partir de grafos menores, chamados de sub-grafos. As operações de acrescentar um vértice ou uma aresta, e remover um vértice ou aresta, fornecem um mecanismo para transformar qualquer grafo em outro.
É possível ir de um vértice para outro vértice?
É possível ir de um vértice para outro vértice? Sendo possível, qual o número mínimo de passos a serem dados de um vértice a qualquer outro vértice do grafo?
Enquanto essas perguntas são relativamente fáceis de responder para um grafo de pequeno porte, o mesmo não ocorre quando o número de vértices e lados aumentam de modo significativo. As matrizes e o uso de computadores podem nos auxiliar a responder estas perguntas.
Representação por matriz Uma das formas mais simples de representar um grafo no computador é usando matrizes. A representação por matrizes permite usar as ferramentas da álgebra linear para tratar grafos. Representações usuais: matriz de adjacência, matriz de incidência.
Matriz de Adjacência A matriz de adjacência de um grafo G = (V,A) contendo n vértices é uma matriz n n de bits, onde A[i, j] é 1 (ou verdadeiro) se e somente se existe um arco do vértice i para o vértice j.
Matriz de Adjacência A matriz de adjacência de um grafo G = (V,A) contendo n vértices é uma matriz n n de bits, onde A[i, j] é 1 (ou verdadeiro) se e somente se existe um arco do vértice i para o vértice j. Para grafos ponderados A[i, j] contém o rótulo ou peso associado com a aresta e, neste caso, a matriz não é de bits.
Matriz de Adjacência Se não existir uma aresta de i para j então é necessário utilizar um valor que não possa ser usado como rótulo ou peso.
Matriz de Adjacência
Matriz de Adjacência Se o grafo é simples e não orientado, não aparecem "uns" na diagonal principal e a matriz é simétrica em relação à diagonal principal.
Matriz de Adjacência grafo orientado
O Fecho transitivo do vértice é o conjunto de vértices que é possível atingir, a partir de v i, por caminho de comprimento qualquer. O cláculo do fecho transitivo de qualquer vértice efetua-se na matriz booleana do grafo onde tem lugar um processo iterativo.
Cálculo do Fecho Transitivo do vértice: Adjacente à matriz considera-se uma coluna adicional para registro. Inserir 0 na linha de vi (vi atinge vi por caminho de comprimento 0 (nível 0). Percorrer a linha de vi e registrar 1 na linha dos vértices v2 e v5 a que v1 está ligado por um arco. Ficam assinalados os vértices do nível 1.
V 1 V 2 V 5
Prosseguindo a pesquisa, exploram-se agora os vértices do nível 1 (v 2 e v 5 ) para detectar os vértices do nível 2. Na linha de v 2 verifica-se que este vértice tem ligação para v 4. Deve-se inserir 2 na linha de v 4. Na linha de v 5 verifica-se que este tem ligação para v 2.Como v 2 já tem registro (vértice de nível 1) nada é registrado.
Leitura: v 1 atinge v 4. por caminho de comprimento 2 (nível 2)
Prosseguindo a pesquisa, exploram-se agora os vértices do nível 2 (v 4 ) para detectar os vértices do nível 3. Na linha de v 4 verifica-se que este vértice tem ligação para v 3 e v 5.Deve-se inserir 3 na linha de v 3 pois v 5 já tem registro.
Leitura: v 1 atinge v 4. por caminho de comprimento 3 (nível 3)
A exploração dos vértices de nível 3 (v 3 ) é desnecessária pois na coluna do fecho transitivo já figuram todos os vértices não havendo lugar para novos registros. O fecho transitivo do vértice v 1 é {v 1, v 2, v 3, v 4, v 5 }
A exploração dos vértices de nível 3 (v 3 ) é desnecessária pois na coluna do fecho transitivo já figuram todos os vértices não havendo lugar para novos registros. O fecho transitivo do vértice v 1 é {v 1, v 2, v 3, v 4, v 5 }
Fecho Transitivo Inverso É o conjunto de vértices de que é possível atingir v i, por caminho de comprimento qualquer. O cálculo a ser feito é semelhante ao anteriormente apresentado para o fecho transitivo direto, sendo cada vértice analisado em coluna.
Fecho Transitivo Inverso
O elemento (4,6) de A 2 indica que não há nenhum caminho de comprimento 2 ligando os vértices 4 e 6 do grafo acima.
Matriz de Adjacência - Análise É muito útil para algoritmos em que necessitamos saber com rapidez se existe uma aresta ligando dois vértices. A maior desvantagem é o uso da memória.
Matriz de Incidência Seja A= [a kj ] uma matriz de dimensão m x n denominada matriz de incidência de G=(N,M). a kj = + 1, se a aresta u k, tem origem no vertice i a kj =-1, se i é o vértice destino da aresta u k a kj =0, se a aresta u k não incide no vértice i a kj =2 se há um loop no vértice i u v w x d f e c g h b a = 0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 0 0 0 0 1 2 2 x w v u I h g f e d c b a G
Matriz de Incidência
Matriz de Incidência
A matriz de adjacência e a matriz de incidência são compostas, em sua maior parte, por zeros É possível construir uma representação mais eficiente, no que diz respeito ao uso de memória.