estrutura de dados e algoritmos e programação e ...cee.uma.pt/edu/eda/eda_200506/aula11.pdf · o...

48
Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 10: Introdução aos Grafos

Upload: vuongque

Post on 04-Sep-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Estrutura de Dados e Algoritmos e Programação e Computadores II

Aula 10: Introdução aos Grafos

Page 2: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

HistóriaO assunto que se constitui no marco inicial da teoria de grafos é na realidade um problema algorítmico. Além disso, é um problema cuja solução foi a elaboração de um algoritmo eficiente.O problema da ponte de Königsberg foi resolvido por Euler em 1736. No Rio Pregel, junto à cidade de Königsberg (hoje Kalingrado) na então Prússia, existem duas ilhas formando portanto quatro regiões distingüíveis de terra.

Page 3: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

História

Sete pontes conectam a cidade e as duas ilhas, e o problema é saber se épossível caminhar de um ponto qualquer da cidade e retornar a este ponto passando por cada ponte exactamente um vez.

Page 4: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

História

Euler resolveu este problema criando um grafo onde terra firme é vértice e ponte é aresta:

Page 5: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

História

Quando caminhamos por um vértice, nós temos que entrar e sair dele (ou vice-versa, no caso do ponto inicial).Isto significa que usamos um número par de arestas cada vez que passamos por um vértice.Como o grafo acima possui vértices com número ímpar de arestas, a resposta para o problema é NÃO.

Page 6: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Motivação

Existem funções inúteis no programa?Considere que funções são vértices e existe aresta de f para g se existe chamada a g no corpo de f:

• main

• • f • k m • • n

• • • g • h

Page 7: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Motivação

Usando a mesma representação, podemos descobrir se um programa possui recursãodirecta ou indirecta. Pode existir recursão se existe ciclo no grafo.

• • f

h • • g

Page 8: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

MotivaçãoUm vendedor que passar por várias cidades, retornando ao ponto inicial, usando o trajecto de menor distância possível.Qual a menor distância entre duas cidades A e C?Como ir da cidade A a C passando pelo número mínimo de cidades?

• B 300 200

A• 100 • C 50 20

• • • 30 70

Page 9: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Motivação

Quantas cores são necessárias para colorir um mapa no plano?

B

C D

A

E

Page 10: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Conceitos Preliminares

Um grafo G(V,A) é definido pelo par de conjuntos V e A, onde:

V - conjunto não vazio: os vértices ou nós do grafo;A - conjunto de pares ordenados a=(v,w), v e w ∈V: as arestas do grafo.

Seja, por exemplo, o grafo G(V,A) dado por: V = { p | p é uma pessoa }A = { (v,w) | < v é amigo de w > }

Page 11: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Conceitos PreliminaresEsta definição representa toda uma família de grafos.Um exemplo de elemento desta família é dado por:

V = { Maria, Pedro, Joana, Luiz }A = { (Maria, Pedro) , (Joana, Maria) , (Pedro, Luiz) , (Joana, Pedro) }

Page 12: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Dígrafo (Grafo Orientado) Considere, agora, o grafo definido por:

V = { p | p é uma pessoa da família Castro } A = { (v,w) | < v é pai/mãe de w > }

A relação definida por A não é simétrica pois se <v épai/mãe de w>, não é o caso de <w é pai/mãe de v>.Há, portanto, uma orientação na relação, com um correspondente efeito na representação gráfica de G.O grafo é dito ser um grafo orientado (ou dígrafo), sendo que as conexões entre os vértices são chamadas de arcos.

Page 13: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Dígrafo (Grafo Orientado)Um exemplo de deste grafo é:

V = { Emerson, Isadora, Renata, Antonio, Rosane, Cecília, Alfredo } A = {(Isadora, Emerson), (Antonio, Renata), (Alfredo, Emerson), (Cecília, Antonio), (Alfredo, Antonio)}

Page 14: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Ordem

A ordem de um grafo G é dada pela cardinalidade do conjunto de vértices, ou seja, pelo número de vértices de G. Nos exemplos ao lado:

ordem(G1) = 4 ordem(G2) = 6

Page 15: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

AdjacênciaEm um grafo simples, dois vértices v e w são adjacentes se há uma aresta a=(v,w) em G. No caso do grafo ser dirigido, a adjacência (vizinhança) é especializada em:

Sucessor: um vértice w é sucessor de v se há um arco que parte de v e chega em w. Antecessor: um vértice v é antecessor de w se há um arco que parte de v e chega em w.

Page 16: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Grau

O grau de um vértice é dado pelo número de arestas que lhe são incidentes.

grau(Pedro) = 3 grau(Maria) = 2

No caso do grafo ser dirigido, a noção de grau éespecializada em:

