Академический Документы
Профессиональный Документы
Культура Документы
elaboradas por Charles Ornelas, Leonardo Rocha, Leonardo Mata e Nivio Ziviani
Transparncias
Motivao
Muitas aplicaes em computao necessitam considerar conjunto de conexes entre pares de objetos: Existe um caminho para ir de um objeto a outro seguindo as conexes? Qual a menor distncia entre um objeto e outro objeto? Quantos outros objetos podem ser alcanados a partir de um determinado objeto? Existe um tipo abstrato chamado grafo que usado para modelar tais situaes.
Aplicaes
Alguns exemplos de problemas prticos que podem ser resolvidos atravs de uma modelagem em grafos: Ajudar mquinas de busca a localizar informao relevante na Web. Descobrir os melhores casamentos entre posies disponveis em empresas e pessoas que aplicaram para as posies de interesse. Descobrir qual o roteiro mais curto para visitar as principais cidades de uma regio turstica.
Conceitos Bsicos
Grafo: conjunto de vrtices e arestas. Vrtice: objeto simples que pode ter nome e outros atributos. Aresta: conexo entre dois vrtices.
3
aresta
1 4
vrtice
Grafos Direcionados
Um grafo direcionado G um par (V, A), onde V um conjunto nito de vrtices e A uma relao binria em V . Uma aresta (u, v ) sai do vrtice u e entra no vrtice v . O vrtice v adjacente ao vrtice u. Podem existir arestas de um vrtice para ele mesmo, chamadas de self-loops.
0 1 4
Grafos No Direcionados
Um grafo no direcionado G um par (V, A), onde o conjunto de arestas A constitudo de pares de vrtices no ordenados. As arestas (u, v ) e (v, u) so consideradas como uma nica aresta. A relao de adjacncia simtrica. Self-loops no so permitidos.
0 1 4
Grau de um Vrtice
Em grafos no direcionados: O grau de um vrtice o nmero de arestas que incidem nele. Um vrice de grau zero dito isolado ou no conectado. Ex.: O vrtice 1 tem grau 2 e o vrtice 3 isolado.
0 1 4
Em grafos direcionados O grau de um vrtice o nmero de arestas que saem dele (out-degree) mais o nmero de arestas que chegam nele (in-degree). Ex.: O vrtice 2 tem in-degree 2, out-degree 2 e grau 4.
0 1 4
Ciclos
Em um grafo direcionado: Um caminho (v0 , v1 , . . . , vk ) forma um ciclo se v0 = vk e o caminho contm pelo menos uma aresta. O ciclo simples se os vrtices v1 , v2 , . . . , vk so distintos. O self-loop um ciclo de tamanho 1. Dois caminhos (v0 , v1 , . . . , vk ) e (v0 , v1 , . . . , vk ) formam o mesmo ciclo se existir um inteiro j tal que vi = v(i+j ) mod k para i = 0, 1, . . . , k 1. Ex.: O caminho (0, 1, 2, 3, 0) forma um ciclo. O caminho(0, 1, 3, 0) forma o mesmo ciclo que os caminhos (1, 3, 0, 1) e (3, 0, 1, 3).
0 1 4
Ciclos
Em um grafo no direcionado: Um caminho (v0 , v1 , . . . , vk ) forma um ciclo se v0 = vk e o caminho contm pelo menos trs arestas. O ciclo simples se os vrtices v1 , v2 , . . . , vk so distintos. Ex.: O caminho (0, 1, 2, 0) um ciclo.
0 1 4
10
Componentes Conectados
Um grafo no direcionado conectado se cada par de vrtices est conectado por um caminho. Os componentes conectados so as pores conectadas de um grafo. Um grafo no direcionado conectado se ele tem exatamente um componente conectado. Ex.: Os componentes so: {0, 1, 2}, {4, 5} e {3}.
0 1 4
11
12
Grafos Isomorfos
G = (V, A) e G = (V , A ) so isomorfos se existir uma bijeo f : V V tal que (u, v ) A se e somente se (f (u), f (v )) A .
0 4 5 1
7 3
6 2
13
Subgrafos
Um grafo G = (V , A ) um subgrafo de G = (V, A) se V V e A A. Dado um conjunto V V , o subgrafo induzido por V o grafo G = (V , A ), onde A = {(u, v ) A|u, v V }. Ex.: Subgrafo induzido pelo conjunto de vrtices {1, 2, 4, 5}.
0 1 4
14
15
16
17
Grafos Completos
Um grafo completo um grafo no direcionado no qual todos os pares de vrtices so adjacentes. Possui (|V |2 |V |)/2 = |V |(|V | 1)/2 arestas, pois do total de |V |2 pares possveis de vrtices devemos subtrair |V | self-loops e dividir por 2 (cada aresta ligando dois vrtices contada duas vezes). O nmero total de grafos diferentes com |V | vrtices 2|V |(|V |1)/2 (nmero de maneiras diferentes de escolher um subconjunto a partir de |V |(|V | 1)/2 possveis arestas).
18
rvores
rvore livre: grafo no direcionado acclico e conectado. comum dizer apenas que o grafo uma rvore omitindo o livre. Floresta: grafo no direcionado acclico, podendo ou no ser conectado. rvore geradora de um grafo conectado G = (V, A): subgrafo que contm todos os vrtices de G e forma uma rvore. Floresta geradora de um grafo G = (V, A): subgrafo que contm todos os vrtices de G e forma uma oresta.
(a)
(b)
19
20
21
22
23
Matriz de Adjacncia
A matriz de adjacncia de um grafo G = (V, A) contendo n vrtices uma matriz n n de bits, onde A[i, j ] 1 (ou verdadeiro) se e somente se existe um arco do vrtice i para o vrtice j . Para grafos ponderados A[i, j ] contm o rtulo ou peso associado com a aresta e, neste caso, a matriz no de bits. Se no existir uma aresta de i para j ento necessrio utilizar um valor que no possa ser usado como rtulo ou peso.
24
0 1 2 3 4 5 0 1 1 1 1 1 2 1 1 3 1 4 5
0 1 2 3 4 5 0 1 1 1 1 1 2 1 1 3 4 5
(a)
(b)
25
26
27
28
29
5 0
Um arranjo adj de |V | listas, uma para cada vrtice em V . Para cada u V , adj [u] contm todos os vrtices adjacentes a u em G.
30
31
32
33
34
35
cab
0 1 2 3 4 5 6 4 6 2 3 1 1 2
prox peso
4 5 0 0 0 6 0
(a)
5 3 7
cab
5 0 1 7 3 2 A V 0 1 2 3 4 5 6 7 4 6 7 3 1 0 2 1
prox peso
4 5 7 0 0 6 0 0
(b)
5 5 7 7
cab: endereos do ltimo item da lista de adjacentes de cada vrtice (nas |V | primeiras posies) e os vrtices propriamente ditos (nas |A| ltimas posies) prox: endereo do prximo item da lista de adjacentes. peso: valor do peso de cada aresta do grafo (nas ltimas |A| posies).
36
37
38
39
Busca em Profundidade
A busca em profundidade, do ingls depth-rst search), um algoritmo para caminhar no grafo. A estratgia buscar o mais profundo no grafo sempre que possvel. As arestas so exploradas a partir do vrtice v mais recentemente descoberto que ainda possui arestas no exploradas saindo dele. Quando todas as arestas adjacentes a v tiverem sido exploradas a busca anda para trs para explorar vrtices que saem do vrtice do qual v foi descoberto. O algoritmo a base para muitos outros algoritmos importantes, tais como vericao de grafos acclicos, ordenao topolgica e componentes fortemente conectados.
40
Busca em Profundidade
Para acompanhar o progresso do algoritmo cada vrtice colorido de branco, cinza ou preto. Todos os vrtices so inicializados branco. Quando um vrtice descoberto pela primeira vez ele torna-se cinza, e tornado preto quando sua lista de adjacentes tenha sido completamente examinada. d[v ]: tempo de descoberta t[v ]: tempo de trmino do exame da lista de adjacentes de v . Estes registros so inteiros entre 1 e 2|V | pois existe um evento de descoberta e um evento de trmino para cada um dos |V | vrtices.
41
42
43
(a)
c(1/ ) 0 c(2/ ) 1 b( / ) b( / ) 2 3 c(1/ ) 0
(b)
c(2/ ) 1 b( / ) c(3/ ) 2 3
(c)
c(1/ ) 0 c(2/ ) 1
(d)
b( / ) p(3/4) 2 3
(e)
44
(f)
p(1/6) 0 p(2/5) 1 c(7/ ) p(3/4) 2 3 p(1/6) 0
(g)
p(2/5) 1 p(7/8) p(3/4) 2 3
(h)
(i)
45
o tempo total de execuo de visitaDfs O(|A|). Logo, a complexidade total do mtodo buscaEmProfundidade O(|V | + |A|).
46
Classicao de Arestas
Existem: 1. Arestas de rvore: so arestas de uma rvore de busca em profundidade. A aresta (u, v ) uma aresta de rvore se v foi descoberto pela primeira vez ao percorrer a aresta (u, v ). 2. Arestas de retorno: conectam um vrtice u com um antecessor v em uma rvore de busca em profundidade (inclui self-loops). 3. Arestas de avano: no pertencem rvore de busca em profundidade mas conectam um vrtice a um descendente que pertence rvore de busca em profundidade. 4. Arestas de cruzamento: podem conectar vrtices na mesma rvore de busca em profundidade, ou em duas rvores diferentes.
47
Classicao de Arestas
Classicao de arestas pode ser til para derivar outros algoritmos. Na busca em profundidade cada aresta pode ser classicada pela cor do vrtice que alcanado pela primeira vez: Branco indica uma aresta de rvore. Cinza indica uma aresta de retorno. Preto indica uma aresta de avano quando u descoberto antes de v ou uma aresta de cruzamento caso contrrio.
3/6 2 arv 3 4/5 arv ret cruz 4 7/8 2/9 1 arv avan cruz 5 11/12 cruz arv 1/10 0
48
49
Busca em Largura
Expande a fronteira entre vrtices descobertos e no descobertos uniformemente atravs da largura da fronteira. O algoritmo descobre todos os vrtices a uma distncia k do vrtice origem antes de descobrir qualquer vrtice a uma distncia k + 1. O grafo G(V, A) pode ser direcionado ou no direcionado.
50
Busca em Largura
Cada vrtice colorido de branco, cinza ou preto. Todos os vrtices so inicializados branco. Quando um vrtice descoberto pela primeira vez ele torna-se cinza. Vrtices cinza e preto j foram descobertos, mas so distinguidos para assegurar que a busca ocorra em largura. Se (u, v ) A e o vrtice u preto, ento o vrtice v tem que ser cinza ou preto. Vrtices cinza podem ter alguns vrtices adjacentes brancos, e eles representam a fronteira entre vrtices descobertos e no descobertos.
51
52
53
(b)
c(1) 1 b( ) 4
3 b( )
2 b( ) F 0 0
5 b( )
3 c(1)
2 b( ) F 1 3 1 1
5 b( )
(c)
p(0) 0 p(1) 1 b( ) 4 p(0) 0
(d)
p(1) 1 b( ) 4
3 c(1)
2 c(2) F 3 2 1 2
5 b( )
3 p(1)
2 c(2) F 2 2
5 b( )
54
(f)
p(1) 1 c(0) 4
3 p(1)
2 p(2) F
5 b( )
3 p(1)
2 p(2) F 4 0
5 b( )
(g)
p(0) 0 p(1) 1 p(0) 4 p(0) 0
(h)
p(1) 1 p(0) 4
3 p(1)
2 p(2) F 5 1
5 c(1)
3 p(1)
2 p(2) F
5 p(1)
55
56
57
Ordenao Topolgica
Ordenao linear de todos os vrtices, tal que se G contm uma aresta (u, v ) ento u aparece antes de v . Pode ser vista como uma ordenao de seus vrtices ao longo de uma linha horizontal de tal forma que todas as arestas esto direcionadas da esquerda para a direita. Pode ser feita usando a busca em profundidade.
58
Ordenao Topolgica
Os grafos direcionados acclicos so usados para indicar precedncias entre eventos. Uma aresta direcionada (u, v ) indica que a atividade u tem que ser realizada antes da atividade v .
1/18 0 2/15 4/5 3 2 3/14 1 4 6/13 16/17 5 7/12 6 7 8/11 8 9/10 19/20 9
59
Ordenao Topolgica
Algoritmo para ordenar topologicamente um grafo direcionado acclico G = (V, A): 1. Aplicar a busca em profundidade no grafo G para obter os tempos de trmino t[u] para cada vrtice u. 2. Ao trmino de cada vrtice, insira-o na frente de uma lista linear encadeada. 3. Retornar a lista encadeada de vrtices. A Custo O(|V | + |A|), uma vez que a busca em profundidade tem complexidade de tempo O(|V | + |A|) e o custo para inserir cada um dos |V | vrtices na frente da lista linear encadeada custa O(1).
60
61
(a)
(b)
(c)
62
63
64
(a)
(b)
(c)
65
66
67
68
69
70
(a)
(b)
71
Dentro do while, S tem que ser um subconjunto prprio da AGM T , e assim tem que existir uma aresta (u, v ) T tal que (u, v ) S e (u, v ) seguro para S .
72
73
74
75
(b)
6 1
0 0 5 3 2 1 5
(c)
(d)
0 0 2
(e)
2 1
0 0 2 3 2 1 5 4 5 4
(f)
2 1
0 0 2 3 2 1 3 4 5 4
76
77
O programa acima apresenta a classe FPHeapMinIndireto com as estruturas de dados e as operaes necessrias para operar com um heap indireto. O arranjo pos [v ] fornece a posio do vrtice v dentro do heap fp, permitindo assim que o vrtice v possa ser acessado a um custo O(1). O acesso ao vrtice v necessrio para a operao diminuiChave .
78
79
80
81
82
(b)
0 3
(c)
0 1 2 4 5 3
(d)
0 1 2 4 5 3
(e)
0 1 2 4 5 3
(f)
0 1 2 4 5 3
83
84
85
A implementao das operaes uniao e encontraConjunto deve ser realizada de forma eciente. Esse problema conhecido na literatura como Unio-EncontraConjunto.
86
87
p(vi1 , vi )
Caminho mais curto do vrtice u ao vrtice v : qualquer caminho c com peso p(c) = (u, v ).
88
89
90
91
92
Algoritmo de Dijkstra
Mantm um conjunto S de vrtices cujos caminhos mais curtos at um vrtice origem j so conhecidos. Produz uma rvore de caminhos mais curtos de um vrtice origem s para todos os vrtices que so alcanveis a partir de s. Utiliza a tcnica de relaxamento: Para cada vrtice v V o atributo p[v ] um limite superior do peso de um caminho mais curto do vrtice origem s at v . O vetor p[v ] contm uma estimativa de um caminho mais curto. O primeiro passo do algoritmo inicializar os antecessores e as estimativas de caminhos mais curtos: a ntecessor[v ] = n ull para todo vrtice v V, p[u] = 0, para o vrtice origem s, e p[v ] = para v V {s}.
93
Relaxamento
O relaxamento de uma aresta (u, v ) consiste em vericar se possvel melhorar o melhor caminho at v obtido at o momento se passarmos por u. Se isto acontecer, p[v ] e a ntecessor[v ] devem ser atualizados.
i f (p[ v] > p[u] + peso da aresta ( u, v) ) p[ v ] = p[u] + peso da aresta ( u, v ) ; antecessor [ v ] = u;
94
Invariante: o nmero de elementos do heap igual a V S no incio do anel while. A cada iterao do while, um vrtice u extrado do heap e adicionado ao conjunto S , mantendo assim o invariante. A operaoretiraMin obtm o vrtice u com o caminho mais curto estimado at o momento e adiciona ao conjunto S . No anel da linha 10, a operao de relaxamento realizada sobre cada aresta (u, v ) adjacente ao vrtice u.
95
(b)
1 1 1 5 2 1
0 0 3 10 4 6 2 3 3 10
(c)
1 1 5 2 6 1 1
0 0 3 10 4 6 2 3 3 10
S {0} {0, 1}
d[0] 0 0
d[1] 1 1
d[2] 6
d[3] 3 3
d[4] 10 10
96
(e)
1 1 5 2 5 1 1
0 0 3 10 4 6 2 3 3 6
(f)
1
d[0] 0 0 0
d[1] 1 1 1
d[2] 5 5 5
d[3] 3 3 3
d[4] 9 6 6
97
Algoritmo de Dijkstra
Para realizar de forma eciente a seleo de uma nova aresta, todos os vrtices que no esto na rvore de caminhos mais curtos residem no heap A baseada no campo p. Para cada vrtice v , p[v ] o caminho mais curto obtido at o momento, de v at o vrtice raiz. O heap mantm os vrtices, mas a condio do heap mantida pelo caminho mais curto estimado at o momento atravs do arranjo p[v ], o heap indireto. o arranjo pos [v ] fornece a posio do vrtice v dentro do heap, permitindo assim que o vrtice v possa ser acessado a um custo O(1) para a operao diminuiChave .
98
99
100
101
102
103
104
105
(b)
arestas
0 1 2 3 4 5 6 7 8 prox 1 1 1 1 8 1 1 1 5
106
107
108
109
110