1 / 20

Algoritmos em Grafos

Algoritmos em Grafos. Formas de representação e manipulação básica. Prof. André Renato 1º Semestre / 2012. Estrutura de dados. Relembrando: um grafo é um conjunto de vértices interconectados por arestas.

gali
Télécharger la présentation

Algoritmos em Grafos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmos em Grafos Formas de representação e manipulação básica Prof. André Renato 1º Semestre / 2012

  2. Estrutura de dados • Relembrando: um grafo é um conjunto de vértices interconectados por arestas. • Existem, portanto, dois tipos de informações a serem armazenadas na memória do computador. • O objetivo de toda estrutura de dados é armazenar informações da forma mais eficiente possível. • O que é ser eficiente????

  3. Estrutura de dados • Em computação, o termo eficiência é muito abrangente, podendo significar coisas distintas e, por vezes, antagônicas: • Tempo computacional • Espaço de memória • Poucas linhas de código • Algoritmo de fácil compreensão

  4. Estrutura de dados • Para cada objetivo, normalmente, é possível propor uma estrutura e dados otimizada. • Portanto, a grande pergunta fica: qual a melhor estrutura para um grafo? • Difícil responder sem conhecer o grafo e sua aplicação principal. • É muito comum cada aplicação distinta funcionar melhor com estruturas diferentes.

  5. Estruturas de dados • Existem, tradicionalmente, duas estruturas mais comuns que são utilizadas para se resolver os problemas mais clássicos relacionados a grafos. • Matriz de adjacências • Lista de adjacências

  6. Matriz de adjacências • Consiste em construir uma matriz R = (rij) de tamanho n x n tal que: • rij = 1,se e somente se (i,j)  E; • rij = 0, caso contrário; 1 2 1 2 3 4 5 1 0 1 1 0 0 2 1 0 1 0 1 3 1 1 0 1 1 4 0 0 1 0 0 5 0 1 1 0 0 3 4 5

  7. Matriz de adjacências • Cada matriz representa um único grafo (não há ambiguidade) e pode ser manipulada facilmente pelo computador. • Características: • É simétrica para grafos não-direcionados; • A quantidade de “1” é igual ao dobro de arestas; • Consome O(n2) de memória;

  8. Matriz de adjacências • Para grafos direcionados, a matriz deixa de ser simétrica, pois a existência de uma conexão partindo de um vértice i e chegando a um vértice j não implica na situação contrária; • Para grafos ponderados, pode-se substituir o valor “1” pelo peso da respectiva aresta;

  9. Matriz de adjacências • A representação por matriz apresenta uma interessante relação com o problema de isomorfismo: • Uma matriz representa um único grafo, como já foi dito, mas um grafo pode ser representado por diversas matrizes:

  10. Matriz de adjacências • Exemplo: 1 2 3 4 5 1 2 3 4 5 1 0 1 1 0 0 2 1 0 1 0 1 3 1 1 0 1 1 4 0 0 1 0 0 5 0 1 1 0 0 1 3 2 4 5 1 0 1 1 0 0 3 1 0 1 1 1 2 1 1 0 0 1 4 0 1 0 0 0 5 0 1 1 0 0 2 5 3 4 1 2 0 1 1 0 1 5 1 0 1 0 0 3 1 1 0 1 1 4 0 0 1 0 0 1 1 0 1 0 0

  11. Matriz de adjacências • O exemplo pode não fazer sentido quando os vértices são representados por números. Não temos motivos pensar no vértice 3 posicionado na linha 5, ou o vértice 1 na segunda linha. • Porém, nem todos os vértices são representados por números. Em algumas situações ele podem ser representados por nomes (grafos rotulados).

  12. Matriz de adjacências • Exemplo: Venezuela Colômbia Brasil Uruguai Peru Ven. Peru Col. Brasil Uru. Ven 0 0 1 1 0 Peru 0 0 1 1 0 Col. 1 1 0 1 0 Brasil 1 1 1 0 1 Uru. 0 0 0 1 0 Col. Brasil Peru Ven. Uru. Col. 0 1 1 1 0 Brasil 1 0 1 1 1 Peru 1 1 0 0 0 Ven. 1 1 0 0 0 Uru. 0 1 0 0 0 Como criar uma matriz assim?

  13. Matriz de adjacências • Como diversas matrizes podem representar um único grafo, o problema de isomorfismo pode ser enunciado de outra forma: • Dadas duas matrizes de adjacências R1 e R2, representam elas o mesmo grafo? • Como solucionar????

  14. Lista de adjacências • Nesta forma de representação, existe uma lista principal contendo todos os vértices do grafo. • Cada elemento da lista principal contém uma nova lista indicando quais são os vértices adjacentes ao vértice em questão.

  15. Lista de adjacências • Exemplo: 1 2 3 1 2 2 1 3 5 3 3 1 2 4 5 4 5 4 3 5 2 3

  16. Lista de adjacências • Para grafos direcionados, a informação sobre a existência da aresta não estará duplicada; • Para grafos ponderados, deve-se acrescentar um campo a mais em cada elemento das listas, indicando o peso da aresta; • Em grafos rotulados, deve-se acrescentar aos elementos da lista principal o nome do vértice;

  17. Lista de adjacências • O consumo de memória deve levar em conta a lista principal e as demais; • Logo, temos O(n) para a lista principal e O(m) para as demais listas; • O consume de memória é O(n+m). • O que acontece se o grafo for completo???

  18. Lista x Matriz • O principal fator determinante na escolha da representação é a quantidade de arestas do grafo. • Esta característica é chamada de esparsidade do grafo. • Grafos esparsos devem utilizar lista de adjacências e grafos densos, matrizes. • Como determinar a esparsidade???

  19. Resumo

  20. Exercícios • Determinar a complexidade de: • Descobrir se existe adjacência (i,j) • Descobrir se um vértice é desconexo • Descobrir o grau de um vértice (não-direcionado) • Descobrir o grau de entrada de um vértice • Descobrir o grau de saída de um vértice • Adicionar/remover uma aresta • Adicionar/remover um vértice

More Related