Grau de emissão: o grau de emissão de um vértice v corresponde ao número de arcos que partem de v.Grau de recepção: o grau de recepção de um vértice v corresponde ao número de arcos que chegam a v.

Um vértice v é uma fonte se grauDeRecepção(v) = 0.Um vértice v é um sumidouro se grauDeEmissão(v) = 0.

Page 17: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

LaçoUm laço é uma aresta ou arco do tipo a=(v, v), ou seja, que relaciona um vértice a ele próprio.

No exemplo há três ocorrências de laços para um grafo não orientado.

Page 18: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Grafo RegularUm grafo é dito ser regular quando todos os seus vértices tem o mesmo grau. O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau 3.

Page 19: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Grafo CompletoUm grafo é dito ser completo quando há uma aresta entre cada par de seus vértices.

Estes grafos são designados por Kn, onde n é a ordem do grafo.Um grafo Kn possui o número máximo possível de arestas para um dado n. Ele é, também regular-(n-1) pois todos os seus vértices tem grau n-1.

Page 20: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Grafo Bipartido

Um grafo é dito ser bipartido quando seu conjunto de vértices V puder ser dividido em 2 subconjuntos V1 e V2, tais que toda aresta de G une um vértice de V1 a outro de V2.

Page 21: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Grafo BipartidoSejam os conjuntos H={h | h é um homem} e M={m | h é um mulher} e o grafo G(V,A) onde:

V = H ∪ M A = {(v,w) | (v ∈ H e w ∈ M) ou (v ∈ M e w ∈ H) e <v foi namorado de w>}

Page 22: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Grafo BipartidoO grafo abaixo é uma K3,3, ou seja, um grafo bipartido completo que contém duas partições de 3 vértices cada.Ele é completo pois todos os vértices de uma partição estão ligados a todos os vértices da outra partição.

Page 23: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Grafo ValoradoUm grafo G(V,A) é dito ser valorado quando existe uma ou mais funções relacionando V e/ou A com um conjunto de números. Como exemplo:

V = {v | v é uma cidade com aeroporto} A = {(v,w,t) | <há linha aérea ligando v a w, sendo t o tempo esperado de vôo>}

Page 24: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

MultigrafoUm grafo G(V,A) é dito ser um multigrafoquando existem múltiplas arestas entre pares de vértices de G.No grafo abaixo há duas arestas entre os vértices A e C e entre os vértices A e B.

Page 25: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

CadeiaUma cadeia é uma sequência qualquer de arestas adjacentes que ligam dois vértices.O conceito de cadeia vale também para grafos orientados, bastando que se ignore o sentido da orientação dos arcos.A sequência de vértices (x6, x5, x4, x1) é um exemplo de cadeia no grafo abaixo.

Page 26: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

CadeiaUma cadeia é dita ser elementar se não passa duas vezes pelo mesmo vértice. É dita ser simples se não passa duas vezes pela mesma aresta (arco).O comprimento de uma cadeia é o número de arestas (arcos) que a compõe.

Page 27: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

CaminhoUm caminho é uma cadeia na qual todos os arcos possuem a mesma orientação.Aplica-se, portanto, somente a grafos orientados.A sequência de vértices (x1, x2, x5, x6, x3) é um exemplo de caminho no grafo acima.

Page 28: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Ciclo e Circuito

Um ciclo é uma cadeia simples e fechada:o vértice inicial é o mesmo que o vértice final.

A sequência de vértices (x1, x2, x3, x6, x5, x4, x1) é um exemplo de ciclo elementar no grafo acima.Um circuito é um caminho simples e fechado.A seqüência de vértices (x1, x2, x5, x4, x1) éum exemplo de circuito elementar no grafo acima.

Page 29: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Fecho TransitivoO fecho transitivo directo (ftd) de um vértice v é o conjunto de todos os vértices que podem ser atingidos por algum caminho iniciando em v.Note que o próprio vértice pode fazer parte do ftd jáque ele é alcançável partindo-se dele mesmo. O fecho transitivo inverso (fti) de um vértice v é o conjunto de todos os vértices a partir dos quais se pode atingir v por algum caminho.Note que o próprio vértice pode fazer parte do fti jáque dele se pode alcançar ele mesmo.

Page 30: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Fecho TransitivoO ftd do vértice x5 do grafo G17, por exemplo, é o conjunto: {x1, x2, x3, x4, x5, x6}.

O fti do vértice x5 do grafo G17, por exemplo, é o conjunto: {x1, x2, x4, x5, x7}.

Page 31: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Grafo Desconexo

Um grafo G(V,A) é dito ser desconexo se hápelo menos um par de vértices que não estáligado por nenhuma cadeia.

Page 32: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Grafo Conexo

