Sunteți pe pagina 1din 4

Organização

Algoritmos e Estruturas de TAD Grafo


Estruturas de Dados para Grafos
Dados II  Lista de Arestas
 Lista de Adjacências
 Matriz de Adjacências
Grafos II:

Algoritmos & Estruturas de Dados II


Análise Assintótica Comparativa
Desempenhos das Principais Operações do TAD
Estruturas de Dados 

Exemplo de Implementação Simples


Ricardo J. G. B. Campello

Parte deste material é baseado em adaptações e extensões de slides


 Código C de uma ED Alternativa
disponíveis em http://ww3.datastructures.net (Goodrich & Tamassia).

1 2

TAD Grafo Estrutura de Dados – Lista de Arestas


Dados: vértices e arestas Operações (de Atualização):
relações de incidência  insertVertex(G, o): insere um novo

vértice isolado, armazenando nele o u
 elementos armazenados elemento o, e retorna uma referência. a c
Operações (Gerais):  insertEdge(G, v, w, o): insere uma
aresta (v,w), armazenando nela o
b d
 endVertices(G, e): retorna os elemento o, e retorna uma referência.
v w z
dois vértices finais da aresta e
 removeVertex(G, v): remove o vértice
(e.g. arranjo c/ 2 elementos). v (e suas arestas incidentes) e retorna
 opposite(G, v, e): retorna o o elemento armazenado nele.
Algoritmos & Estruturas de Dados II

Algoritmos & Estruturas de Dados II

vértice oposto a v na aresta e.  removeEdge(G, e): remove aresta e,


areAdjacent(G, v, w): verdadeiro retornando o elemento armazenado. n vértices
 ∅ u v w z ∅
se e somente se os vértices v e Operações (para Iteradores):
w forem adjacentes.  incidentEdges(G, v): retorna iterador
das arestas incidentes em v.
 replaceVertex(G, v, x): substitui
o elemento do vértice v por x.  vertices(G): retorna iterador dos ∅ a b c d∅ m arestas
vértices do grafo G.
 replaceEdge(G, e, x): substitui o  edges(G): retorna iterador das arestas
elemento da aresta e por x. do grafo G.
3 4
Nota: Métodos Específicos podem ser Adicionados para Grafos Direcionados
a
u
c
Estrutura de Dados -
Lista de Arestas v
b
w
d
z
Lista de Adjacências
A cada elemento da a v b
∅ u v w z ∅ lista de vértices é u w
adicionado um
ponteiro para uma
lista de incidências:
∅ a b c d∅
 lista de ponteiros ∅ u v w ∅
Principais Desvantagens: para suas arestas
Algoritmos & Estruturas de Dados II

Algoritmos & Estruturas de Dados II


incidentes.
 Verificar as arestas incidentes em um dado vértice v demanda
percorrer toda a lista de arestas
A cada elemento da
 Operação incidentEdges(G, v) do TAD é O(m) lista de arestas são
 O mesmo vale para checar se dois vértices v e w são adjacentes, adicionados ponteiros
para as posições ∅ a b ∅
bem como para remover um dado vértice v
correspondentes nas
 Operação areAdjacent(G, v, w) do TAD é O(m) listas de incidência
 Operação removeVertex(G, v) do TAD é O(m) dos seus vértices.
5 6

v
Estrutura de Dados –
a b
Lista de Adjacências u w Matriz de Adjacências
A cada elemento da lista a v b
∅ u v w ∅
de vértices é adicionada: u w
 Uma chave (índice)
associada ao vértice.
∅ 0 u 1 v 2 w ∅
∅ a b ∅
Acrescenta-se ainda uma
matriz de adjacências com:
Algoritmos & Estruturas de Dados II

Algoritmos & Estruturas de Dados II

A partir de um vértice v, podemos acessar suas arestas incidentes em


tempo proporcional ao seu número:  Nulo nas posições de 0 1 2
vértices não adjacentes. 0 ∅ ∅
 incidentEdges(G, v) do TAD é O(deg(v))
 Ponteiro para o elemento 1 ∅
 removeVertex(G, v) do TAD é O(deg(v)) correspondente da lista
Podemos verificar se dois vértices v e w são adjacentes percorrendo a de arestas, nas posições 2 ∅ ∅
menor dentre as respectivas listas auxiliares de incidência: de vértices adjacentes.
∅ a b∅
 areAdjacent(G, v, w) do TAD é O( min(deg(v), deg(w)) )
