Você está na página 1de 45

DB3BCM0506-15SA Comunicação e Redes

Créditos (T-P-I): (3 - 0 - 4)
Recomendações:
BC0506-15- Processamento da Informação

Aula 10: Teoria dos Grafos, conceitos básicos e representação


Clique para editar o estilo do subtítulo mestre

Profa.Dra.Margarethe Born Steinberger-Elias


Centro de Engenharia, Modelagem e Ciências Sociais Aplicadas (CECS)

UFABC
1
Origem da teoria dos grafos
problema das 7 pontes de Königsberg

• Cidade de Königsberg, Prússia


• Ficava em ambos os lados
do Rio Pregel
• Tinha 2 ilhas centrais, com
as áreas conectadas por 7 pontes
• Foi feito um desafio ao matemático Euler
• Como fazer para passar por toda a cidade de modo que cada
ponte seja cruzada uma única vez?
• Exercício: Encontrem uma solução para este problema
Modelagem do Problema
• Euler demonstrou em 1735 que não existe nenhuma rota que
resolva o problema!
• Para tal, o primeiro passo foi simplificar o problema
• Caminhos dentro dos pedaços de terra não interessavam
• O que interessa são apenas as conexões entre os pedaços de
terra, isto é, as pontes
Grafos
• Chamamos a estrutura matemática resultante de grafo
• Os pontos são chamados de vértices
e as conexões de arestas
• A forma de um grafo influi apenas
na sua visualização, mas matemati-
camente é insignificante

• Exercício 1: Tente desenhar o grafo ao lado com outras formas. Seja


criativo!
Solução
• Se uma pessoa entra em pedaço de terra e sai dele, é preciso que
aquele grafo tenha um
número par de vértices
• Com exceção dos vértices onde
a caminhada começa e termina
• Olhando o grafo ao lado, por que é
impossível encontrar um caminho que
cruze cada ponte uma única vez?

Tente resolver o problema de dois modos


1) Construindo uma nova ponte
2) Derrubando uma ponte existente
Resolução dos Exercícios
Construindo uma nova ponte Derrubando uma das pontes
Caminho Euleriano
• Euler demonstrou que, para que exista um caminho que percorra
todos os vértices passando por cada aresta uma única vez:
• É necessário que ou nenhum ou 2 dos vértices tenham um
número ímpar de arestas
• Carl Hierholzer demonstrou posteriormente que esta condição é
também suficiente

• E assim começou o desenvolvimento da TEORIA DOS GRAFOS


Definições de Grafos
• Podemos definir um grafo por
um par ordenado, G = (V,A), onde:
- V é um conjunto de vértices
- A é um conjunto de arestas
• No exemplo ao lado, temos:
• V = {1, 2, 3, 4, 5, 6}
• A = { {1,2}, {1,5}, {2,5}, {2,3}, {3,4}, {4,5}, {5,6} }
• Este grafo é simples (não possui laços e possui no máximo uma
aresta entre cada par de vértices) e não-direcionado (as arestas não
possuem direção definida)
Propriedades dos Grafos

Pseudo-grafo Grafo direcionado Grafo ponderado


(ou multigrafo)

Grafo Grafo
Grafo simples não- direcionado não- ponderado
Outras Propriedades
Existem diversas outras propriedades de grafos:
 Ordem: Número de vértices
 Tamanho: Número de arestas
 Diâmetro: O maior dos menores caminhos entre cada par de
vértices
Exercício 2: Qual a ordem, tamanho e diâmetro dos grafos abaixo?
Mais Propriedades
 Conectividade dos vértices: O menor número de vértices cuja
retirada desconecta o grafo
 Conectividade das arestas: O menor número de arestas cuja retirada
desconecta o grafo
 E muitas outras...
