@let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf ·...

97

Transcript of @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf ·...

Page 1: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Melhores momentos

AULA 1

Page 2: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Digrafos

digrafo = de vértices e conjunto de arcosarco = par ordenado de vértices

Exemplo: v e w são vértices e v-w é um arco

b d

f

c

a

e

Page 3: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Especi�cação

Digrafos podem ser especi�cados através de sua listade arcos

Exemplo:

b d

f

c

a

e

d-f

b-d

a-c

b-e

e-f

a-b

Page 4: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Grafos

grafo = digrafo simétrico

aresta = par de arcos anti-paralelos

Exemplo: b-a e a-b formam uma aresta

e

f

db

a

c

Page 5: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Grafos

Um grafo é um digrafo simétrico

Exemplo: representação usual

e

f

db

a

c

Page 6: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Estrutura de dados

Vértices são representados por objetos do tipoVertex.Arcos sao representados por por objetos do tipo Arc

#de�ne Vertex int

typedef struct {Vertex v;

Vertex w;

} Arc;

Page 7: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Grafos no computador

Usaremos duas representações clássicas:

I matriz de adjacência (agora)I vetor de listas de adjacência (próximas aulas)

Page 8: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Matriz de adjacência de digrafo

Matriz de adjacência de um digrafo tem linhas ecolunas indexadas por vértices:

adj[v][w] = 1 se v-w é um arcoadj[v][w] = 0 em caso contrário

Exemplo:

0

1

2 3

0 1 2 3

0 0 1 1 01 0 0 0 12 0 1 0 13 0 0 0 0

Consumo de espaço: Θ(V2) fácil de implementar

Page 9: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Estrutura digraph

V = número de vérticesA = número de arcosadj = ponteiro para a matriz de adjacência

struct digraph {int V;int A;int **adj;

};

typedef struct digraph *Digraph;

Page 10: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Digrafo

Digraph G

0

2

4

3 5

1

Page 11: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Estruturas de dados

1 10 010

0 0 0 0

0 1 0 0 1 0

5

5

0 0

1 1

1 1

1

0 0 0 0

0 0

0 0 0 0 0

0 0

6

10

1 4320

0

1

2

3

4

G V

A

adj

Page 12: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

MATRIXint

Aloca uma matriz com linhas 0..r-1 e colunas0..c-1, cada elemento da matriz recebe valor val

int **MATRIXint (int r, int c, int val) {0 Vertex i, j;

1 int **m = malloc(r * sizeof(int *));2 for (i = 0; i < r; i++)3 m[i] = malloc(c * sizeof(int));4 for (i = 0; i < r; i++)5 for (j = 0; j < c; j++)6 m[i][j] = val;7 return m;

}

Page 13: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Consumo de tempo

linha número de execuções da linha

1 = 1 = Θ(1)2 = r + 1 = Θ(r)3 = r = Θ(r)4 = r + 1 = Θ(r)5 = r× (c + 1) = Θ(r c)6 = r× c = Θ(r c)

total Θ(1) + 3Θ(r) + 2Θ(r c)= Θ(r c)

Page 14: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Conclusão

Supondo que o consumo de tempo da função malloc

é constante

O consumo de tempo da função MATRIXint éΘ(r c).

Page 15: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHinit

Devolve (o endereço de) um novo digrafo comvértices 0,..,V-1 e nenhum arco.

Digraph DIGRAPHinit (int V) {0 Digraph G = malloc(sizeof *G);1 G�>V = V;

2 G�>A = 0;3 G�>adj = MATRIXint(V,V,0);4 return G;

}

Page 16: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

AULA 2

Page 17: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Funções básicas (continuação)

S 17.3

Page 18: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHinsertA

Insere um arco v-w no digrafo G.Se v == w ou o digrafo já tem arco v-w, não faz nada

void

DIGRAPHinsertA(Digraph G,Vertex v,Vertex w)

{

if (v != w && G�>adj[v][w] == 0) {G�>adj[v][w] = 1;G�>A++;

}

}