7 8
Desempenho Assintótico das Implementação Simples:
Principais Operações do TAD Estrutura Alternativa (Skiena & Revilla, 2003)
u
Grafo simples Vértices rotulados:
com n vértices e m Lista de Matriz de
Lista de Adjacências  Chaves (índices) são
arestas Arestas Adjacências associadas aos vértices v w z
Notação Big O
Arestas sem elementos.
Espaço (memória) n + m* n + m* n2 + m v u w z vertices
incidentEdges(G, v) m deg(v) n Grafos estáticos, ou: 0 1 2 3 4
edges degree
Algoritmos & Estruturas de Dados II

Algoritmos & Estruturas de Dados II


areAdjacent(G, v, w) m min(deg(v), deg(w)) 1  Inserções e remoções
sem redimensionamento 0 0
insertVertex(G, o) 1 1 n2 *
das matrizes e vetores 1 3 2 1 2
insertEdge(G, v, w, o) 1 1 1
 Matrizes e vetores super- 2 1 3 2 2
MAXV
removeVertex(G, v) m deg(v) n2 * dimensionados para: 3 1 2 4 3 3
removeEdge(G, e) 1 1 1  No. de vértices (MAXV) 4 3 4 1
 Grau (MAXDEGREE) 0 1 2

9 MAXDEGREE 10

Estrutura Alternativa (Skiena & Revilla, 2003) Estrutura Alternativa (Skiena & Revilla, 2003)
Algoritmos & Estruturas de Dados II

Algoritmos & Estruturas de Dados II

Nota: Como as arestas não são


representadas explicitamente,
essa estrutura não permite a
implementação das operações
endVertices, opposite e
replaceEdge do TAD Grafo.
11 12
Estrutura Alternativa (Skiena & Revilla, 2003) Exercícios
1. Na implementação simples de grafo em C discutida em aula, não se
incluiu na estrutura principal (struct graph) um vetor vertices
para armazenar os elementos dos vértices. Modifique essa estrutura
de tal forma que esse vetor seja contemplado. Nota: Considere que
os elementos nos vértices são strings com no máx. 30 caracteres e
que vértices inexistentes armazenam nulo (\0).
2. Na implementação simples de grafo em C discutida em aula, foram
apresentadas as rotinas correspondentes às operações insertEdge e
Algoritmos & Estruturas de Dados II

Algoritmos & Estruturas de Dados II


removeEdge do TAD Grafo (rotinas insert_edge e delete_edge).
Duas arestas Já considerando a modificação no código realizada no Exercício 1,
direcionadas, implemente as rotinas correspondentes às seguintes operações:
(x,y) e (y,x),
 areAdjacent, replaceVertex, removeVertex, insertVertex
representando
uma aresta  Nota: Após remover um vértice, é preciso remover todas as suas arestas
não-direcionada incidentes (em ambos os sentidos, para arestas não direcionadas), o que
implica reestruturar a matriz edges de forma apropriada. Pode-se
aproveitar essa reestruturação para preencher o espaço deixado pelo
vértice removido e permitir que inserções sejam feitas sempre ao final.
13 14

Exercícios Referências
3. Represente graficamente o grafo abaixo em cada uma das três
M. T. Goodrich and R. Tamassia, Data Structures and
diferentes estruturas de dados clássicas discutidas em aula:
Algorithms in C++/Java, John Wiley & Sons, 2002/2005.
 lista de arestas, lista de adjacências e matriz de adjacências

B N. Ziviani, Projeto de Algoritmos, Thomson, 2a. Edição, 2004.


1 -3

A 0 D
2.9
E T. H. Cormen, C. E. Leiserson, and R. L. Rivest, Introduction
20 5
to Algorithms, MIT Press, 2nd Edition, 2001.
Algoritmos & Estruturas de Dados II

Algoritmos & Estruturas de Dados II

S. Skiena e M. Revilla, Programming Challenges: The


4. Ignore os pesos das arestas e repita o exemplo anterior para a Programming Contest Training Manual, Springer-Verlag, 2003.
estrutura alternativa também discutida. Nesse caso, represente o
conteúdo da matriz edges e dos vetores degree e vertices.
5. Elabore alguns diferentes grafos e repita os Exercícios 3 e 4.
6. Explique a razão de cada uma das complexidades computacionais da
tabela do slide 9, além daquelas que foram discutidas.
15 16

S-ar putea să vă placă și