TGR – BCC Representação Computacional de Grafos Prof. Ricardo José Pfitscher Cronograma • • • • Representação Matriz de Adjacências Lista de Adjacências Matriz de Incidências Representação • Como podemos representar um grafo? • Através de diagramas: Fácil visualização de alguns aspectos • Arestas, conexões, direções, percursos • O uso de diagramas pode facilitar ou dificultar as percepções de propriedades, depende do tamanho e da complexidade • Isomorfismo, planaridade • A representação visual não é adequada para armazenamento computacional • Como armazenar a estrutura de um grafo? Representação • Precisamos armazenar os dados essenciais da definição de grafos • Adjacências entre vértices, vértices, arestas, etc... • Como podemos armazenar? • Matriz de adjacências • Lista de adjacências • Matriz de incidências • Nestas estruturas são descritas as relações entre os vértices Matriz de Adjacência • Conceito de adjacência: • a é adjacente a b , se a está conectado a b • A matriz de adjacência deve possuir um valor que represente este conceito • Dado um grafo G, a matriz de adjacências r=(rij) é uma matriz nXn onde: • n é o número de vértices rij 1, se i é adjacente a j 0 , em caso contrário • Em outras palavras, em uma matriz quadrada, cada espaço é marcado como 1 se os dois vértices representados tem conexão, caso não tenha, marca 0 Matriz de Adjacência • “populando” a matriz • n=4 X A B C D A 0 1 0 0 B 1 0 1 0 C 0 1 0 1 D 0 0 1 0 rij 1, se i é adjacente a j 0 , em caso contrário Matriz de Adjacência • Podemos representar dígrafos (grafos direcionados) usando matriz de adjacência? X A B C D A B C D X A B C D A 0 1 0 0 B 0 0 1 0 C 0 0 0 0 D 0 0 1 0 Matriz de Adjacência • Podemos representar grafos com arestas laço usando matriz de adjacência? X A B C D A B C D X A B C D A 1 1 1 1 B 1 0 0 0 C 1 0 0 1 D 1 0 1 0 A D B C Matriz de Adjacência • Podemos representar grafos com arestas valoradas usando matriz de adjacência? X A B C D A B C D X A B C D A 0 2 0 3 B 2 0 0 0 C 0 0 0 5 D 3 0 5 0 A 3 2 D B 5 C Matriz de Adjacência • Podemos representar dígrafos com arestas valoradas usando matriz de adjacência? X A B C D A B C D X A B C D A 0 0 0 0 B 2 0 0 0 C 0 0 0 5 D 3 0 0 0 A 3 2 D B 5 C Matriz de Adjacência • Podemos representar grafos com arestas paralelas usando matriz de adjacência? X A B C D A B C D X A B C D A 0 ? 0 1 B ? 0 0 0 C 0 0 0 1 D 1 0 1 0 A D B C Matriz de Adjacência • Vantagens • Fácil visualização para vértices adjacentes • Útil em algoritmos que precisamos de rapidez para saber se existe conexão entre dois vértices • Cálculo do grau do nó • Grafos não direcionados: Soma dos números de uma linha • Grafos direcionados: • Soma da linha: grau de saída • Soma da coluna: grau de entrada • Desvantages: • Requer muito espaço para armazenamento • Mais utilizado em grafos densos Lista de Adjacências • Para obter remodelagem de um grafo em tempo de execução, é necessário fazer a alocação dinâmica de sua representação • Representação das adjacências entre vértices é feita através de listas lineares Lista de Adjacências • Constituição: • Formar um índice de vértices: • Vetor dinâmico • Lista encadeada • Para cada elemento do índice: • Lista encadeada, descreve os elementos adjacentes conectados Lista de Adjacências • Definição: • Há um vetor de N posições, onde cada um aponta para uma lista, a posição i do vetor aponta para um número j, tal que (Vi,Vj) pertence a E A D A B D B A Null C D Null D A C Null B C Null Lista de Adjacências • Podemos representar dígrafos (grafos direcionados) usando lista de adjacências? Lista de Adjacências • Podemos representar grafos com arestas laço usando lista de adjacências? A D B C Lista de Adjacências • Podemos representar grafos com arestas valoradas usando lista de adjacências? A 3 2 D B 5 C Lista de Adjacências • Podemos representar grafos com arestas paralelas usando lista de adjacências? A D B C Lista de Adjacências • Exercício: Lista de Adjacências • A lista é formada por nós que contém: • o dado do vértice (letra) • Ponteiro para o vértice adjacente ao indicado no índice • Alguns casos obrigam algumas alterações nos nós: • Inserção de campos • • • • Visita ao vértice Valor de chegada Dados para processamento de seqüência do grafo Etc. Lista de Adjacências • Forma mais flexível para representar grafos • Aplicações específicas podem exigir outras formas de representação • Podemos descrever grafos através de suas arestas, o que pode indicar o uso de uma matriz Lista de Adjacências • Vantagens: • Menor espaço para armazenamento • Mais utilizada em grafos esparsos • Verificação de grau: • Não direcionais: Quantidade de nós em uma linha • Direcionais: • Soma da linha: Grau de saída • Grau de entrada? • Desvantagens: • O acesso é mais lento Matriz de Incidência • Outra representação matricial • Baseada em vértices e arestas • O grafo é representado a partir das arestas • Dado um grafo G, a matriz de incidência b=(bij) é uma matriz nXm onde: • n é o número de vértices • m é o número de arestas 1, se aresta j incide no vértice i ij 0 , em caso contrário b • Em outras palavras, se a aresta surge ou chega no vértice marca como 1, se não, marca 0 Matriz de Incidência • Suponha o grafo A e2 e1 D X e1 e2 A 1 1 B 1 0 C 0 0 D 0 1 e3 0 0 1 1 B e3 C bij 1, se aresta j incide no vértice i 0 , em caso contrário Matriz de Incidência • Propriedades • Como cada aresta é incidente a dois vértices, cada coluna terá exatamente dois 1 • O número de 1 em cada linha é igual ao grau do vértice correspondente • Uma linha que contém somente 0 representa um vértice isolado • Arestas paralelas resultam em duas colunas idênticas Matriz de Incidência • Podemos representar dígrafos usando matriz de incidência? bij 1, se aresta j tem como origem o vértice i 1, se aresta j tem como destino o vértice i 0, caso contrário X e1 e2 e3 A B C D X e1 e2 e3 A 1 1 0 B -1 0 0 C 0 0 -1 D 0 -1 1 A e2 e1 D B e3 C Matriz de Incidência • Podemos representar grafos ou dígrafos valorados usando matriz de incidência? bij valordaaresta , se aresta j incide no vértice i 0 , em caso contrário A e2 - 3 X e1 e2 e3 A B C D X e1 e2 A 2 3 B 2 0 C 0 0 D 0 3 e3 0 0 5 5 e1 - 2 D B e3 - 5 C Matriz de Incidência • Na maioria das vezes, exige a alocação de uma matriz maior que a de adjacências, então, não é tão utilizada Conclusão • Atualização de lista dinâmica exige mais tempo que manipulação de tabela • Na lista, a adição de novos elementos pode demorar mais, mas ocupa menos espaço Exercício • Dado o grafo G: • Elaborar a matriz de adjacências • Elaborar a lista de adjacências • Elaborar a matriz de incidências Árvores e grafos Árvores e grafos • Árvore: Grafo não direcionado, acíclico e conectado • Existe um caminho entre a raiz e todos os vértices da árvore • Como a árvore é acíclica este caminho é único Árvores e grafos • Definições: • Profundidade de um vértice em uma árvore: É o caminho entre a raiz e o vértice • A raiz de uma árvore tem profundidade 0 • Altura (profundidade) da árvore é a maior profundidade entre os vértices • Comprimento do maior caminho entre a raiz e um vértice Árvores e grafos • Definições: • Um vértice sem filho é chamado de folha • Vértices que não são folhas, são chamados de vértices internos • Floresta: • Qualquer grafo acíclico • Coleção de árvores separadas Árvores e grafos • Definições: • Árvores binárias: • Cada nó tem no máximo dois filhos • Cada filho é designado como filho a esquerda ou filho a direita • Árvore binária completa: • Todos os nós internos tem dois filhos • Todas as folhas tem a mesma profundidade Árvores e grafos • Exemplos: Árvore Binária Árvore Binária Completa Árvores e grafos • Expressões algébricas com árvores • Operações binárias podem ser representadas com árvores binárias rotuladas • Folhas são operandos, vértices internos são operações binárias (2+x)-(y*3) Exercício: ((2+x)-(y*3))+((3*x)-5) Árvores e grafos • Propriedades de Árvores: • Seja G(V,E) um grafo não orientado. Podemos fazer as seguintes declarações: 1. G é um grafo acíclico não orientado e conectado 2. Dois vértices quaisquer em G estão conectados por um caminho simples e único 3. G é conectado, mas se qualquer aresta for retirada de E, o grafo resultante será desconectado 4. G é acíclico mas se qualquer aresta for adicionada a E, o grafo resultante conterá um ciclo • Validar estas proposições no grapthing Árvores e grafos • Representar grafos em estruturas de dados árvores: • É possível em situações onde os Grafos sejam árvores A B * * C D * * E * * Matriz de Alcançabilidade Matriz de Alcançabilidade • Utilizada em grafos direcionados • Verificar se existe caminho de um vértice a outro • Definição: • Em um grafo direcionado, o vértice Vi é alcançável por um vértice Vj se existe caminho entre de Vi até Vj Matriz de Alcançabilidade • A matriz de adjacência de um grafo indica se um vértice possui alcançabilidade a outro com uma rota de um salto • Utilizamos a potência a N de uma matriz para identificar a alcançabilidade de um vértice para N saltos • • • • N deve ser menor ou igual ao número de vértices Potência 2, dois saltos Potência 3, três saltos ... Matriz de Alcançabilidade • A potência booleana de uma matriz é dada por: A ( 2) [i, j] n (a ik k 1 akj ) • Resultado, para cada 1 na matriz, existe um caminho com dois saltos do vértice i para o vértice j • Se fizermos uma nova potência, teremos a alcançabilidade para 3 saltos e assim sucessivamente Matriz de Alcançabilidade • Exemplo, dado o grafo, elaborar a matriz de adjacências e a de alcançabilidade para 2 saltos Matriz de Alcançabilidade • Para identificarmos se um vértice é alcançável a partir de um caminho de qualquer tamanho, fazemos uma soma booleana entre as N matrizes de alcançabilidade (2) R A A (3) A ... A ( N) • Se a posição for igual a 1 indica que existe um caminho entre o vértice i e o vértice j. Matriz de Alcançabilidade • Exemplo, dado o grafo, elaborar a matriz de alcançabilidade para N saltos Matriz de Alcançabilidade • Implementação deste algoritmo, quanto trabalho é necessário para executar? 1. Elaborar as N matrizes de alcançabilidade 2. Realizar as operações N de soma entre as potências • Uso de algoritmo mais eficiente para computar esta matriz • Algoritmo de Warshall Matriz de Alcançabilidade • Pseudocódigo • A matriz é atualizada a cada passo, o que indica menor espaço para armazenamento • Exercício: Implementar o algoritmo Bibliografia • GERSTING, Judith L. Fundamentos Matemáticos para a Ciência da Computação. Rio de Janeiro. 3ª Ed. Editora. • Complementar: • Outras aulas disponíveis na web