Grafos Definições Preliminares Marco Antonio Montebello Júnior [email protected] Estrutura...

55
Grafos Definições Preliminares Marco Antonio Montebello Júnior [email protected] Estrutura de Dados

Transcript of Grafos Definições Preliminares Marco Antonio Montebello Júnior [email protected] Estrutura...

Page 1: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

GrafosDefinições Preliminares

Marco Antonio Montebello Jú[email protected]

Estrutura de Dados

Page 2: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Definições Preliminares

Grafos são estruturas de dados largamente utilizadas na Ciência da Computação, sendo fundamental seu estudo e dos algoritmos para sua manipulação.

Exemplos de aplicações: Modelagem de circuitos digitais; Representação de processos em um sistema paralelo ou

distribuído; Uma representação de lista encadeada Árvores de decisão Um diagrama E-R Um diagrama PERT Um Diagrama de Fluxo de Dados (DFD) Máquinas de estado finito Derivação de palavras em linguagens formais

Page 3: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Execução de instruções de um processador

Representação do fluxo de dados causado pela execução das instruções de um processador

R3

R4

OUT

IN

R2 R1

1

I6

1

I5

1

I8 3

I2 2

I2

1

I2

1

I1

2

I7 1

I9

2

I5 2

I1

4

I2

1

I4 1

I7

2

I6

Page 4: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Representação de um processador

FPU (32/64 bits)

CPU (32 bits)e

EscalonadorRAM

4Kbytes

Temporizadores

Canais

IME

Eventos

CPU

RAM

CanaisFPU

IME

Page 5: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Processamento Paralelo

Representação de processos em um sistema paralelo

Mestre

Escravo 1Escravo 1

Escravo 2Escravo 2

Escravo nEscravo n

Idle 1Idle 1

Idle 2Idle 2

Idle nIdle n

TestaCPUTestaCPU

TestaFPUTestaFPU

TestaCanalTestaCanal

TestaRAMTestaRAM

Page 6: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Estados de um SO

Os três estados que um processo pode assumir num sistema operacional [Tanenbaum, Andrew S.]

RunningRunning

I/OI/O

ReadyReady

1

23

4

Page 7: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Um diagrama E-R

nome endereço cidade estado

pessoa

possui

animal

Tipo_animal raçanome_animal

1

n

Page 8: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

PERT

Exemplo de um diagrama PERT

1(3,0)

2(4,0) 10(3,0)

3(6,0)

6(1,0) 7(2,0)

11(5,0)

12(0,5)

9(2,0)

8(2,0)

4(7,0)

5(3,0)

Page 9: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Um DFD do fluxo de informação de alto nível num escritório de licenciamento de automóveis para uma possível automação

Aplicação do processo

Requisiçãode

pagto

Requisiçãode

pagto

Requisiçãode

pagto

cliente

DETRAN Depto veículos autom.

Requisição do cliente

validaçãofatura

pagto

recebimento placa

Notificação de créditoCópia do registro

Page 10: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Análise do DFD

Após a análise do DFD anterior, foi identificada a tarefa “Pagamento do Processo”a ser realizada pelo software e decomposta em subtarefas como um Diagrama de Estrutura que é uma árvore

Pgto do processo

Compararpgto

com a fatura

Atualizaro arquivo de redimentos do estado

Imprimirrecebimento

do cliente

Imprimir formulário requisição

de placa

Page 11: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Exemplo

Um exemplo de árvore de decisão:if(a > b)

v[i] = f(i);else

if(b > c) v[i] = g(i);

Assuma que os valores das expressões booleanas “(a > b)” e “(b > c)” são independentes e que, na média, ”(a > b)” é executado 25% do tempo e “(b > c)” 25% do tempo. Se o trecho de programa acima é executado 10.000 vezes, quantas vezes se espera que as funções f e g sejam executadas?

a > b

v [ i ] = f [ i ] b > c

v [ i ] = g [ i ]

10.000 x 0,25= 2500 vezes7.500 vezes

7.500 x 0,25 = 1875 vezes

Page 12: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Um exemplo de máquina de estado finito

S0/0 S1/1

S2/0

10,1

0

1

0

Page 13: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Definição de um Grafo

