Estruturas de representação

Download Report

Transcript Estruturas de representação

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.
 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????

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
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.

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
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
3
4
5
1
2
3
4
5
12345
01100
10101
11011
00100
01100
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;
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;

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:

Matriz de adjacências

Exemplo:
1
2
3
4
1
2
3
4
5
12345
01100
10101
11011
00100
01100
5
1
3
2
4
5
13245
01100
10111
11001
01000
01100
2
5
3
4
1
25341
01101
10100
11011
00100
10100
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).

Matriz de adjacências

Exemplo:
Venezuela
Colômbia
Brasil
Uruguai
Ven
Peru
Col.
Brasil
Uru.
Ven. Peru Col. Brasil Uru.
0
0 1
1
0
0
0 1
1
0
1
1 0
1
0
1
1 1
0
1
0
0 0
1
0
Como criar uma matriz assim?
Peru
Col.
Brasil
Peru
Ven.
Uru.
Col. Brasil Peru Ven. Uru.
0
1
1 1 0
1
0
1 1 1
1
1
0 0 0
1
1
0 0 0
0
1
0 0 0
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????
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.

Lista de adjacências

Exemplo:
1
2
3
4
5
1
2
3
2
1
3
5
3
1
2
4
4
3
5
2
3
5
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;

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???

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???

Resumo
Representação
Lista
Matriz
Indicação
Grafos esparsos
Grafos densos
Memória
O(n+m)
O(n2)
Rótulos
Na própria lista
Em outra estrutura
Pesos das arestas
Na própria lista
Na própria matriz
Pesos dos vértices
Na própria lista
Em outra estrutura*
Exercícios
Determinar a complexidade de:
A. Descobrir se existe adjacência (i,j)
B. Descobrir se um vértice é desconexo
C. Descobrir o grau de um vértice (nãodirecionado)
D. Descobrir o grau de entrada de um vértice
E. Descobrir o grau de saída de um vértice
F. Adicionar/remover uma aresta
G. Adicionar/remover um vértice
