• Nenhum resultado encontrado

Últimas aulas

N/A
N/A
Protected

Academic year: 2022

Share "Últimas aulas"

Copied!
7
0
0

Texto

(1)

Melhores momentos

Últimas aulas

Algoritmos em Grafos — 1º sem 2012 1 / 27

Procurando um caminho

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

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

0

2 1

5 3

4

Algoritmos em Grafos — 1º sem 2012 2 / 27

Procurando um caminho

Problema: dados um digrafo G e dois vértices s e t decidir 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

Certificado de inexistência

Exemplo: certificado de que não há caminho de 2 a 3

0

2 1

3 5

4

S

T

(2)

Conclusão

Para quaisquer vértices s e t de um digrafo, vale uma e apenas umas das seguintes afirmações:

existe um caminho de s a t

existe st-corte (S,T) em que todo arco no corte tem ponta inicial em T e ponta final em S.

Algoritmos em Grafos — 1º sem 2012 5 / 27

Procurando um ciclo

Problema: decidir se dado digrafo G possui um ciclo Exemplo: para o grafo a seguir a resposta é SIM

0

2 1

3 5

4

0

2 1

3 5

4

Algoritmos em Grafos — 1º sem 2012 6 / 27

Procurando um ciclo

Problema: decidir se dado digrafo G possui um ciclo Exemplo: para o grafo a seguir a resposta é NÃO

0

2 1

3 5

4

Ordenação topológica

i 0 1 2 3 4 5 ts[i] 0 3 2 4 5 1

0

2 1

3 5

4

(3)

Conclusão

Para todo digrafo G, vale uma e apenas umas das seguintes afirmações:

G possui um ciclo

G é um DAG e, portanto, admite uma ordenação topológica

Algoritmos em Grafos — 1º sem 2012 9 / 27

Floresta DFS

0

2

1

6 4

5

7

3

[2,5] [6,7]

[3,4]

[0,9]

[1,8]

[10,15]

[11,12] [13,14]

Algoritmos em Grafos — 1º sem 2012 10 / 27

Florestas e árvores Florestas

Uma floresta (= forest) é um grafo sem ciclos não-triviais

Exemplo:

4

5

6

7 9 0

2 1

3

8

10

(4)

Propriedades

Para cada par s,t de vértices de uma árvore existe um e um só caminho simples de s a t.

Toda árvore com V vértices tem exatamente V-1 arestas.

Algoritmos em Grafos — 1º sem 2012 13 / 27

Conclusão

Para todo grafo G, vale uma e apenas umas das seguintes afirmações:

G possui um ciclo não trivial G é uma floresta

Algoritmos em Grafos — 1º sem 2012 14 / 27

Componentes de grafos

S 18.5

Grafos conexos

Um grafo é conexo se e somente se, para cada par (s,t) de seus vértices, existe um caminho com origem s e término t

Exemplo: um grafo conexo

0

2 1

3

8

10 4

5

6

7 9

(5)

Componentes de grafos

Uma componente (= component) de um grafo é o subgrafo conexo maximal

Exemplo: grafo com 4 componentes (conexos)

0

2 1

3

8

10 4

5

6

7 9

Algoritmos em Grafos — 1º sem 2012 17 / 27

Contando componentes

Problema: calcular o número de componente Exemplo: grafo com 4 componentes

0

2 1

3

8

10 4

5

6

7 9

Algoritmos em Grafos — 1º sem 2012 18 / 27

Cálculo das componentes de grafos

A função abaixo devolve o número de componentes do grafo G.

#define maxV 10000 static int cc[maxV];

Além disso, ela armazena no vetor cc o número do componente a que o vértice pertence: se o vértice v pertence ao k-ésimo componente então cc[v] ==

k-1

int GRAPHcc (Graph G)

Exemplo

v 0 1 2 3 4 5 6 7 8 9 10 cc[v] 0 1 0 0 2 3 3 2 0 3 2

0

1 2

3

8

10 4

5

6

7 9

(6)

GRAPHcc

int GRAPHcc (Graph G) { Vertex v; int id = 0;

1 for (v = 0; v < G–>V; v++) cc[v] = -1;

2 for (v = 0; v < G–>V; v++) 3 if (cc[v] == -1)

4 dfsRcc(G, v, id++);

5 return id;

}

Algoritmos em Grafos — 1º sem 2012 21 / 27

dfsRcc

void dfsRcc (Graph G, Vertex v, int id){

link p;

1 cc[v] = id;

2 for (p=G–>adj[v];p!=NULL;p=p–>next) 3 if (cc[p–>w] == -1)

4 dfsRcc(G, p–>w, id);

}

Algoritmos em Grafos — 1º sem 2012 22 / 27

Consumo de tempo

O consumo de tempo da função GRAPHcc é O(V+A).

Grafos bipartidos e ciclos ímpares

S 18.5

(7)

Bipartição

Um grafo é bipartido (= bipartite) se existe uma bipartição do seu conjunto de vértices tal que cada aresta tem uma ponta em uma das partes da

bipartição e a outra ponta na outra parte Exemplo:

0

1 2

3 5

4 6

Exemplo:

0

2 1

3 5

4 6

Exemplo:

3 6 2

Algoritmos em Grafos — 1º sem 2012 25 / 27

Florestas e bipartições

Teorema 1.

Toda floresta é um grafo bipartido.

Prova: Basta mostrar que toda árvore é.

Escolha um vértice v, e, para todo vértice w, faça:

cor [ w ] = dist ( v , w ) mod 2.

Se u e w são adjacentes, o caminho de v ao mais distante passa pelo mais mais próximo e usa a aresta. Assim,as distâncias a v diferem de 1, e eles têm cores diferentes.

Algoritmos em Grafos — 1º sem 2012 26 / 27

Referências

Documentos relacionados

As fichas (Figura 12) para cadastro a campo ou impressão personalizada de cada registro das árvores marcadas ou então de cada coleta de sementes estão descritas a seguir, e uma cópia

Às associações de desenvolvimento regional, local e comunitário endereçamos a nossa disponi- bilidade para apoiar e mobilizar os nossos associa- dos em todo o território nacional

Apesar de não ser o propósito deste projeto, o One World Games abriu as portas para vários atletas estudarem e jogarem nos Estados Unidos.. Este ano três desses atletas conquistaram

Os episódios restantes serão citados de forma secundária e como apoio a alguma argumentação exposta no trabalho.. d) Ladrões de Automóveis – dentro do caráter

E11 ERRO- Caixa não foi programada para aceitar acréscimo em valor programado... Devolução de produto

• Historia bem apresentada ao usuário. Levando em consideração os dois primeiros fatores, tempo de resposta e resposta um por um, define-se a direção utilizada por

c) a não negar a validade, entre as partes, de documentos jurídicos elaborados no Estado unicamente devido ao facto de estarem redigidos numa língua regional ou minoritária. As

A utilização da atividade de situações problema em Matemática melhora a aprendizagem na resolução de problemas no tema de matemático selecionado dos alunos das