• Nenhum resultado encontrado

Buscas em grafos: profundidade, largura, generalizada

N/A
N/A
Protected

Academic year: 2022

Share "Buscas em grafos: profundidade, largura, generalizada"

Copied!
61
0
0

Texto

(1)

MAC328 Algoritmos em grafos (19/4/2005)

1

Buscas em grafos: profundidade, largura, generalizada

(2)

MAC328 Algoritmos em grafos (19/4/2005)

1

Buscas em grafos: profundidade, largura, generalizada

Recaptulação:

1. Busca em profundidade

(3)

MAC328 Algoritmos em grafos (19/4/2005)

1

Buscas em grafos: profundidade, largura, generalizada

Recaptulação:

1. Busca em profundidade

2. Busca em largura

(4)

MAC328 Algoritmos em grafos (19/4/2005)

1

Buscas em grafos: profundidade, largura, generalizada

Recaptulação:

1. Busca em profundidade

2. Busca em largura

Diferença crucial:

(5)

MAC328 Algoritmos em grafos (19/4/2005)

1

Buscas em grafos: profundidade, largura, generalizada

Recaptulação:

1. Busca em profundidade

2. Busca em largura

Diferença crucial: pilhas × filas

(6)

MAC328 Algoritmos em grafos (19/4/2005)

1

Buscas em grafos: profundidade, largura, generalizada

Recaptulação:

1. Busca em profundidade

2. Busca em largura

Diferença crucial: pilhas × filas

B Busca generalizada: políticas generalizadas de processamento de arestas

(7)

MAC328 Algoritmos em grafos (19/4/2005)

1

Buscas em grafos: profundidade, largura, generalizada

Recaptulação:

1. Busca em profundidade

2. Busca em largura

Diferença crucial: pilhas × filas

B Busca generalizada: políticas generalizadas de processamento de arestas (fringes)

(8)

MAC328 Algoritmos em grafos (19/4/2005)

2

Programa 18.10

void pfs(Graph G, Edge e) { link t; int v, w;

GQput(e); pre[e.w] = cnt++;

while (!GQempty()) {

e = GQget(); w = e.w; st[w] = e.v;

for (t = G->adj[w]; t != NULL; t = t->next) if (pre[v = t->v] == -1)

{ GQput(EDGE(w, v)); pre[v] = cnt++; } else if (st[v] == -1)

GQupdate(EDGE(w, v));

} }

(9)

MAC328 Algoritmos em grafos (19/4/2005)

3

Programa 18.11

#include <stdlib.h>

#include "RQ.h"

static Item *s;

static int N;

void RQinit(int maxN)

{ s = malloc(maxN*sizeof(Item)); N = 0; } int RQempty()

{ return N == 0; } void RQput(Item x)

{ s[N++] = x; }

void RQupdate(Item x) { }

(10)

MAC328 Algoritmos em grafos (19/4/2005)

4

Programa 18.11

Item RQget() { Item t;

int i = N*(rand()/(RAND_MAX + 1.0));

t = s[i]; s[i] = s[N-1]; s[N-1] = t;

return s[--N];

}

(11)

MAC328 Algoritmos em grafos (19/4/2005)

5

Um grafo geométrico

(12)

MAC328 Algoritmos em grafos (19/4/2005)

6

Um grafo geométrico

(13)

MAC328 Algoritmos em grafos (19/4/2005)

7

Um grafo geométrico

(14)

MAC328 Algoritmos em grafos (19/4/2005)

8

Um grafo geométrico

(15)

MAC328 Algoritmos em grafos (19/4/2005)

9

Um grafo geométrico

(16)

MAC328 Algoritmos em grafos (19/4/2005)

10

Um grafo geométrico

(17)

MAC328 Algoritmos em grafos (19/4/2005)

11

Um grafo geométrico

(18)

MAC328 Algoritmos em grafos (19/4/2005)

12

Um grafo geométrico

(19)