Um grafo dirigido G é um par (N, A), onde N é um conjunto finito e A é uma relação binária entre os componentes de N. Assim: G = (N, A)

N = conjunto de nós (ou vértices) de G A = conjunto de arcos (ou arestas) de G

Em um grafo não-dirigido G = (N, A), o conjunto de arcos A consiste de um conjunto desordenado de pares de nós N.

Page 14: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Exemplos de GrafosDirigidos e Não-dirigidos

1 - Grafo dirigido G1(N, A): N = {1,2,3,4,5,6} A = {(1,2),(2,2),(2,4),(2,5),(4,1),

(4,5),(5,4),(6,3)}

2 - Grafo não-dirigido G2(N,A): N = {1,2,3,4,5,6} A = {(1,2),(1,5),(2,5),(3,6)}

Obs: Arcos não ordenados? (2,5) == (5,2)

1 2

6

3

54

1 2

6

3

54

G1

G2

Page 15: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Relação de Incidência:É definida entre nós e arcos

1 - Grafo dirigido G1(N, A): Os arcos (2,2); (2,4) e (2,5) são

incidentes do nó 2 (saem de 2). Os arcos (1,2)e(2,2) são incidentes

para o nó 2 (chegam em 2).

2 - Grafo não-dirigido G2(N,A): Os arcos incidentes no nó 2 são (1,2) e

(2,5). O arco (3,6) é incidente nos nós 3 e 6.

1 2

6

3

54

1 2

6

3

54

G1

G2

Um arco é incidente do nó x quando ele sai de x Um arco é incidente para o nó x quando ele chega em x

Page 16: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Relação de Adjacência:Dois nós são adjacentes se existe um arco interligando-os

1 - Grafo dirigido G1(N, A): O nó 2 é adjacente ao nó 1. O nó 1 não é adjacente ao 2, pois o

arco (2,1) ? ao grafo G1. O nó 5 é adjacente ao nó 2.

2 - Grafo não-dirigido G2(N,A): Relação de adjacência é simétrica. O nó 2 é adjacente ao nó 1. O nó 1 é adjacente ao nó 2.

1 2

6

3

54

1 2

6

3

54

G1

G2

Page 17: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Grau de um nó: É medido pelo número de arcos incidentes

1 - Grafo dirigido G1(N, A): O nó 1 possui grau 2 (1 + 1). O nó 2 possui grau 5 (3 + 2).

2 - Grafo não-dirigido G2(N,A): O nó 2 possui grau 4. O nó 6 possui grau 2. O nó 4 possui grau 0.

1 2

6

3

54

1 2

6

3

54

G1

G2

Grau = Grau Saída + Grau Entrada

Page 18: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Caminho

Um caminho c de um nó u para um nó u’ em um grafo G = (N, A) é a seqüência de nós <n0, n1, n2, ... nk >, onde u = n0 e u’ = nk, e (ni-1, ni) A para i = 1, 2, ..., k.

O tamanho de c é o número de arcos existente em c. Um caminho c é composto pelos nós n0, n1, n2,... nk e

pelos arcos (n0, n1), (n1, n2), ..., (nk-1, nk). Obs.: O 2o. nó de cada arco deve coincidir com o 1o. nó do arco

seguinte.

1 2

6

3

54

G1

Quais os caminhos de 1 para 4? c1 = <1, 2, 5, 4> e c2 = <1, 2, 4>

Quais os tamanhos de c1 e c2? c1 = 3 e c2 = 2

Quais são os arcos de c1 e c2? <(1,2), (2,5), (5,4)>, <(1,2), (2,4)>

Page 19: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Ciclo

Um grafo G = (N, A) possui um ciclo se existir um caminho c = <n0, n1, ... nk >, onde n0 = nk. Se não existir, o grafo é dito acíclico.

O caminho é simples se <n0, n1, ... nk > são diferentes

1 2

6

3

54

1 2

6

3

54

G1

G2

1 - Grafo dirigido G1(N,A): Ciclos de G1:

<1,2,4,1>; <2,4,1,2>; <4,1,2,4>; <1,2,4,5,4,1> (não simples) e

<2,2> (laço).

2 - Grafo não-dirigido G2(N,A): Ciclos de G2:

<1,2,5,1>; <2,5,1,2>; <5,1,2,5>