Um grafo G(V,A) é dito ser conexo se há pelo menos uma cadeia ligando cada par de vértices deste grafo G.

Page 33: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Vértice de CorteUm vértice é dito ser um vértice de corte se sua remoção (juntamente com as arestas a ele conectadas) provoca um redução na conexidade do grafo.Os vértices x2 nos grafos abaixo são exemplos de vértices de corte.

Page 34: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Ponte

Uma aresta é dita ser um a ponte se sua remoção provoca um redução na conexidadedo grafo.As arestas (x3, x2) em nos grafos abaixo são exemplos de pontes.

Page 35: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Base

Uma base de um grafo G(V,A) é um subconjunto B ∈V, tal que:

dois vértices quaisquer de B não são ligados por nenhum caminho; todo vértice não pertencente a B pode ser atingido por um caminho partindo de B.

Page 36: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Anti-BaseUma anti-base de um grafo G(V,A) é um subconjunto A ∈ V, tal que:

dois vértices quaisquer de A não são ligados por nenhum caminho; de todo vértice não pertencente a A pode se atingir A por um caminho.

Page 37: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Raiz e Anti-RaizSe a base de um grafo G(V,A) é um conjunto unitário, então esta base é a raiz de G.

Se a anti-base de um grafo G(V,A) é um conjunto unitário, então esta anti-base é a anti-raiz de G.

Page 38: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Estrutura de Dados para Grafos

Matriz de AdjacênciasMatriz de IncidênciasLista de Adjacências

Page 39: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Matriz de AdjacênciasSendo n o número de vértices de G, uma matriz de adjacência para G(V, E) é uma matriz A = (aij) n × n, tal que aij = 1 se (vi, vj) ∈ E.

V1 • V1 V2 V3 V4

V1 0 1 1 0 V2 • • V3 A = V2 1 0 0 1

V3 1 0 0 1 • V4 V4 0 1 1 0

V1 • V1 V2 V3 V4

V1 0 1 1 0 V2 • • V3 A = V2 0 0 0 1

V3 0 0 0 0 • V4 V4 0 1 1 0

Page 40: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Matriz de Adjacências

A desvantagem desta representação é que ela ocupa muito espaço se há poucas arestas, a maior parte da matriz é inútil.A vantagem é que podemos saber se uma aresta existe ou não em tempo constante.

Page 41: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Matriz de Incidências

Uma outra representação matricial possível para o grafo G(V, E) é a matriz de incidências B = (bij) n × m, tal que bij = 1 se vértice vi e aresta ej forem incidentes.

Observe que cada coluna de B tem exactamente dois Uns (1’s).

V1 • E1 E2 E3 E4V1 1 1 0 0

V2 • • V3 A = V2 1 0 1 0V3 0 1 0 1

• V4 V4 0 0 1 1

Page 42: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Matriz de Incidências

Como representar um dígrafo utilizando a matriz de incidência?

V1 • E1 E2 E3 E4 E5V1 ? ? ? ? ?

V2 • • V3 A = V2 ? ? ? ? ?V3 ? ? ? ? ?

• V4 V4 ? ? ? ? ?

Page 43: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Lista de AdjacênciasHá um vetor de n posições onde cada um apontando para uma lista. A posição i do vetor aponta para uma lista contendo números j tal que (Vi, Vj) ∈ E.Para os grafos anteriores teremos:

V1 2 3 nil V2 1 4 nil V3 1 4 nil V4 2 3 nil

V1 2 3 nil V2 4 nil V3 nil V4 2 3 nil

Page 44: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Busca em Profundidade

Depth - First Search (DFS)Uma DFS é feita em um grafo começando em um vértice V chamado raiz da árvore.

V V 1 1

7 2 6 2 4 3 5

5 3

4

Page 45: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Busca em Largura

Breadth - First Search (BFS)Uma BFS é feita em um grafo G = (V, E) começando em um vértice V.

V V 3 1 a 1 b

b 4 a 2 3 c d e 5

5 e 6 f 7 g 4 2 6

c d f 8 h

Page 46: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Busca em LarguraPrimeiro o algoritmo visita V e todos os vértices conectados a V, chamados filhos de V.

BFS visita vértices W tal que (V, W) ∈ E.

No segundo passo, o algoritmo visita todos os netos de V.

Os vértices que não estão conectados directamente a V mas, estão conectados a algum vértice e que está conectado a V.

Page 47: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Exercícios

Faça a busca em profundidade e em largura nos grafos abaixo:

a b

c d

V Vab

c d e

V

a bc

d ef g

Page 48: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/Aula11.pdf · O grafo abaixo é dito ser um grafo regular-3 pois todos os seus vértices tem grau

Exercícios

a b

c d

V h

e

i

f g

e

Va b

cd i

f gh

j kj

k

l

m