MAC328 Algoritmos em grafos (19/4/2005)

13

Um grafo geométrico

(20)

MAC328 Algoritmos em grafos (19/4/2005)

14

Um grafo geométrico

(21)

MAC328 Algoritmos em grafos (19/4/2005)

15

Um grafo geométrico

(22)

MAC328 Algoritmos em grafos (19/4/2005)

16

Um grafo geométrico

(23)

MAC328 Algoritmos em grafos (19/4/2005)

17

Um grafo geométrico

(24)

MAC328 Algoritmos em grafos (19/4/2005)

18

Um grafo geométrico

(25)

MAC328 Algoritmos em grafos (19/4/2005)

19

Um grafo geométrico

(26)

MAC328 Algoritmos em grafos (19/4/2005)

20

Grafos Dirigidos e Grafos Dirigidos Acíclicos (DAGs)

Sedgewick: Capítulo 19

(27)

MAC328 Algoritmos em grafos (19/4/2005)

21

Grafos, vários sabores

(28)

MAC328 Algoritmos em grafos (19/4/2005)

21

Grafos, vários sabores

Grafos:

1. G = (V, E), onde E ⊂ V2

(29)

MAC328 Algoritmos em grafos (19/4/2005)

21

Grafos, vários sabores

Grafos:

1. G = (V, E), onde E ⊂ V2 [quase sempre, V finito]

(30)

MAC328 Algoritmos em grafos (19/4/2005)

21

Grafos, vários sabores

Grafos:

1. G = (V, E), onde E ⊂ V2 [quase sempre, V finito]

2. Às vezes, consideramos multigrafos: arestas múltiplas e laços são permitidos.

(31)

MAC328 Algoritmos em grafos (19/4/2005)

22

Grafos dirigidos, vários sabores

(32)

MAC328 Algoritmos em grafos (19/4/2005)

22

Grafos dirigidos, vários sabores

Grafos dirigidos:

1. G = (V, E), onde E ⊂ V × V

(33)

MAC328 Algoritmos em grafos (19/4/2005)

22

Grafos dirigidos, vários sabores

Grafos dirigidos:

1. G = (V, E), onde E ⊂ V × V

2. Às vezes, consideramos multigrafos dirigidos: arcos múltiplos e laços são permitidos (arco = “aresta dirigida” ou “orientada”).

(34)

MAC328 Algoritmos em grafos (19/4/2005)

22

Grafos dirigidos, vários sabores

Grafos dirigidos:

1. G = (V, E), onde E ⊂ V × V

2. Às vezes, consideramos multigrafos dirigidos: arcos múltiplos e laços são permitidos (arco = “aresta dirigida” ou “orientada”).

Exemplo: Figura 19.1

(35)

MAC328 Algoritmos em grafos (19/4/2005)

23

Algumas definições

(36)

MAC328 Algoritmos em grafos (19/4/2005)

23

Algumas definições

1. Passeio dirigido, trilha dirigida, caminho dirigido, acessibilidade

(37)

MAC328 Algoritmos em grafos (19/4/2005)

23

Algumas definições

1. Passeio dirigido, trilha dirigida, caminho dirigido, acessibilidade

2. Passeio dirigido fechado, passeio dirigido fechado não-trivial (pelo me- nos um arco), circuito dirigido

(38)

MAC328 Algoritmos em grafos (19/4/2005)

23

Algumas definições

1. Passeio dirigido, trilha dirigida, caminho dirigido, acessibilidade

2. Passeio dirigido fechado, passeio dirigido fechado não-trivial (pelo me- nos um arco), circuito dirigido

3. Grafos dirigidos acíclicos (DAGs) = grafos dirigidos sem passeios diri- gidos fechados não-triviais

(39)

MAC328 Algoritmos em grafos (19/4/2005)

23

Algumas definições

1. Passeio dirigido, trilha dirigida, caminho dirigido, acessibilidade