Page 19: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHinsertA

Insere um arco v-w no digrafo G.Se v == w ou o digrafo já tem arco v-w, não faz nada

void

DIGRAPHinsertA(Digraph G,Vertex v,Vertex w){

if (v != w && G�>adj[v][w] == 0) {G�>adj[v][w] = 1;G�>A++;

}

}

Page 20: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHremoveA

Remove do digrafo G o arco v-wSe não existe tal arco, a função nada faz.

void

DIGRAPHremoveA(Digraph G,Vertex v,Vertex w)

{

if (G�>adj[v][w] == 1) {G�>adj[v][w] = 0;G�>A��;

}

}

Page 21: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHremoveA

Remove do digrafo G o arco v-wSe não existe tal arco, a função nada faz.

void

DIGRAPHremoveA(Digraph G,Vertex v,Vertex w){

if (G�>adj[v][w] == 1) {G�>adj[v][w] = 0;G�>A��;

}

}

Page 22: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHshow

0

2

4

3 5

1

0: 2 3 4

1:

2: 1 4

3: 4 5

4: 1 5

5: 1

Page 23: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHshowPara cada vértice v de G, imprime, em uma linha,os vértices adjacentes a v

void DIGRAPHshow (Digraph G) {

Vertex v, w;

1 for (v = 0; v < G�>V; v++) {2 printf("%2d:", v);3 for (w = 0; w < G�>V; w++)4 if (G�>adj[v][w] == 1)5 printf("%2d", w);6 printf("\n");

}}

Page 24: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHshowPara cada vértice v de G, imprime, em uma linha,os vértices adjacentes a v

void DIGRAPHshow (Digraph G) {Vertex v, w;

1 for (v = 0; v < G�>V; v++) {2 printf("%2d:", v);3 for (w = 0; w < G�>V; w++)4 if (G�>adj[v][w] == 1)5 printf("%2d", w);6 printf("\n");

}}

Page 25: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Consumo de tempo

linha número de execuções da linha

1 = V + 1 = Θ(V)2 = V = Θ(V)3 = V× (V + 1) = Θ(V2)4 = V× V = Θ(V2)5 ≤ V× V = O(V2)6 = V = Θ(V)

total 3Θ(V) + O(V2) + 3Θ(V2)= Θ(V2)

Page 26: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Conclusão

O consumo de tempo da função DIGRAPHShow éΘ(V2).

Page 27: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Funções básicas para grafos

#de�ne GRAPHinit DIGRAPHinit

#de�ne GRAPHshow DIGRAPHshow

Função que insere uma aresta v-w no grafo G

void

GRAPHinsertE (Graph G, Vertex v, Vertex w){

DIGRAPHinsertA(G, v, w);DIGRAPHinsertA(G, w, v);

}

Exercício. Escrever a função GRAPHremoveE

Page 28: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Funções básicas para grafos

#de�ne GRAPHinit DIGRAPHinit

#de�ne GRAPHshow DIGRAPHshow

Função que insere uma aresta v-w no grafo G

void

GRAPHinsertE (Graph G, Vertex v, Vertex w)

{DIGRAPHinsertA(G, v, w);DIGRAPHinsertA(G, w, v);

}

Exercício. Escrever a função GRAPHremoveE

Page 29: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Funções básicas para grafos

#de�ne GRAPHinit DIGRAPHinit

#de�ne GRAPHshow DIGRAPHshow

Função que insere uma aresta v-w no grafo G

void

GRAPHinsertE (Graph G, Vertex v, Vertex w){

DIGRAPHinsertA(G, v, w);DIGRAPHinsertA(G, w, v);

}

Exercício. Escrever a função GRAPHremoveE

Page 30: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Caminhos em digrafos

S 17.1

Page 31: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

CaminhosUm caminho num digrafo é qualquer seqüência daforma v0�v1�v2�...�vk−1�vp, onde vk−1-vk é um arcopara k = 1, . . . , p.