Page 20: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Grafos conectados

Grafos conectados: Um grafo não-dirigido G = (N, A) é conectado se cada par de nós é conectado por um caminho.

Um grafo não-dirigido é conectado se possuir exatamente um componente conectado, ou seja, se cada nó é alcançável a partir de cada um dos outros nós. Logo, o grafo G2 não é conectado.

1 2

6

3

54

G2

1 - Grafo não-dirigido G2(N,A) Possui três componentes

conectados: {1, 2, 5}, {3, 6} e {4}

Page 21: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Grafos fortemente conectados

Um grafo dirigido G = (N, A) é fortemente conectado se cada dois nós são alcançáveis (um a partir do outro).

Todos os pares em {1, 2, 4, 5} são mutuamente alcançáveis. Os nós {3, 6} não formam um componente fortemente conectado, pois não é possível chegar em 6 a partir de 3.

Um grafo dirigido é fortemente conectado se possuir exatamente um componente fortemente conectado. Logo, o grafo G1 não é fortemente conectado.

1 - Grafo dirigido G1(N,A) Componentes fortemente conectados:

{1, 2, 4, 5}

1 2

6

3

54

G1

Page 22: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Subgrafo

Um grafo G’=(N’, A’) é um subgrafo de G=(N,A) se N’ em N e A’ em A. Dado um conjunto N’ em N, o subgrafo de G induzido por N’ é o grafo G’ = (N’, A’).

Exemplo: O subgrafo G3 é induzido pelo conjunto de nós {1, 2, 3, 6} do grafo G1, possuindo o conjunto de arcos {(1,2), (2,2), (6,3)}.

G1 G3

1 2

6

3

54

1 2

6

3

Page 23: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Grafo parcial Um grafo parcial G’ de G, é um grafo no qual

N(G’)=N(G) e A(G’)A(G), ou seja, G’ possui os mesmos nós de G, porém com um conjunto reduzido de arcos.

O grafo G4 é um grafo parcial deG1: G4(N, A’) G1(N, A) N(G1) = N(G4) = {1,2,3,4,5,6} A(G1) A’(G4) = {(1,2),(2,4),(4,1),(4,5),(6,3)}

G1 G4

1 2

6

3

54

1 2

6

3

54

Page 24: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Conexo

Um grafo é dito conexo se houver um caminho entre quaisquer dois vértices

a1 a4

1 a5 3

2

1 a5 3

a2 a1 2

a3

1 a5 3 a6 4 5

a2 a1 2

a3

Conexo Conexo

Não é conexo

Page 25: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Grafos isomorfos

São aqueles cujas estruturas são iguais a menos de um novo rotulamento. Nesse caso os grafos têm os mesmos vértices, as mesmas arestas e a mesma função de associação de arestas e seus extremos

Será que Grafo a, b e c são isomorfos?3 2 2 3

1 4 1 4 c d

a e2 b

e1

a2

a1

a1 a2

Grafo a Grafo b Grafo c

f1: 1--> a

2 --> c

3 --> b

4 --> d

f2: a1 --> e2

a2 --> e1

Page 26: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Grafo Planar Um grafo é planar quando este pode ser desenhado

(em uma folha de papel, isto é, em um plano) de forma que suas arestas se interceptem apenas em vértices

No século XVIII Leonhard Euler - Matemático suíço (pronuncia-se “óiler”) - observou que um grafo simples, conexo e planar (sem interseção de arestas) divide o plano em um número de regiões totalmente fechadas e uma região infinita exterior. Daí observou uma relação entre o número de n de vértices, o número a de arestas e o número r de regiões.

É a fórmula de Euler: n - a + r = 2

4 - 6 + 4 = 2

Page 27: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Tipos especiais de grafos Redes

Possuem 2 nós especiais: Fonte (source) - origem de arcos Destino (sink) - destino de arcos

Florestas São grafos não-cíclicos e Não-direcionados.

Árvores São grafos não-cíclicos, Não-direcionados e conectados.

1

2

6

3 5

4

6

31

2

5

4

1

2

5

4

Page 28: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Tipos especiais de grafos

Grafos com valores Quando os nós e/ou os arcos possuem valores.

Rio Vit

Spa

Sal

Rec

Nat

