TGR – BCC Representação Computacional de Grafos

Propaganda
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
Download