Exemplo: 2-4-1-3-5-4-5 é um caminho com origem

2 é término 5

0

1 3

5

42

Page 32: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Caminhos simples

Um caminho é simples se não tem vértices repetidos

Exemplo: 2-4-1-3-5 é um caminho simples de 2 a 5

0

3

5

4

1

2

Page 33: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Procurando um caminho

Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t

Exemplo: para s = 0 e t = 1 a resposta é SIM

0

2

3 5

1

4

Page 34: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Procurando um caminho

Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t

Exemplo: para s = 0 e t = 1 a resposta é SIM

0

2 1

53

4

Page 35: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Procurando um caminho

Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t

Exemplo: para s = 5 e t = 4 a resposta é NÃO

0

2

3 5

1

4

Page 36: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHpath

Recebe um digrafo G e vértices s e t e devolve 1 seexiste um caminho de s a t ou devolve 0 em casocontrárioSupõe que o digrafo tem no máximo maxV vértices.

int DIGRAPHpath (Digraph G, Vertex s, Vertex t)

Page 37: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Caminhos em digrafos

S 17.1

Page 38: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

CaminhosUm caminho num digrafo é qualquer seqüência daforma v0�v1�v2�...�vk−1�vp, onde vk−1-vk é um arcopara k = 1, . . . , p.

Exemplo: 2-4-1-3-5-4-5 é um caminho com origem

2 é término 5

0

1 3

5

42

Page 39: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Caminhos simples

Um caminho é simples se não tem vértices repetidos

Exemplo: 2-4-1-3-5 é um caminho simples de 2 a 5

0

3

5

4

1

2

Page 40: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Procurando um caminho

Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t

Exemplo: para s = 0 e t = 1 a resposta é SIM

0

2

3 5

1

4

Page 41: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Procurando um caminho

Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t

Exemplo: para s = 0 e t = 1 a resposta é SIM

0

2 1

53

4

Page 42: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Procurando um caminho

Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t

Exemplo: para s = 5 e t = 4 a resposta é NÃO

0

2

3 5

1

4

Page 43: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHpath

Recebe um digrafo G e vértices s e t e devolve 1 seexiste um caminho de s a t ou devolve 0 em casocontrárioSupõe que o digrafo tem no máximo maxV vértices.

int DIGRAPHpath (Digraph G, Vertex s, Vertex t)

Page 44: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHpath(G,0,1)

0

12

3 5

4

Page 45: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHpath(G,0,1)

0

12

3 5

4

Page 46: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,0)

0

12

3 5

4

Page 47: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,0)

0

12

3 5

4

Page 48: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,2)

0

12

3 5

4

Page 49: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,2)

0

12

3 5

4

Page 50: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,1)

0

12

3 5

4

Page 51: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,2)

0

12

3 5

4

Page 52: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,2)

0

12

3 5

4

Page 53: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,4)

0

12

3 5

4

Page 54: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,4)

0

12

3 5

4

Page 55: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,4)

0

12

3 5

4

Page 56: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,5)

0

12

3 5

4

Page 57: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,5)

0

12

3 5

4

Page 58: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,5)

0

12

3 5

4

Page 59: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,4)

0

12

3 5

4

Page 60: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,2)

0

12

3 5

4

Page 61: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,0)

0

12

3 5

4

Page 62: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,0)

0

12

3 5

4

Page 63: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,3)

0

12

3 5

4

Page 64: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,3)

0

12

3 5

4

Page 65: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,3)

0

12

3 5

4

Page 66: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,3)

0

12

3 5

4

Page 67: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,0)

0

12

3 5

4

Page 68: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,0)

0

12

3 5

4

Page 69: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,0)

0

12

3 5

4

Page 70: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHpath(G,0,1)

0

12

3 5

4

Page 71: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHpath(G,2,3)

0

12

3 5

4

Page 72: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHpath(G,2,3)

0

12

3 5

4

Page 73: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,2)

0

12

3 5

4

Page 74: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,2)

0

12

3 5

4

Page 75: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,1)