Exercício 3: Qual a conectividade dos vértices e das arestas
nos grafos abaixo?
Exemplo: Jogo de Xadrez 3x3
• Grafos podem ser utilizados para
representar diversos problemas:
• Em um tabuleiro 3x3, você deseja
mapear todos os movimentos que
podem ser realizados por um bispo
que se move nas casas brancas
• O grafo à direita representa
os movimentos deste bispo
• Exercício 4: Desenhe um grafo
que represente todos os
movimentos da torre
Exemplo: Cubo e grafos planares
• Grafos podem ser utilizados para
representar objetos, como cubos
• Um grafo planar é aquele que pode
ser desenhado em um plano sem que
nenhuma aresta se cruze
• Exercício 5: É possível transformar o grafo do cubo em um
grafo planar? Se sim, redesenhe o grafo
• Exercício 6: E no caso do grafo que representa todos os
movimentos do bispo?
• Exercício 7: E para os movimentos da torre?
Exemplos de aplicações de grafos
em alguns problemas de Otimização

• Uma empresa que realiza entregas na Grande São Paulo possui um centro de
distribuição e um caminhão
Qual caminho o caminhão deve percorrer de modo a realizar todas as entregas com
a menor quilometragem?

• Você deseja implementar em um programa de GPS uma funcionalidade de cálculo


da melhor rota entre dois pontos, de modo a minimizar o tempo de viagem
Como calcular a rota com o menor tempo?

• Você está planejando uma rede de galerias subterrâneas para captação de águas da
chuva, evitando alagamentos
Como calcular o fluxo máximo de água que a rede de galerias é capaz de escoar?
1) Problema do Caixeiro Viajante
• Um problema clássico é o do
caixeiro viajante
• Imagine um caixeiro viajante
que deseja encontrar o caminho
mais curto que passe por todas
as cidades de seu país
• No exemplo ao lado, vemos o
caminho mais curto que passa
por diversas cidades da
Alemanha
Modelagem por grafos
• Uma maneira de resolver o problema é realizando sua
modelagem por grafo ponderado
• Cada cidade é representada por um nó
e cada estrada por uma aresta, com
peso igual ao comprimento da estrada
• Mas podemos também minimizar:
(1) Tempo gasto na viagem
(2) Custo total da viagem
• Exercício 8: Qual o caminho mais curto no grafo acima?
• Exercício 9: Como você alteraria o grafo que representa o
problema de modo a minimizar os fatores (1) e (2)?
Entrega de Encomendas
• Voltando ao nosso problema inicial:
• Uma empresa que realiza entregas na Grande São Paulo possui
um centro de distribuição e um caminhão
Qual caminho o caminhão deve percorrer de modo a realizar
todas as entregas com a menor quilometragem?
• Exercício 10: Como você
modelaria este problema
utilizando a abordagem de
grafos? Em particular, pense
em como você definiria os
nós e as arestas do grafo
Solução do Caixeiro Viajante
• O número de roteiros possíveis envolvendo n cidades é R(n)=(n-1)!,
um número que cresce rapidamente

• Os algoritmos exatos mais rápidos requerem um tempo que cresce


exponencialmente com o número de cidades
• Mas existem aproximações muito mais rápidas :-)
Tabela retirada de http://www.mat.ufrgs.br/~portosil/caixeiro.html
2) Problema da Menor Distância
• Suponha que você deseje implementar em um programa de GPS
uma funcionalidade de cálculo da melhor rota entre dois pontos,
de modo a minimizar o tempo de viagem
Como calcular a rota com o menor tempo?

• Exercício 11: Modele o problema


utilizando grafos e pense em
como você faria para encontrar
a menor distância no grafo
Modelagem por grafos
• Você pode modelar o problema atribuindo um nó a cada
cruzamento e uma aresta a cada trecho de rua
• Cada aresta deve receber um peso, que pode ser o tempo
para percorrê-lo
ou seu comprimento
• Exercício 12:
• Desenhe um grafo que
represente as ruas da
figura ao lado
Modelagem por grafos
• A partir do modelo da cidade, seu programa pode calcular a
melhor rota entre 2 pontos utilizando algoritmos bem conhecidos
para encontrar a menor distância entre 2 pontos

• Ao contrário do problema do caixeiro viajante, existem algoritmos


que encontram a distância entre 2 pontos de modo eficiente, isto
é, polinomial com relação ao número de nós e arestas do grafo.

• Notem que sem realizar uma modelagem do problema, não seria


