Você está na página 1de 29

Matemática Discreta

Grafos não-direcionados
Profa. Aline Farias Gomes de Sousa
Instituto de Geociências e Engenharias
Faculdade de Sistemas de Informação
Grafos não-direcionados
• Introdução

• API graph

• Busca em profundidade (depth-first search)

• Busca em largura (breadth-first search)


Grafos não-direcionados
• Introdução

• API graph

• Busca em profundidade (depth-first search)

• Busca em largura (breadth-first search)


Introdução
Grafos não-direcionados
Introdução

• Grafo: conjunto de vértices conectados par-a-par por arestas.

• Por que estudar algoritmos em grafos?


o Milhares de aplicações
o Centenas de algoritmos em grafos conhecidos
o Abstração amplamente utilizada e interessante
o Área desafiadora da Ciência da Computação e Matemática Discreta
Rotas
Rede de interação proteína-proteína
Internet mapeada pelo Projeto Opte
O projeto Opte foi
desenvolvido com
o objetivo de
visualizar todas as
relações na
internet de
conexões
rastreáveis
durante 24 horas
através de apenas
um ponto de
conexão.
Internet mapeada pelo Projeto Opte

Em 2010 foi lançada


uma imagem da
internet que foi
publicada na
Discovery Magazine
e se encontra em
exposição no
Museum of Modern
Art (MoMA), em
Nova Iorque.
10 milhões de amizades no Facebook
Aplicações de grafos
Grafo Vértice Aresta
Comunicações Telefone, Computador Cabo de fibra óptica
Circuitos Porta, Registrador, Processador Fio
Mecânica Junta/Junção Viga, Mola, Haste
Finanças Estoque, Moeda corrente Transação
Transportes Interseção entre ruas, Aeroporto Rodovia, Rota aérea
Internet Rede de computadores classe C Conexão
Jogos Posição no tabuleiro Movimento legal
Relacionamento social Pessoa, Ator Amizade, Elenco do filme
Rede neural Neurônio Sinapse
Rede proteíca Proteína Interação proteína-proteína
Molécula Átomo Ligação
Terminologias de grafos

• Caminho: Sequência de vértices conectados por arestas

• Ciclo: Caminho onde o primeiro e o último vértices são iguais

• Dois vértices estão conectados se existe um caminho entre eles


Terminologias de grafos
Vértice
Ciclo de Aresta
tamanho 5

Caminho de
tamanho 4

Vértice de
grau 3

Componentes
conectados
Problemas de processamento em grafos
Caminho. Existe um caminho entre os vértices s e t?
Menor caminho. Qual o menor caminho entre s e t?

Ciclo. Existe um ciclo no grafo?


Circuito de Euler. Existe um ciclo que usa cada aresta exatamente uma vez?
Circuito de Hamilton. Existe um ciclo que usa cada vértice exatamente uma vez?

Conectividade. Existe um caminho que conecta todos os vértices?


Árvore geradora mínima. Qual a melhor forma para conectar todos os vértices?
Biconectividade. Existe um vértice cuja remoção desconecta o grafo?

Planaridade. É possível desenhar um grafo no plano sem arestas se cruzando?


Isomorfismo. É possível duas listas adjacentes representarem o mesmo grafo?

Desafio. Quais desses problemas são fáceis? Difícies? Intratáveis?


Grafos não-direcionados
• Introdução

• API graph

• Busca em profundidade (depth-first search)

• Busca em largura (breadth-first search)


API graph
Grafos não-direcionados
API graph - Representação
Desenho do grafo. Proporciona intuição acerca da estrutura do grafo.

Dois desenhos do mesmo grafo

Limitação. A intuição pode ser enganosa.


API graph - Representação
Representação dos vértices
Nesta aula: inteiros entre 0 e V-1
Aplicação: converte entre nomes e inteiros usando tabela de símbolos

Tabela de símbolos

Arestas
Anomalias. Loop paralelas
API graph

Cria um grafo vazio com V vértices

Cria um grafo a partir do stream de entrada

Adiciona uma aresta v-w

Retorna os vértices adjacentes a v

Retorna o número de vértices

Retorna o número de arestas

Representação em string
Formato de entrada graph
API graph - Exemplo

Lê o grafo a partir do stream de entrada

Imprime cada aresta


Típico código de processamento em grafos

Computar o grau de v

Computar o grau máximo


Típico código de processamento em grafos

Computar o grau médio

Contar loops
Representação de grafos - Conjunto de arestas
• Mantém uma lista de arestas (lista encadeada ou vetor)
Representação de grafos - Conjunto de arestas
• Mantém uma matriz v x v de booleanos
• Para cada aresta v - w no grafo: adj[v][w] = adj[w][v] = true
Representação de grafos - Lista adjacente
• Mantém um vetor de listas indexadas por vértices
Lista adjacente
Lista adjacente: Implementação

Lista adjacente usando tipo de dado Bag

Cria grafo vazio com V vértices

Adiciona aresta v-w (arestas


paralelas e loop são permitidos)

Retorna iterator para vértices


adjacentes a v
Representação de grafos - Na prática
• Use a representação por lista adjacente (É a representação mais utilizada atualmente)
• Algoritmos baseados na iteração sobre vértices adjacentes a v
• Grafos do mundo real tendem a ser esparsos

Esparso (E = 200) Denso (E = 1000)

Dois grafos (V = 50)


Grafos não-direcionados
• Introdução

• API graph

• Busca em profundidade (depth-first search)

• Busca em largura (breadth-first search)

Você também pode gostar