13011325

1210

890

580

1710

2680

450

R3

R4

OUT

IN

R2 R1

1

I6

1

I5

1

I8 3

I2 2

I2

1

I2

1

I1

2

I7 1

I9

2

I5 2

I1

4

I2

1

I4 1

I7

2

I6 Fluxo de instruções em

um microprocessador.

Distâncias entre localidades.

Page 29: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

GrafosFormas de Representação

Marco Antonio Montebello Jú[email protected]

Estrutura de Dados

Page 30: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Formas de representação

Existem basicamente duas formas para representar um grafo G = (N, A): Por intermédio de uma Lista de Adjacências

É a mais utilizada, pois fornece uma representação mais compacta de grafos esparsos ( |A| << |N|2 )

Por intermédio de uma Matriz de Adjacências Utilizada quando o grafo é denso ( |A| |N|2 ), ou quando

é necessário descobrir rapidamente se existe um arco conectando dois nós pré-definidos.

Page 31: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Formas de representaçãoLista de adjacência Lista de adjacências para um grafo G = (N, A)

Consiste em um vetor de |N| listas encadeadas, uma para cada elemento de N.

Para cada u V , a lista de adjacências Adj[u] contém todos os

nós v para os quais existe um arco (u, v) A.

Primeiro caso: Grafo Não-Direcionado

1 2

5

3

4

1

2

5

3

4

5

5

1

4

5

2

1

4

2

2

3

2

3

4 /

/

/

/

/

Implementação mista (vetor e lista ligada)

Page 32: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Formas de representaçãoLista de adjacência

Segundo caso: Grafo Direcionado

1

2

5

3

4

4

5

2

5

4

6

2

/

/

/

/

/

6 6 /

1 2

4 5

3

6

Implementação mista (vetor e lista ligada)

Page 33: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Formas de representação

0 1

3 2

V0

V1

V2

V3

A(0,1) A(0,2)

A(1,2) A(1,3)

A(3,0) A(3,1) A(3,2)

Variável externa List

Implementação somente com Listas Ligadas

Page 34: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Formas de representação Vejamos uma representação muito interessante presente no livro texto. É

utilizado nós de cabeçalho (nós de grafo) e nós de lista (lista de adjacência). Ver páginas 699, 700, 701 e 702.

EB C DA

Grafo

<A,B> <A,C> <A,D> <A,E>

<D,B>

<C,E>

A

CE

D

Barcptr info nextnode

ndptr nextarc

Nó de cabecalho

Nó de lista

Page 35: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Formas de representação

De forma geral os nós de cabeçalho e os de lista têm diferentes formatos, necessitando serem representados por duas estruturas distintas, ou seja, são tipos de nós diferentes

Para facilitar o entendimento de uma possível implementação dinâmica, vamos supor que os nós de cabeçalho e de lista têm o mesmo formatostruct nodetype{

int info;struct nodetype *point;struct nodetype *next;

};struct nodetype *nodeptr;

Page 36: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Formas de representaçãoMatriz de adjacência

Matriz de adjacências para um grafo G = (N, A) Assume-se que os nós são numerados da seguinte forma: 1, 2,

3, ..., |N|; A matriz de adjacências Adj para um grafo G = (N, A) possui

dimensões |N| x |N| e elementos aij , de forma que:

1 se (i, j) A

ai,j =