possível escrever o programa que realiza a tarefa
3) Problema do Fluxo Máximo
• Você está planejando uma rede de galerias subterrâneas para
captação de águas da chuva, evitando alagamentos
Como calcular o fluxo máximo de água que a rede de galerias é
capaz de escoar?
• O gráfico ao lado representa 8
galerias pluviais e a direção de
fluxo da água
• Exercício 13: Qual o fluxo
máximo de água entre os
pontos s e t?
Problema das Tubulações
• O resultado é 5 e a solução está na figura abaixo
• Nem todas as tubulações estão
carregando sua capacidade
máxima de água
• Exercício 14:
• Agora suponha que a vazão
das tubulações não está sendo
suficiente. Um engenheiro decide
construir uma tubulação de p para t
com uma vazão 3.
 1) Em quanto a vazão do sistema irá aumentar?
 2) Dada esta nova tubulação, que tubulação você alteraria
para aumentar a vazão do sistema para 8?
Cenário mais realista
• O problema dos alagamentos e do escoamento de águas é um
pouco mais complicado.
• Em cada nó há uma quantidade a mais
de água sendo gerada devido à chuva
• Se as tubulações de água saindo
de um ponto não derem conta
de escoar a chuva naquele
ponto e a água que chega de outras
tubulações, haverá alagamento
• Exercício 15: Considerando que os números maiores à volta do
grafo são a chuva em um dado ponto. Esse sistema é capaz de levar
toda a água para t ou haverá pontos de alagamento?
Outras Aplicações
O problema do fluxo máximo tem diversas outras aplicações.
Exercício 16: Pense em como você modelaria
• 1) A capacidade de uma rede de transmissão de dados
• 2) A capacidade de tráfego de carros em um conjunto de ruas,
levando em conta os semáforos

Veja a seguir aplicações envolvendo ORGANIZAÇÃO DE DADOS


EM COMPUTADORES
Árvores e organização de dados em computadores

Árvores são um tipo de grafo muito utilizado na computação para


organizar os dados de um programa
 São definidos como grafos acíclicos e conectados
Os grafos abaixo são exemplos de árvores:
Estrutura de Dados
• Dados computacionais são armazenados nos nós da árvore
• No exemplo ao lado, cada nó armazena
um número, mas outros itens, como
textos, imagens e arquivos também
poderiam ser armazenados
• Qual a vantagem de armazenar
dados em árvores?
• Para dados hierárquicos, como sistemas de arquivos, esta é a
organização natural
• A manutenção de um conjunto ordenado de dados é também
eficiente
Armazenamento de Dados
Muitas vezes precisamos manter um conjunto ordenado de dados no
computador
 Principal vantagem é que a busca é muito mais eficiente
Imagine você realizando a busca por:
 Um nome em uma lista telefônica no qual os nomes estão fora
de ordem
 Por uma determinada casa em uma rua onde os números da
casa foram definidos de modo arbitrário
Árvore com Dados Ordenados
A árvore abaixo mantém uma lista de números organizados de
modo aleatório e ordenado, respectivamente

Exercício 17:
Tente descobrir qual a regra
utilizada para que os nós da árvore
se mantenham ordenados
Por que a busca torna-se eficiente?
• O computador consegue analisar um nó de cada vez e sempre
começa a busca pelo nó raiz.
• Suponha que desejemos obter o conteúdo
do nó denominado pelo número 14:
• Árvore não ordenada: necessário
verificar nó por nó
• Árvore ordenada: basta
verificar alguns nós
• Se a busca for por um número
não presente, como o 18, a
vantagem da ordenação é ainda maior
Aplicações do armazenamento
• Podemos utilizá-las sempre que queremos armazenar um
conjunto de dados de modo ordenado
• Obs: Árvores nem sempre são a estrutura de dados mais
eficiente em computação, mas este é um tópico para outras
disciplinas

• Exercício 18: para cada um dos exemplos abaixo, pense em dois