2. Passeio dirigido fechado, passeio dirigido fechado não-trivial (pelo me- nos um arco), circuito dirigido

3. Grafos dirigidos acíclicos (DAGs) = grafos dirigidos sem passeios diri- gidos fechados não-triviais

B Exemplo básico: relação de precedência B Exemplo: Figura 19.6/19.7

(40)

MAC328 Algoritmos em grafos (19/4/2005)

24

Algumas definições (cont.)

(41)

MAC328 Algoritmos em grafos (19/4/2005)

24

Algumas definições (cont.)

1. Grafos dirigidos fortemente conexos

(42)

MAC328 Algoritmos em grafos (19/4/2005)

24

Algumas definições (cont.)

1. Grafos dirigidos fortemente conexos

2. Relação de equivalência: x ↔ y (acessibilidade mútua, conexidade forte)

(43)

MAC328 Algoritmos em grafos (19/4/2005)

24

Algumas definições (cont.)

1. Grafos dirigidos fortemente conexos

2. Relação de equivalência: x ↔ y (acessibilidade mútua, conexidade forte)

3. Classes de equivalência: Cx (x ∈ V (G))

(44)

MAC328 Algoritmos em grafos (19/4/2005)

24

Algumas definições (cont.)

1. Grafos dirigidos fortemente conexos

2. Relação de equivalência: x ↔ y (acessibilidade mútua, conexidade forte)

3. Classes de equivalência: Cx (x ∈ V (G))

4. Componentes fortemente conexas: G[Cx] (x ∈ V (G))

(45)

MAC328 Algoritmos em grafos (19/4/2005)

24

Algumas definições (cont.)

1. Grafos dirigidos fortemente conexos

2. Relação de equivalência: x ↔ y (acessibilidade mútua, conexidade forte)

3. Classes de equivalência: Cx (x ∈ V (G))

4. Componentes fortemente conexas: G[Cx] (x ∈ V (G)) 5. Não necessariamente G = Sx∈V (G) G[Cx]

(46)

MAC328 Algoritmos em grafos (19/4/2005)

25

A estrutura de um grafo dirigido

(47)

MAC328 Algoritmos em grafos (19/4/2005)

25

A estrutura de um grafo dirigido

1. O ‘núcleo’ K(G) de um grafo dirigido G (“condensação de G”)

(48)

MAC328 Algoritmos em grafos (19/4/2005)

25

A estrutura de um grafo dirigido

1. O ‘núcleo’ K(G) de um grafo dirigido G (“condensação de G”) 2. K(G) é um DAG; exemplo: Figura 19.1/19.8

(49)

MAC328 Algoritmos em grafos (19/4/2005)

25

A estrutura de um grafo dirigido

1. O ‘núcleo’ K(G) de um grafo dirigido G (“condensação de G”) 2. K(G) é um DAG; exemplo: Figura 19.1/19.8

3. Cortes dirigidos: para S ⊂ V (G), definimos ∂+(S) = {(x, y) ∈ E(G) : x ∈ S e y ∈ V (G) \ S}. Ademais, ∂(S) = ∂+(V (G) \ S)

(50)

MAC328 Algoritmos em grafos (19/4/2005)

25

A estrutura de um grafo dirigido

1. O ‘núcleo’ K(G) de um grafo dirigido G (“condensação de G”) 2. K(G) é um DAG; exemplo: Figura 19.1/19.8

3. Cortes dirigidos: para S ⊂ V (G), definimos ∂+(S) = {(x, y) ∈ E(G) : x ∈ S e y ∈ V (G) \ S}. Ademais, ∂(S) = ∂+(V (G) \ S) 4. Grau de entrada, grau de saída; fontes e sorvedouros

(51)

MAC328 Algoritmos em grafos (19/4/2005)

25

A estrutura de um grafo dirigido

1. O ‘núcleo’ K(G) de um grafo dirigido G (“condensação de G”) 2. K(G) é um DAG; exemplo: Figura 19.1/19.8