0 caso contrário{

Page 37: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Formas de representaçãoMatriz de adjacência Primeiro caso: Grafo Não-Direcionado Para os grafos não-direcionados, os elementos

da matriz são simétricos: Adj[i][j] = Adj[j][i]. Assim, com fins de economia de memória, pode-se armazenar apenas a matriz triangular superior ou inferior.

1 2

5

3

4

1

2

5

3

4

1 2 53 4

0 1 10 0

1 0 11 1

0 1 00 1

0 1 11 0

1 1 00 1Tipos

Adj = vetor[5] [5] de inteiros

Page 38: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Formas de representaçãoMatriz de adjacência Segundo caso: Grafo Direcionado Na matriz de adjacências para grafos

direcionados, as linhas representam os nós origem e as colunas, os nós destino.

Tipos

Adj = vetor[6] [6] de inteiros

1

2

5

3

4

1 2 53 4

0 1 0 1

0 0 0 0

0 0 0 0

0 1 0 0

0 0 0 1

1 2

4 5

3

6

6

6 0 0

0

1

1

0

0

00 0

0

0

1

0

0

1

Page 39: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Formas de representaçãoMatriz de incidência Outra abordagem: Matriz de Incidência Primeiro caso: Grafo Não-Direcionado G = (N, A)

A matriz de incidência Inc para um grafo G = (N, A) possui dimensões |N| x |A| e elementos bij , de forma que:

1, se o arco j é incidente em i (j incide no nó i)

bij =

0, caso contrário

1 2

5

3

4

1

2

5

3

4

1 2 53 4

1 1 0 0

1 0 1 1

0 0 0 0

0 0 0 1

0 1

0

1

1

0

01 0

6 7

0

0

0

1

1

0

0

1

1

0

1

23

4

5

6 7

{

Page 40: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Segundo caso: Grafo Direcionado G = (N, A) A matriz de incidência Inc para um grafo G = (N, A)

possui dimensões |N| x |A| e elementos bij , de forma que:

-1, se o arco j é incidente de i (j sai do nó i)

bij = 1, se o arco j é incidente para i (j chega no nó i)

0, se o nó i não participa do arco{

1 2

4 5

3

6

1

2

5

3

4

1 2 53 4

-1 -1 0 0

1 0 1 -1

0 0 0 0

0 1 -1 0

0

0

0

1

6 7

0

0

-1

0

0

0

-1

0

0 0 -10 1 1 0

6 0 0 00 0 0 1

8

0

0

0

0

0

0Tipos

Inc = vetor[6][8] de inteiros

Formas de representaçãoMatriz de incidência

Page 41: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Formas de representação

A matriz de adjacência é freqüentemente inadequada porque requer o conhecimento prévio do número de nós

Mesmo que a matriz de adjacência seja esparsa, deve-se reservar espaço para todo possível arco entre dois nós. Se existir n nós, precisará de n2 alocações

Lista ligada é interessante porque só aloca o espaço necessário, porém, a implementação é mais complexa porque não dá para prever o número de nós adjacentes a determinado nó, ou seja, o número de ponteiros é bastante variável

Na representação de matriz está implícito a possibilidade de percorrer uma linha ou coluna

Percorrer em linha é identificar todos os arcos emanando de determinado nó. Neste caso, a implementação ligada é mais eficiente

Em coluna é identificar todos os arcos que terminam em determinado nó: vantagem para a matriz, já que não existe um método simples correspondente na implementação ligada

Page 42: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

GrafosMétodos de Passeio

Marco Antonio Montebello Jú[email protected]

Estrutura de Dados

Page 43: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Métodos de passeio

O objetivo dos métodos de passeio é explorar um grafo, de forma sistemática, obtendo informações sobre sua estrutura.

Uma questão interessante diz respeito ao ponto de início do passeio, pois não existe um referencial a ser considerado, como por exemplo, a raiz nas árvores.

Outra questão é relacionada às repetições nas visitas. Como garantir que um nó já foi visitado? Solução: colocar marcas nos nós já visitados.

A seqüência de nós visitados depende da escolha dos nós adjacentes. Para um determinado grafo podem existir diversas seqüências de passeio.

Page 44: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Métodos de passeio

Existem dois algoritmos principais para passeio em um grafo G = (N, A): Largura (Breadth-first search)

Todos os nós localizados a uma distância k de um nó s, escolhido arbitrariamente, são percorridos antes dos nós localizados a uma distância k+1 de s.

Profundidade (Depth-first search) Para um nó s, escolhido arbitrariamente, um de seus nós

adjacentes é visitado, e para cada nó visitado, um dos nós adjacente a ele é visitado, até que se encontre um nó sem adjacentes. Nesse instante ocorre um “retorno” com o objetivo de visitar os nós restantes adjacentes à s.

Page 45: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Métodos de passeio

Largura (Breadth-first search)

Um nó, escolhido arbitrariamente, é visitado, marcado e colocado em uma fila Q;

Enquanto a fila Q não estiver vazia: Retira-se um nó N da fila Q; Para cada nó M (não marcado) adjacente à N:

Visita-se o nó M; Coloca-se o nó M na fila Q; Marca-se o nó M.

Page 46: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Métodos de passeio

Rotina Largura (O: nó)Variáveis N, M : nó Q : FilaInício Visita (O) Marcanó (O) InsereFila (Q, O) Enquanto Não FilaVazia (Q) Faça N = RetiraFila (Q) Para Cada M adjacente a N Faça Se Não nóMarcado (M) Então Visita (M) InsereFila (Q, M) Marcanó (M) Fim-Se Fim-Para Fim-EnquantoFim

Page 47: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Métodos de passeio

Profundidade (Depth-first search)

Um nó, escolhido arbitrariamente, é visitado, marcado e colocado em uma pilha S;

Enquanto a pilha S não estiver vazia: Retira-se um nó N da pilha S; Para cada nó M (não marcado) adjacente à N:

Visita-se o nó M; Coloca-se o nó N na pilha S; Marca-se o nó M; Faz-se N M

Page 48: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Métodos de passeio

Rotina Profundidade (O: nó)Variáveis N, M : nó; S : PilhaInício Visita (O) Marcanó (O) Push (S, O) Enquanto Não PilhaVazia (S) Faça N = Pop (S) Para Cada M adjacente a N Faça Se Não nóMarcado (M) Então Visita (M) Push (S, N) Marcanó (M) N M Fim-Se Fim-Para Fim-EnquantoFim.

Page 49: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Métodos de passeioVersão recursiva

Rotina ProfundidadeRec (N: nó)/*VERSÃO RECURSIVA*/

Variáveis M : nó

Início Visita (N) Marcanó (N) Para Cada M adjacente a N Faça Se Não nóMarcado (M) Então ProfundidadeRec (M) Fim-Se Fim-ParaFim.

Page 50: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

GrafosAplicações

Marco Antonio Montebello Jú[email protected]

Estrutura de Dados

Page 51: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Aplicações

Grafos com valores: Matriz de Adjacências Atribuir à posição Adj[i][j], o valor do arco que sai do

nó i e chega no nó j. Exemplo:

1

2

3

1 2 3

0 4 10

6 0 7

2 0 0

1 2

3

10

2

7

6

4

Matriz Adj

Page 52: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Aplicações

Grafos com valores: Matriz de Incidência Para um arco k, do nó i para o nó j, com valor V: Inc[i][k] = -V e Inc[j][k] = V Exemplo:

1 2

3

10

2

7

6

4

1

2

3

1 2 3

-4 -10 6

4 0 -6

0 10 0

4

0

-7

7

5

2

0

-2

Matriz Inc

Page 53: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Aplicações

Grafos com valores: Lista de Adjacência Adicionar um terceiro campo, do tipo adequado, a

cada nó da lista Exemplo:

1 2

3

10

2

7

6

4 1

2

3

4

6

2

2

1

1 /

10

7

3

3

/

/

Page 54: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Aplicações

Caminhos Máximo / Mínimo: Utilizando um grafo para representar estradas que unem

cidades, sendo os nós as cidades e os arcos as distâncias entre as cidades, pergunta-se:

Quais os caminhos (se existir algum) que ligam Spa à Rec?

Existindo mais de um caminho, qual o mais curto?

Rio Vit

Spa

Sal

Rec

Nat

407

5

10

30

10

5

15

<(Spa, Sal), (Sal, Nat), (Nat, Rec)> = 30

<(Spa, Rio), (Rio, Vit), (Vit, Rec)>= 45

<(Spa, Rio), (Rio, Nat), (Nat, Rec)> = 52

<(Spa, Rec)> = 40

Page 55: Grafos Definições Preliminares Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Estrutura de Dados.

Aplicações

Caminhos Máximo / Mínimo: No grafo abaixo, qual o caminho mais curto do

nó 1 para os demais nós do grafo ?

Quantos caminhos existem do nó 1 para o nó 2 ? Resposta: 3 caminhos

1 2

3 4

15

15

505

63

10

45

35

30201020

p/ o nó 2: <(1,3),(3,4),(4,2)> = 45

p/ o nó 3: <(1,3)> = 10

p/ o nó 4: <(1,3),(3,4)> = 25

p/ o nó 5: <(1,5)> = 45

p/ o nó 6: não há caminho