critérios de ordenação a utilizar
• Nomes de clientes de uma empresa
• Lista de produtos em estoque
• Lista de vôos em um aeroporto
Sistemas de Arquivos
• Sistemas operacionais modernos, como Windows e Linux, possuem
sistemas de arquivos
• Possuem uma organização hierárquica, com diretórios (pastas) que
podem conter arquivos e outros diretórios
Sistemas de Arquivos:
inserção e remoção de entradas
• Normalmente executamos nos sistemas de arquivos as operações
de busca, inserção e remoção de entradas
• Estas operações são eficientes em árvores, como podemos ver no
exemplo abaixo
Sistemas de Arquivos: mover
• Suponha agora que desejamos transferir um diretório, contendo
toda uma subárvore, para outra localização
• Como podemos ver, este processo é bastante simples e rápido :-)
Mais aplicações de
grafos: Redes
Metabólicas
Nossas células
funcionam através
da interação entre
diversas moléculas,
como enzimas,
proteínas e ácidos
nucleicos
A figura ao lado
mostra parte de
uma rede
metabólica
Redes Metabólicas
• Podemos modelar redes metabólicas por grafos, onde os nós
correspondem às moléculas e as arestas às interações
• Estudo destas redes é importante porque:
• Permite entender o funcionamento dos seres vivos
• Permite descobrir as causas e o tratamento de doenças como
câncer e diabetes
• Hoje existe um grande números de bancos de dados contendo
informações sobre genes, proteínas, enzimas e suas redes
metabólicas
• Ex:KEGG: Kyoto Encyclopedia of Genes and Genomes
http://www.genome.jp/kegg/kegg.html
Internet
Grafos são utilizados para modelar diversas situações:
- Canais de comunicação entre computadores de usuários, roteadores e
servidores web
- Estrutura lógica das páginas da Internet, com as relações entre os
sítios da Internet através de hyperlinks
- Hierarquia de servidores no caso de serviços, como o de descoberta
de endereços IP de servidores a partir de seus nomes
- (ex: www.ufabc.edu.br)
- Organização das páginas de um sítio da Internet
Internet
Representação de grafos: algoritmos de grafos
Algoritmos envolvendo grafos são comuns em computadores,
facilitando a resolução de importantes problemas como:
 Caixeiro viajante
 Menor distância entre 2 pontos
 Fluxo máximo
 Organização de dados em computadores
Representação de Grafos em computadores
• Mas como representar grafos em computadores?
• As duas maneiras mais utilizadas são:
• Lista de adjacências
• Matriz de adjacências
Lista de Adjacências
• Representamos um grafo por
um conjunto de listas, uma por nó X
• Cada lista contém todos os
nós com os quais o nó X se conecta

• Na figura ao lado, vemos a


representação de um grafo
• Notem que cada aresta
é representada 2 vezes,
uma para cada nó que ela
conecta
Matriz de Adjacências
O grafo é representado por uma matriz,
onde cada elemento (x,y) recebe o valor
1 se houver uma conexão entre os nós
x e y e 0 caso contrário
Na figura ao lado, vemos a representação
de um grafo com a matriz de adjacência
Notem que:
 Basta 1 bit para representar cada
aresta
 Se houverem poucas arestas, a matriz
será esparsa
Representação de Grafos
Podemos também representar grafos direcionados e que
contenham laços, como abaixo:

Neste caso, as representações contêm a aresta apenas em uma


direção, como a aresta de 3 para 5
Atividade 5 para dia 25/7 (individual):
fazer upload no TIDIA até 23:59 em ComRed2018.2

1. Releia todos os slides desta Aula e faça pelo menos dez dos 18
Exercícios
2. Pesquise na Internet o mapa do estado de São Paulo.
Selecione 10 cidades no mapa e crie um grafo que represente suas
conexões por estradas.
Atribua pesos às arestas utilizando um critério desejado (tempo
estimado de viagem, distância, etc.)
Finalmente, determine:
a) Qual é o diâmetro do grafo, isto é, a maior das menores distâncias
entre cada par de cidades?
obs: considere os pesos de cada aresta
Continua ...
b) Qual a conectividade dos vértices e das arestas?
3. Crie a matriz de adjacência e a lista de adjacência para os 2
grafos abaixo:

Fim

Você também pode gostar