3. Cortes dirigidos: para S ⊂ V (G), definimos ∂+(S) = {(x, y) ∈ E(G) : x ∈ S e y ∈ V (G) \ S}. Ademais, ∂(S) = ∂+(V (G) \ S) 4. Grau de entrada, grau de saída; fontes e sorvedouros

Figura 19.7

(52)

MAC328 Algoritmos em grafos (19/4/2005)

26

Vários sabores de conexidade

(53)

MAC328 Algoritmos em grafos (19/4/2005)

26

Vários sabores de conexidade

1. Conexidade: grafos não-dirigidos

(54)

MAC328 Algoritmos em grafos (19/4/2005)

26

Vários sabores de conexidade

1. Conexidade: grafos não-dirigidos

2. Acessibilidade: grafos dirigidos, relação não simétrica

(55)

MAC328 Algoritmos em grafos (19/4/2005)

26

Vários sabores de conexidade

1. Conexidade: grafos não-dirigidos

2. Acessibilidade: grafos dirigidos, relação não simétrica 3. Conexidade forte

(56)

MAC328 Algoritmos em grafos (19/4/2005)

27

Representações de grafos dirigidos

(57)

MAC328 Algoritmos em grafos (19/4/2005)

27

Representações de grafos dirigidos

1. Knuth: Stanford GraphBase . . .

(58)

MAC328 Algoritmos em grafos (19/4/2005)

27

Representações de grafos dirigidos

1. Knuth: Stanford GraphBase . . .

2. Sedgewick: matrizes de adjacência e listas de adjacência

(59)

MAC328 Algoritmos em grafos (19/4/2005)

27

Representações de grafos dirigidos

1. Knuth: Stanford GraphBase . . .

2. Sedgewick: matrizes de adjacência e listas de adjacência

B Peculiaridade: colocamos laços em todos os vértices (pura conveniência)

(60)

MAC328 Algoritmos em grafos (19/4/2005)

27

Representações de grafos dirigidos

1. Knuth: Stanford GraphBase . . .

2. Sedgewick: matrizes de adjacência e listas de adjacência

B Peculiaridade: colocamos laços em todos os vértices (pura conveniência) B Assim: 1s na diagonal das mz de adj. e ao menos uma célula em

cada lista de adj.

(61)

MAC328 Algoritmos em grafos (19/4/2005)

28

Programa 19.1

Graph GRAPHreverse(Graph G) { int v; link t;

Graph R = GRAPHinit(G->V);

for (v = 0; v < G->V; v++)

for (t = G->adj[v]; t != NULL; t = t->next) GRAPHinsertE(R, EDGE(t->v, v));

return R;

}

Referências

Documentos relacionados

Outro elemento básico e relevante na teoria de grafos que será explorado no minicurso, são os multigrafos, que são grafos nos quais são permitidos dois ou mais arcos associados a

Sua mandíbula está cerrada, e ele aperta meu braço com força suficiente para deixar uma contusão, embora tudo em seus olhos me diga que ele não gosta de fazer isso... um

Táxis para pessoas com mobilidade reduzida 1- A Câmara Municipal atribuirá licenças de táxis para o transporte de pessoas com mobilidade reduzida, desde que

existir em um cosmo sem objetivo, ter surgido por acaso, é ainda mais significativo do que ter surgido como resultado de um plano misterioso: afi- nal, se nossa existência é

Caso sejam detectados fundos cujas carteiras estão em desacordo com os parâmetros de controle tributário estabelecidos pela IN RFB º 1.585/2015 (a saber, o prazo

Epicondilalgia é o termo designado para referir a dor (algia) no cotovelo localizada na região topográfica dos epicôndilos do úmero, mais comumente na região do epicôndilo

Arte africana : estudo sobre as crenças e preferências de interessados / Bernardo Amado Batista de Figueiredo ; orientadora: Hélène Bertrand.. Objetos