0

12

3 5

4

Page 76: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,2)

0

12

3 5

4

Page 77: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,2)

0

12

3 5

4

Page 78: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,4)

0

12

3 5

4

Page 79: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,4)

0

12

3 5

4

Page 80: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,4)

0

12

3 5

4

Page 81: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,5)

0

12

3 5

4

Page 82: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,5)

0

12

3 5

4

Page 83: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,5)

0

12

3 5

4

Page 84: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,4)

0

12

3 5

4

Page 85: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR(G,2)

0

12

3 5

4

Page 86: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHpath(G,2,3)

0

12

3 5

4

Page 87: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHpath

static int lbl[maxV];int DIGRAPHpath (Digraph G, Vertex s, Vertex t){

Vertex v;1 for (v = 0; v < G�>V; v++)2 lbl[v] = −1;3 pathR(G,s);

4 if (lbl[t] == −1) return 0;

5 else return 1;

}

Page 88: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR

Visita todos os vértices que podem ser atingidos apartir de v

void pathR (Digraph G, Vertex v)

{Vertex w;

1 lbl[v] = 0;

2 for (w = 0; w < G�>V; w++)3 if (G�>adj[v][w] == 1)4 if (lbl[w] == −1)5 pathR(G, w);}

Page 89: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

pathR

Visita todos os vértices que podem ser atingidos apartir de v

void pathR (Digraph G, Vertex v){

Vertex w;1 lbl[v] = 0;

2 for (w = 0; w < G�>V; w++)3 if (G�>adj[v][w] == 1)4 if (lbl[w] == −1)5 pathR(G, w);}

Page 90: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHpath(G,0,1)

0

2

4

3 5

10-2 pathR(G,2)

2-1 pathR(G,1)

2-4 pathR(G,4)

4-1

4-5 pathR(G,5)

5-1

0-3 pathR(G,3)

3-4

3-5

0-4

existe caminho

Page 91: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

DIGRAPHpath(G,2,3)

0

2

4

3 5

1

2-1 pathR(G,1)

2-4 pathR(G,4)

4-1

4-5 pathR(G,5)

5-1

nao existe caminho

Page 92: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Consumo de tempo

Qual é o consumo de tempo da funçãoDIGRAPHpath?

linha número de execuções da linha

1 = V + 1 = Θ(V)2 = V = Θ(V)3 = 1 = ????4 = 1 = Θ(1)5 = 1 = Θ(1)

total = 2Θ(1) + 2Θ(V) + ???= Θ(V) + ????

Page 93: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Consumo de tempo

Qual é o consumo de tempo da funçãoDIGRAPHpath?

linha número de execuções da linha

1 = V + 1 = Θ(V)2 = V = Θ(V)3 = 1 = ????4 = 1 = Θ(1)5 = 1 = Θ(1)

total = 2Θ(1) + 2Θ(V) + ???= Θ(V) + ????

Page 94: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Conclusão

O consumo de tempo da função DIGRAPHpath éΘ(V) mais o consumo de tempo da função

PathR.

Page 95: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Consumo de tempo

Qual é o consumo de tempo da função PathR?

linha número de execuções da linha

1 ≤ V = O(V)2 ≤ V× (V + 1) = O(V2)3 ≤ V× V = O(V2)4 ≤ V× V = O(V2)5 ≤ V− 1 = O(V)

total = 2O(V) + 3O(V2)= O(V2)

Page 96: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Consumo de tempo

Qual é o consumo de tempo da função PathR?

linha número de execuções da linha

1 ≤ V = O(V)2 ≤ V× (V + 1) = O(V2)3 ≤ V× V = O(V2)4 ≤ V× V = O(V2)5 ≤ V− 1 = O(V)

total = 2O(V) + 3O(V2)= O(V2)

Page 97: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0

Conclusão

O consumo de tempo da função PathR paramatriz de adjacência é O(V2).

O consumo de tempo da função DIGRAPHpath

para matriz de adjacência é O(V2).