Upload
rodrigo-leite
View
34
Download
0
Embed Size (px)
Citation preview
5/21/2018 Aed II Grafos
1/40
Jos Augusto BaranauskasDepartamento de Fsica e Matemtica FFCLRP-USP
http://dfm.ffclrp.usp.br/~augusto
Algoritmos e
Estruturas de Dados II
GrafosGrafos
Nesta aula fornecidoum breve histrico sobrea teoria dos grafos
So tambm
introduzidos conceitossobre grafos ealgoritmos que osmanipulam
HistricoHistrico
A primeira evidncia sobre grafos (graphs) remonta a1736, quando Euler fez uso deles para solucionar oproblema clssico das pontes de Koenigsberg
Na cidade de Koenigsberg (na Prssia Oriental), o rioPregal flui em torno da ilha de Kneiphof, dividindo-se emseguida em duas partes
Assim sendo, existem quatro reas de terra que ladeiam
rio: as reas de terra (A-D) esto interligadas por setepontes (a-g) O problema das pontes de Koenigsberg consiste em se
determinar se, ao partir de alguma rea de terra, possvel atravessar todos os pontos exatamente uma vezpara, em seguida, retornar rea de terra inicial
3
HistricoHistrico
possvel caminhar sobre cada ponte exatamente umanica vez e retornar ao ponto de origem?
A D
B
Cc d
ab
f
g
Rio Pregale
HistricoHistrico
Um caminho possvel consistiria em iniciar na rea deterra B, atravessar a ponte a para a ilha A; pegar a pontee para chegar rea D, atravessar a ponte g, chegando C; cruzar a ponte d at A; cruzar a ponte b at B e aponte f, chegando a D
A D
B
Cc d
ab
f
g
Rio Pregale
5
HistricoHistrico Um caminho possvel consistiria em iniciar na rea de
terra B, atravessar a ponte a para a ilha A; pegar a pontee para chegar rea D, atravessar a ponte g, chegando aC; cruzar a ponte d at A; cruzar a ponte b at B e aponte f, chegando a D
Esse caminho no atravessa todas as pontes uma vez,nem tampouco retorna rea inicial de terra B
Euler provou que no possvel o povo de Koenigsbergatravessar cada ponte exatamente uma vez, retornandoao ponto inicial
Ele resolveu o problema, representando as reas de terracomo vrtices e as pontes como arestas de um grafo (na
realidade, um multigrafo)
DefinioDefinio Um grafo G(V,E) composto de
V um conjunto no-vazio de vrticesvrtice (vertex); vrtices (vertices, vertexes)
E um conjunto de arestas (edges), conectando os vrtices emV
Uma aresta (u,v) um par de vrtices, ou seja, uV e vV
Usaremos a notao V ou V(G) para representar o conjunto de vrtices de G E ou E(G) para representar o conjunto de arestas de G G ou G=(V,E) ou G(V,E) para representar um grafo n = |V| o nmero de vrtices e = |E| o nmero de arestas
Em geral, |A| indica a cardinalidade (nmero deelementos) do conjunto A
5/21/2018 Aed II Grafos
2/40
7
Problema das Pontes deProblema das Pontes deKoenigsbergKoenigsberg como um Grafocomo um Grafo
C
B
A D
c d
a b
e
g
f
A D
B
Cc d
ab
f
g
Rio Pregal
e
Problema das Pontes deProblema das Pontes deKoenigsbergKoenigsberg como um Grafocomo um Grafo
A soluo elegante e tem aplicao a todos os grafos Definindo o grau de um vrtice como sendo o nmero de
arestas que lhe so incidentes, Euler mostrou que existeum caminho com ponto de incio em qualquer vrtice, qupassa atravs de cada aresta exatamente uma vez etermina no vrtice inicial contanto que o grau de cadavrtice seja par
O caminho que cumprir com essas condies denominado Euleriano No existe nenhum caminho Euleriano nas pontes de
Koenigsberg, uma vez que todos os quatro vrtices tmgrau mpar
9
ExemploExemplo
V={a,b,c,d,e}
E={(a,b),(a,c),(a,d),(b,e),(c,d),(c,e),(d,e)}
Nmero de vrtices, n n = |V| = 5
Nmero de arestas, e
e = |E| = 7
a b
d e
c
AplicaesAplicaes
Anlise de circuitos eltricosVerificao de caminhos mais curtosAnlise de planejamento de projetos (scheduling Identificao de compostos qumicosGenticaCibernticaLingsticaCincias Sociais, etcPode-se afirmar que de todas as estruturas
matemticas, grafos so as que se encontramem uso mais amplo
11
TerminologiaTerminologiaEm um grafo no-orientado (ou no-dirigido),
no h ordenao especial no par de vrticesque representam qualquer aresta Assim sendo, os pares (u,v) e (v,u) representam a
mesma aresta
Num grafo orientado (ou dirigido ou dgrafo)cada aresta representada por um par dirigido(u,v), onde u o incio e v o trmino da aresta Assim sendo (u,v) e (v,u) representam duas arestas
distintas
TerminologiaTerminologia Os grafos G1 e G2 so no-orientados
O grafo G3 um grafo orientado (dgrafo)
Observe que as arestas de um grafo orientado sodesenhadas com uma seta que vai do incio at o trmino
1
2 3
4
1
2
4
1
5
2
3
3
6 7
G2 G3G1
5/21/2018 Aed II Grafos
3/40
13
TerminologiaTerminologia
V(G1)={1,2,3,4}; E(G1)={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}
V(G2)={1,2,3,4,5,6,7};E(G2)={(1,2),(1,3),(2,4),(2,5),(3,6),(3,7)}
V(G3)={1,2,3}; E(G3)={(1,2), (2,1), (2,3)}
1
2 3
4
1
2
4
1
5
2
3
3
6 7
G2 G3G1
TerminologiaTerminologia
O grafo G2 tambm uma rvore, ao passque os grafos G1 e G3 no so
1
2 3
4
1
2
4
1
5
2
3
3
6 7
G2 G3G1
15
TerminologiaTerminologia
As rvores podem ser definidas como sendocasos especiais de grafos (veremos isso maisadiante)
Vamos precisar que se (vi,vj) ou (vj,vi) umaaresta em E(G), ento v ivj
Uma vez que E(G) um conjunto, um grafo nopode ter ocorrncias mltiplas da mesma aresta
Quando h mais de uma ocorrncia de uma mesmaaresta, o objeto de dados denominado multigrafo
O mesmo valido para V(G), ou seja, no hocorrncias mltiplas de um mesmo vrtice
Nmero Mximo de ArestasNmero Mximo de Arestas
O nmero de pares diferentes no-ordenados(vi,vj) com vivj em um grafo com n vrtices n*(n-1)/2
Assim, o nmero mximo de arestas em qualquegrafo no-orientado com n vrtices n*(n-1)/2
Um grafo no-orientado com n vrtices e comexatamente n*(n-1)/2 arestas denominadocompleto; caso contrrio denominado
incompleto (ou no-completo)Para o caso de um grafo orientado com n
vrtices, o nmero mximo de arestas n*(n-1)
17
Nmero Mximo de ArestasNmero Mximo de ArestasIntuitivamente, em um grafo completo com n
vrtices, cada um dos n vrtices incidente a (n-1) arestas; assim, cada aresta contada duasvezes, ou seja, resultando em n*(n-1)/2
1
2
5
4
3
1
2
3
4
Nmero Mximo de Arestas emNmero Mximo de Arestas em
uma rvoreuma rvoreUma rvore com n vrtices possui exatamente
(n-1) arestas
1
2
4 5
3
6 7
4
5
12
3
rvore1 rvore2
5/21/2018 Aed II Grafos
4/40
19
Grafos Completo e IncompletoGrafos Completo e Incompleto
G1 o grafo completo com 4 vrtices,enquanto que G2 e G3 so grafosincompletos
1
2 3
4
1
2
4
1
5
2
3
3
6 7
G2 G3G1
Grafos CompletosGrafos Completos
Em geral, Kn denota o grafo completo comn vrtices
1 1
2
1 3
2
1
2
3
4
1
2
5
3
K1 K2 K3 K4 K5
21
Vrtices AdjacentesVrtices Adjacentes
Sendo (u,v) uma aresta em E(G), dizemosque os vrtices u e v so adjacentes e quea aresta (u,v) incidente nos vrtices u ev
1
2 3
4
1
2
4
1
5
2
3
3
6 7
G2 G3G1
Vrtices AdjacentesVrtices Adjacentes
Os vrtices adjacentes ao vrtice 3 em G2 so 1,6 e 7
Em G3, as arestas incidentes ao vrtice 2 so(1,2), (2,1) e (2,3)
1
2 3
4
1
2
4
1
5
2
3
3
6 7
G2 G3G1
23
GrauGrauO grau de um vrtice v, escrito como grau(v), o nmero
de arestas incidentes no vrtice v Caso G seja um grafo orientado:
o grau de entrada de um vrtice v definido como sendo onmero de arestas para as quais v seja o trmino
o grau de sada o nmero de arestas para as quais v o incio
Em grafo G com n vrtices {v1, v2, ..., vn} e e arestas, fcil perceber que
No restante desta apresentao vamos nos referir a umgrafo orientado como dgrafo; um grafo no-orientadoser, por vezes, chamado simplesmente de um grafo
=
=n
i
ivgraue1
)(2
1
GrauGrauO grau de vrtice 1 em G1 3
O vrtice 2 de G3 tem grau de entrada igual a 1,grau de sada igual a 2 e grau igual a 3
1
2 3
4
1
2
4
1
5
2
3
3
6 7
G2 G3G1
5/21/2018 Aed II Grafos
5/40
25
SubgrafoSubgrafo
Um subgrafo de G um grafo G' tal queV(G') V(G) e E(G') E(G)
1
2 3
4
1
2 3 2 3
4
Subgrafos de G1
1
2 3
4
1
G1
SubgrafoSubgrafo
Um subgrafo de G(V,E) um grafoG(V,E) tal que V(G') V(G) e E(G') E(G)
Subgrafos de G3
1
2
3
G3
1
2
3
1
2
3
1
22
27
CliqueClique
O clique de um grafo G um subgrafo deG que seja completo
1
2
3
4
G
1
2
3
clique de G
CaminhoCaminho
Um caminho (path) do vrtice vp para o vrtice vno grafo G uma seqncia de vrtices vp, vi1,vi2, ...,vin, vq de tal maneira que (vp,vi1), (vi1,vi2),...,(vin,vq) so arestas em E(G)
O comprimento (ou tamanho) de um caminho o nmero de arestas que ele contm
Um caminho simples um caminho em que sodiferentes todos os vrtices, com a possvelexceo do primeiro e o do ltimo
Um ciclo um caminho simples em que oprimeiro e o ltimo vrtices so iguaisUm trajeto um caminho no qual todas as
arestas so distintas
29
CaminhoCaminho
a b
d e
c
a b
d e
c
Caminho: a,b,e,d,cTamanho: 4
Ciclo: c,e,d,cTamanho: 3
CaminhoCaminho O caminho (1,2),(2,4),(4,3) em G1, tambm escrito como
1,2,4,3, caminho simples ao passo que (1,2),(2,4),(4,2)escrito como 1,2,4,2 tambm um caminho em G1, masno um caminho simples Ambos caminhos tm comprimento 3 em G1
1
2 3
4
1
2
4
1
5
2
3
3
6 7
G2 G3G1
5/21/2018 Aed II Grafos
6/40
31
CaminhoCaminho
1,2,3 um caminho simples orientado em G31,2,3,2 no um caminho em G3, uma vez que a
aresta (3,2) no se encontra em E(G3)
1
2 3
4
1
2
4
1
5
2
3
3
6 7
G2 G3G1
CicloCiclo
1,2,3,1 um ciclo em G1 1,2,1 um ciclo orientado em G3 Normalmente, para grafos orientados, acrescentamos o
termo "orientado" aos termos ciclo e caminho
1
2 3
4
1
2
4
1
5
2
3
3
6 7
G2 G3G1
33
CaminhosCaminhos HamiltonianoHamiltoniano ee EulerianoEuleriano
Caminho ou Ciclo Hamiltoniano um caminho que contm
cada vrtice do grafoexatamente uma vez.
Um ciclo v1, ..., vk, vk+1 hamiltoniano quando ocaminho v1, ..., vk o for
Caminho ou Ciclo Euleriano um caminho que contm
cada aresta do grafoexatamente uma vez
caminho hamiltoniano 3, 4, 5, 2,
1, 6 caminho euleriano 3, 4, 5, 3, 2,
5, 6, 2, 1, 6
1
4
2 6
3 5
Vrtices e Grafos InterligadosVrtices e Grafos Interligados
Em um grafo no-orientado G dois vrtices vp evq se dizem interligados se houver um caminhoem G desde vp at vq (uma vez que G no orientado, isto significa que h tambm umcaminho desde vq at vp)
Um grafo no-orientado se diz interligado(conexo) se para cada par de vrtices individuaisvi e vj em V(G) existe um caminho desde vi at vj
em G; caso contrrio G no-interligado(desconexo)Assim, se e
5/21/2018 Aed II Grafos
7/40
37
Componente ConexoComponente Conexo
Uma rvore um grafo conexo sem ciclos(acclico)
Uma floresta uma coleo de rvores
1
2 3
5
4
1211
1310
14
181715
16 19
98
76
20
rvore
rvore
rvore
rvore
Componente ConexoComponente Conexo
Uma rvore um grafo conexo sem ciclos(acclico)
Uma floresta uma coleo de rvores
1
2 3
5
4
1211
1310
14
181715
16 19
98
76
20
rvore
rvore
rvore
rvore
Floresta
39
rvore um Grafo Conexo Acclicorvore um Grafo Conexo Acclico
Teorema: Um grafo G uma rvore se e somente se existir um nico
caminho entre cada par de vrtices G
Prova: Se G uma rvore ento G conexo Portanto existe pelo menos um caminho entre cada par de
vrtices v e w de G Suponha que existem dois caminhos distintos (v,P1,w) e (v,P2,w)
entre v e w; ento o caminho (v,P1,w,P2,v) forma um ciclo, o quecontradiz G ser acclico
Reciprocamente, se existe exatamente um caminho entre cadapar de vrtices de G, ento o grafo obviamente conexo, e almdisso no pode conter ciclos
Portanto, G uma rvore
Componente ConexoComponente Conexo
Um grafo orientado G se diz fortementeconexo (fortemente interligado) se paracada par de vrtices diferentes vi e vj emV(G) existe um caminho orientado desde vat vj e tambm de vj para vi
Um componente fortemente interligado
um subgrafo mximo fortementeinterligado
41
Componente ConexoComponente ConexoO grafo G3 no est fortemente interligado, uma
vez que no existe nenhum caminho de v3 at v2G3 tem dois componentes fortemente interligados
1
2
3
G3
1
2
Componentes de G3 fortemente interligados
3
DistnciaDistnciaA distncia d(v,w) entre dois vrtices v e w de
um grafo o tamanho do menor caminho entre ve w
No exemplo, d(1,4) = 1
1
2 3
4
G1
5/21/2018 Aed II Grafos
8/40
43
ExcentricidadeExcentricidade
A excentricidade de um vrtice v adistncia mxima entre v e w, para todo wde V(G)
7
1 2
4 3
56
37
36
25
24
23
3231
ExcentricidadeVrtice
CentroCentro
O centro de um grafo G o subconjuntode vrtices de excentricidade mnima
No exemplo, centro(G)={3,4,5}
7
1 2
4 3
56
37
36
25
24
23
3231
ExcentricidadeVrtice
45
SubgrafoSubgrafo e rvore de Coberturae rvore de Cobertura
O subgrafo de espalhamento (spanning graph),ou subgrafo geradorou subgrado estendido,de um grafo G1(V1,E1) um subgrafo G2(V2,E2)de G1, onde V1 = V2
Quando o subgrafo de espalhamento umarvore, ele recebe o nome de rvore deespalhamento, ou rvore geradora ou rvoreestendida (spanning tree)
Dessa forma, a rvore de geradora de um grafo
G uma rvore contendo todos os vrtices de GUm grafo G pode possuir vrias rvores de
cobertura
SubgrafoSubgrafo e rvore de Coberturae rvore de Cobertura
G2, G3 e G4 so subgrafos de cobertura de G1 G3 e G4 so subgrafos de cobertura de G2 G4 subgrafo de cobertura de G3 G4 rvore de cobertura de G1, G2 e G3
1
2 3
4
G1
1
2 3
4
G2
1
2 3
4
G3
1
2 3
4
G4
47
rvore de Coberturarvore de CoberturaTodo grafo conexo G(V,E) possui uma
rvore de cobertura que pode ser obtida daseguinte forma Para cada aresta (u,v) E(G)Se G(V,E-{(u,v)}) for conexo ento remova (u,v) de
G
Quando todas as arestas quepermanecerem tiverem sido consideradas,o grafo resultante uma rvore de
cobertura de G
PlanaridadePlanaridade Seja G um grafo e uma representao geomtrica de G
em um plano (duas dimenses)A representao denominada plana quando no houve
cruzamento de linhas (exceto nos vrtices) Um grafo denominado planarse possuir pelo menos
uma representao planaAs linhas de representao dividem o plano em regies,
denominadas faces Existe exatamente uma regio ilimitada (chamada face externa) Duas representaes planas de um mesmo grafo possuem
sempre o mesmo nmero de faces
Todo grafo planar admite uma representao plana em
que todas as linhas so retas
5/21/2018 Aed II Grafos
9/40
49
PlanaridadePlanaridade
Se G um grafo planar ento n+f= e+2 n=|V|, e=|E|, f o nmero de faces
Se G um grafo planar ento e 3*n-6
Assim, quanto maior o nmero de arestas em relao aonmero de vrtices, mais difcil se torna obterrepresentaes planas
1 1
2
1 3
2
K1 K2 K3
K1, K2 e K3 soplanares
PlanaridadePlanaridade
Se G um grafo planar ento n+f= e+2 n=|V|, e=|E|, f o nmero de faces
Se G um grafo planar ento e 3*n-6
K4 plan
1
2
3
4
K4
1
2
3
4
K4
1
2
3
4
K4
Representaono planar
Representaoplanar
Representaoplanar com todas linhas retas
51
PlanaridadePlanaridade
Se G um grafo planar ento n+f= e+2 n=|V|, e=|E|, f o nmero de faces
Se G um grafo planar ento e 3*n-6
K5 no planar
1
2
5
4
3
K5
1
2
5
4
3
K5
PlanaridadePlanaridade
Se G um grafo planar ento n+f= e+2 n=|V|, e=|E|, f o nmero de faces
Se G um grafo planar ento e 3*n-6
G no planar
1 2 3
G
4 5 6
53
ColoraoColoraoUma colorao de G(V,E) uma atribuio de
alguma cor para cada vrtice de V, de forma quedois vrtices adjacentes possuam cores distintas
Uma k-colorao uma colorao que utiliza ummximo de k cores
O nmero cromtico de um grafo G nmeromnimo de cores k para o qual existe uma k-colorao de G
Colorir um grafo simples, entretanto no trivialencontrar um algoritmo eficiente para obtenodo nmero cromtico; na realidade ainda
desconhecido um algoritmo eficiente para isso
ColoraoColoraoNumero cromtico de G1 = 4; G2 = 3, G3 =
2; G4 = 2
1
2 3
4
1
2
4 5
3
6
G4G1
1
2 3
4
G2
1
2 3
4
G3
5/21/2018 Aed II Grafos
10/40
55
ColoraoColorao
O problema das 4 cores, ou colorao de mapasusando quatro cores, data de 1852 quando o inglsFrancis Guthrie observou que apenas quatro cores eramsuficientes para colorir o mapa dos condados daInglaterra
O problema das 4 cores consiste em colorir os pases deum mapa arbitrrio plano, cada pas com uma cor, de tal
forma que pases fronteirios possuam cores diferentes,usando no mximo 4 cores, teorema provado em 1977por Appel e Haken
Desde a prova do teorema, os algoritmos mais eficientesencontrados para 4-colorao de mapas quererem O(n2),onde n o nmero de vrtices
ColoraoColorao
Cada regio do mapa substituda por um vrtice
Dois vrtices so conectados por uma aresta se esomente se as duas regies so fronteirias(compartilham um segmento de borda)
1
2
43
1
2
43
57
EspecificaoEspecificao
bool Graph::Empty(); retorna true se o grafo est vazio; false caso contrrio
int Graph::numVertices(); Retorna o nmero de vrtices
int Graph::numEdges(); Retorna o nmero de arestas
int Graph::Size(); Retorna o nmero de vrtices mais arestas
vertex Graph::Vertex(int i) Retorna o i-simo vrtice, 1
5/21/2018 Aed II Grafos
11/40
61
Matriz de AdjacnciasMatriz de Adjacncias
Seja G=(V,E) um grafo com n vrtices, n1A matriz de adjacnciasA de G um arranjo
bidimensional n x n com a propriedade de que A[i,j] = 1 se a aresta (vi,vj) pertence a E(G) A[i,j] = 0 caso contrrio
A matriz de adjacncias para um grafo no-orientado simtrica, pois a aresta (vi,vj) est em E(G), se a aresta(vj,vi) tambm est em E(G)
A matriz de adjacncias de um grafo orientado no necessariamente simtrica
O espao necessrio para representar um grafo usando amatriz de adjacncias de n2 bits Aproximadamente metade desse espao pode ser poupado no
caso dos grafos no-orientados, armazenando apenas o tringulosuperior ou inferior da matriz
Matriz de AdjacnciasMatriz de Adjacncias
0
1
11
4
1114
0113
10121101
3211
2 3
4
G1
0
1
0
3
003
012
101
21
1
2
3
G3
63
Matriz de AdjacnciasMatriz de Adjacncias
1
2
4 5
3
6 7
G21
1
0
0
0
0
1
3
0
0
0
0
0
1
0
4
0
0
0
0
0
1
0
5
11013
00104
00105
00006
0
0
0
7
0007
0012
0101
621
Matriz de AdjacnciasMatriz de Adjacncias
0
1
0
1
0
0
0
0
6
01100006
0
0
0
1
0
0
1
3
0
0
0
0
1
1
0
4
0
0
0
0
0
0
0
5
00013
00104
00005
10007
0
0
0
8
1008
0012
0101
721
1
2 3
4
G4
5
6 7
8
65
Matriz de AdjacnciasMatriz de AdjacnciasA partir da matriz de adjacncias possvel
determinar se existe uma aresta que ligaquaisquer dois vrtices vi e vj
Para um grafo no-orientado, o grau de qualquervrtice vi vem a ser a soma de sua linha:
Para um grafo orientado, a soma da linha ograu de sada ao passo que a soma da colunavem a ser o valor grau de entrada
=
n
j
jiA1
],[
Matriz de AdjacnciasMatriz de Adjacncias Suponha que queremos responder perguntas sobre
grafos tais como: Quantas arestas existem em G? Ser que G est interligado?
Usando as matrizes de adjacncias, todos os algoritmosvo exigir, pelo menos, O(n2) de tempo uma vez que (n2-n) entradas da matriz (a diagonal principal possuisomente zeros) tm de ser examinadas
Se o grafo for esparso, isto , quando a maioria dostermos na matriz de adjacncias for zero, possvelresponder as perguntas acima em tempo O(n+e), onde e o nmero de arestas em G e e
5/21/2018 Aed II Grafos
12/40
67
Lista de AdjacnciasLista de Adjacncias
Nesta representao as n linhas da matriz deadjacncias so representadas como n listasencadeadas, ou seja, existe uma lista para cadavrtice em G
Os ns na lista i representam os vrtices que so
adjacentes ao vrtice viCada n possui, pelo menos, dois campos Um campo que contm o ndice do vrtice adjacente
ao vrtice vi Um campo de ligao com o prximo vrtice adjacente
ao vrtice vi
Lista de AdjacnciasLista de Adjacncias
1
2 3
4
G1
2 3
4
3
2
1 4
1 3 4
1 2 4
1 2 3
N decabealho
N de lista
69
Lista de AdjacnciasLista de Adjacncias
G3
2
3
2
1
1 31
2
3
Lista de AdjacnciasLista de Adjacncias
1
2
4 5
3
6 7
G2
2
7
6
5
4
3
2
1
2
3
3
2 3
1 4 5
1 6 7
71
Lista de AdjacnciasLista de Adjacncias
1
2 3
4G4
5
6 7
8
87
6
5
4
3
2
1
7
2 3
1 4
1 4
6
2 3
5 7
6 8
Lista de AdjacnciasLista de Adjacncias Cada lista possui um n de cabealho (incio ou headda
lista) Os ns de cabealho so seqenciais, permitindo fcil acesso
aleatrio lista de adjacncias de determinado vrtice
No caso de um grafo no-orientado com n vrtices e aarestas, essa representao requer n ns de cabealho e2*a ns de lista, sendo que cada n de lista possui 2campos (vrtice adjacente + ligao)
Em termos de quantidade de bits de memria necessriaessa contagem deve ser multiplicada por log2(n) para osns de cabealho e por log2(n)+log2(a) para os ns delista, uma vez que so necessrios Iog2(x) bits pararepresentar um nmero de valor x
Em alguns casos os ns podem ser condensadosseqencialmente nas listas de adjacncias eliminando-seos campos de ligao
5/21/2018 Aed II Grafos
13/40
73
Lista de AdjacnciasLista de Adjacncias
O grau de qualquer vrtice em um grafo no-orientado pode ser determinado simplesmentecontando o nmero de ns na respectiva lista deadjacncias
Portanto, o nmero total de arestas pode serdeterminado em tempo O(n+e)
No caso de um dgrafo, o nmero total de arestascorresponde ao nmero de ns de lista
O grau-de-sada de qualquer vrtice pode serdeterminado contando o nmero de ns na listade adjacncias
O nmero total de arestas em G pode, portanto,ser determinado em O(n+e)
Lista de AdjacnciasLista de Adjacncias
Determinar o grau de entrada de um vrtice uma tarefaum pouco mais complexa, havendo necessidade de teracesso repetidamente a todos os vrtices adjacentes aoutro vrtice
Assim, talvez seja conveniente o esforo de manter outroconjunto de listas, alm das listas de adjacncias
Esse conjunto de listas, chamado de listas de
adjacncia inversa, conter uma lista para cada vrtice Cada vrtice conter um n para cada vrtice adjacente ao vrtic
que representa
Alternativamente, pode-se adotar Listas Cruzadas,estrutura tambm utilizada para a representao dematrizes esparsas
75
Lista de Adjacncias InversaLista de Adjacncias Inversa
G3
2
3
2
1
1 3
1
2
3
2
3
2
1
1
2
Lista de Adjacncias
(arestas que partem de cada n)
Lista de Adjacncias Inversa
(arestas que chegam em cada n)
RepresentaoRepresentao
Em algumas situaes so atribudos pesos sarestas de um grafo
Esses pesos podem representar a distncia deum vrtice para outro ou o custo de se passar deum vrtice para outro adjacente
Neste caso as entradas da matriz de adjacnciasA[i,j] mantm tambm essas informaesNo caso das listas de adjacncias, essa
informao sobre pesos pode ser conservada
nos ns de listas, incluindo um campo adicionalUm grafo com arestas dotadas de pesos
denominado rede ou grafo ponderado
77
BuscaBuscaPartindo-se do n de raiz de uma rvore binria,
uma das coisas que se efetua de forma muitofreqente atravessar a rvore e visitar os nsem alguma seqncia Por exemplo, as trs maneiras bsicas de fazer isto
so: pr-ordem, em-ordem e ps-ordem
Um problema anlogo ocorre em grafos: sendoG(V,E) um grafo no-orientado e um vrtice v emV(G), estamos interessados em visitar todos os
vrtices em G que so alcanveis a partir de v(isto , todos os vrtices interligados a v)
Busca em GrafosBusca em GrafosSeja G um grafo conexo em que todos os seus
vrtices se encontram desmarcados Inicialmente, marca-se um vrtice
arbitrariamente escolhidoAps isso, seleciona-se algum vrtice v que
esteja marcado e seja incidente a alguma aresta(v,w) ainda no selecionada
A aresta (v,w) torna-se ento selecionada e ovrtice w marcado (caso ainda no o seja)
O processo termina quando todas as arestas de
G tiverem sido selecionadas
5/21/2018 Aed II Grafos
14/40
79
Busca em GrafosBusca em Grafos
Quando a aresta (v,w) selecionada a partir dovrtice marcado v, diz-se que (v,w) foi visitada(ou explorada) e o vrtice w foi alcanado
Um vrtice torna-se visitado (ou explorado)quando todas as arestas incidentes a ele tiverem
sido exploradasAssim, durante o processo de explorao de um
vrtice possvel que este venha a ser alcanadodiversas vezes
O vrtice inicial denominado raiz da busca
Busca em GrafosBusca em Grafos
procedure GeneralSearch
escolher e marcar um vrtice inicial (raiz dabusca);
while existe algum vrtice v marcado e incidente auma aresta (v,w) no exploradado
escolher o vrtice v;
visitar a aresta (v,w);
if w no est marcadothen
marcar w;
endif
endwhile
endGeneralSearch
1
2 3
4
1
2
4 5
3
6 7
G2G1
81
Busca em GrafosBusca em Grafos
Na busca geral, a escolha do prximovrtice e da aresta a ser visitada arbitrria
Nos critrios de busca em profundidade ebusca em largura a escolha do prximovrtice torna-se nica Entretanto, a escolha do vrtice inicial e aresta
incidente permanece arbitrria
Busca em GrafosBusca em Grafos
Busca em Profundidade (depth first search) Uma busca dita em profundidade quando o critrio de escolha
do vrtice marcado (a partir do qual ser realizada a prximavisita de aresta) obedecer ao seguinte: Dentre todos os vrticesmarcados e incidentes a alguma aresta ainda no visitada,escolher aquele mais recentemente alcanado na busca
Busca em Largura (breadth first search) Uma busca dita em largura quando o critrio de escolha do
vrtice marcado (a partir do qual ser realizada a prxima visitade aresta) obedecer ao seguinte: Dentre todos os vrticesmarcados e incidentes a alguma aresta ainda no visitada,
escolher aquele menos recentemente alcanado na busca
83
Busca em ProfundidadeBusca em ProfundidadeA pesquisa em profundidade de um grafo se
realiza da seguinte maneira: Visita-se o vrtice inicial v Em seguida um vrtice no visitado w, adjacente a v,
selecionado iniciando-se uma pesquisa emprofundidade, a partir de w
Atingindo-se um vrtice u tal que tenham sido visitadostodos seus vrtices adjacentes, voltamos para o ltimovrtice visitado que tem vrtice w no visitadoadjacente ao mesmo e iniciamos uma pesquisa emprofundidade a partir de w
A busca termina quando nenhum vrtice no
visitado pode ser atingido de qualquer umdaqueles que foram visitados
Busca em ProfundidadeBusca em Profundidade
d fe
a
b c
g
h i j k
Inserir na frente, remover da frente: a
5/21/2018 Aed II Grafos
15/40
5/21/2018 Aed II Grafos
16/40
5/21/2018 Aed II Grafos
17/40
97
SoluoSoluo
Fornea a ordem em queso visitados os vrticesdo grafo ao lado usandobusca em profundidade(caso um vrtice tenhamais de um vrticeadjacente a ele, visiteprimeiro os vrtices de
menor nmero),assumindo a raiz dabusca como: vrtice 1
1,2,4,5,3,6,7 vrtice 4
4,2,1,3,6,7,5
1
2
4 5
3
6 7
G2
1
2
4
5
3
6 7G
2
Algoritmo de Busca emAlgoritmo de Busca emProfundidadeProfundidade// Dado um grafo G=(V,E) com n vrtices e arranj
VISITED[1..n] zerado inicialmente, este algoritmvisita em profundidade todos os vrticealcanveis a partir de v
procedure DepthFirstSearch(v)
VISITED[v] true; // marque v como visitado
for cada vrtice w adjacente a vdo
if not VISITED[w] thenDepthFirstSearch(w);
endif
next w
endDepthFirstSearch
100
Algoritmo de Busca emAlgoritmo de Busca emProfundidadeProfundidade
procedure DepthFirstSearch(v)
VISITED[v] true; // marque v como visitado
for cada vrtice w adjacente a vdo
if not VISITED[w] then
DepthFirstSearch(w)
endif
next w
endDepthFirstSearch
// procedimento que chama DepthFirstSearch
for i 1 to n do
VISITED[i] false;next i
escolher vrtice raiz da busca, v;
DepthFirstSearch(v);
Algoritmo de Busca emAlgoritmo de Busca emProfundidadeProfundidade
Como pode ser observado, o algoritmo de buscaem profundidade possui uma chamada recursivano final
Portanto o algoritmo recursivo pode sersubstitudo por uma verso iterativa por meio douso de uma pilha
Alm disso, as arestas de retorno tambm podem
ser visitadas estendendo o algoritmo fornecidoA implementao dessas alteraes deixada
como exerccio
103
Busca em LarguraBusca em Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: a
Busca em LarguraBusca em Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: b, c
5/21/2018 Aed II Grafos
18/40
5/21/2018 Aed II Grafos
19/40
111
Busca em LarguraBusca em Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: i, j, k
Busca em LarguraBusca em Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: j, k
113
Busca em LarguraBusca em Largura
d fe
a
b c
g
h i j k
Inserir no final, remover da frente: k
Busca em LarguraBusca em Largura
d fe
a
b c
g
h i j k
Ordem de visita partindo do vrtice a: a,b,c,d,e,f,g,h,i,j,k
115
ExerccioExerccio Fornea a ordem em que
so visitados os vrticesdo grafo ao lado usandobusca em largura (casoum vrtice tenha mais deum vrtice adjacente aele, visite primeiro osvrtices de menornmero), assumindo a raizda busca como: vrtice 1
vrtice 4
1
2
4 5
3
6 7
G2
SoluoSoluo Fornea a ordem em que
so visitados os vrticesdo grafo ao lado usandobusca em largura (casoum vrtice tenha mais deum vrtice adjacente aele, visite primeiro osvrtices de menornmero), assumindo a raizda busca como: vrtice 1
1,2,3,4,5,6,7
vrtice 44,2,1,5,3,6,7
1
2
4 5
3
6 7
G2
1
2
4
5
3
6 7G2
5/21/2018 Aed II Grafos
20/40
117
Algoritmo de Busca em LarguraAlgoritmo de Busca em Largura
Para o algoritmo de busca em largura, uma filaser necessria
Para tanto, assume-se que os mtodos do ADTfila encontram-se disponveis Quando um vrtice adicionado na fila, usa-se a
operao Append (inserir no final)
Quando um vrtice retirado da f ila, usa-se aoperao Serve (retirar do incio) O mtodo Empty retorna true se a fila est vazia;
false caso contrrio
Como na busca em profundidade, as arestas deretorno tambm podem ser visitadas estendendoo algoritmo, o que deixado como exerccio
Algoritmo de Busca em LarguraAlgoritmo de Busca em Largura
// Uma pesquisa em largura de G=(V,E) com n vrtices iniciada apartir do vrtice v. Todos os vrtices visitados so marcadoscomo sendo VISITED[i]. O arranjo VISITED[1..n] zeradoinicialmente
procedure BreadthFirstSearch(v)
VISITED[v] true; // marque v como visitado
definir uma fila Q vazia
Q.Append(v);
while not Q.Empty() do
Q.Serve(v); // retire v da fila Q
forpara cada vrtice w adjacente a vdoif not VISITED[w] then
Q.Append(w); // adicione w fila Q
VISITED[w] true; // marque w como visitado
endif
next w
endwhile
endBreadthFirstSearch
121
Algoritmo de Busca em LarguraAlgoritmo de Busca em Largura
procedure BreadthFirstSearch(v)
VISITED[v] true; // marque v como visitado
definir uma fila Q vazia
Q.Append(v);
while not Q.Empty() do
Q.Serve(v); // retire v da fila Q
forpara cada vrtice w adjacente a vdo
if not VISITED[w] then
Q.Append(w); // adicione w fila Q
VISITED[w] true; // marque w como visitado
endif
next w
endwhile
endBreadthFirstSearch
// procedimento que chama BreadthFirstSearch
for i 1 to n doVISITED[i] false;
next i
escolher vrtice raiz da busca, v;
BreadthFirstSearch(v);
Componentes ConexosComponentes Conexos
Sendo G um grafo no-orientado, pode-se determinar seest ou no interligado, por simplesmente executandoDFS ou BFS para, em seguida, determinar se existealgum vrtice no visitado
O tempo necessrio para se fazer isto de O(n2), seforem utilizadas matrizes de adjacncias e O(e) se foremutilizadas listas de adjacncias
Um problema mais interessante aquele em que sedeterminam todos os componentes conexo de um grafo,efetuando chamadas repetidas, a DFS(v) ou BFS(v),sendo v um vrtice ainda no visitado
Isso nos leva ao algoritmo Comp, que determina todos ocomponentes conexos de um grafo G
O algoritmo faz uso de DFS, sendo possvel substitu-lopor BFS, sem afetar o tempo de computao
124
Componentes ConexosComponentes Conexos// Determina os componentes conexos de G, que tem n 1
vrtices; VISITED agora um arranjo local.
procedure COMP()
// marcar todos os vrtices como no visitados
for i 1 to n do
VISITED[i] false;
next i
for i 1 to n do
if not VISITED[i] then
DepthFirstSearch(i); // procure um componente
d sada em todos os vrtices recm visitados,
junto com todas as arestas que incidem nos mesmos;
endif
next i
endCOMP
Componentes ConexosComponentes Conexosprocedure COMP()
// marcar todos os vrtices como no visitados
for i 1 to n do
VISITED[i] false;
next i
for i 1 to n do
if not VISITED[i] then
DepthFirstSearch(i); // procure um componente
d sada em todos os vrtices recm visitados,
junto com todas as arestas que incidem nos mesmos;
endif
next i
endCOMP1
2 3
4
G4 5
6 7
8
H2H1
5/21/2018 Aed II Grafos
21/40
126
Componentes ConexosComponentes Conexos
Se G for representado por lista de adjacncias, o tempototal consumido por DFS de O(e) A sada pode ser completada em tempo O(e), contando que DFS
mantenha uma relao de todos os vrtices recm visitados
Uma vez que os laos forconsomem O(n), o tempo totalnecessrio para gerar todos os componentes conexos O(n+e)
Em virtude da definio de um componente conexo,
existe um caminho entre cada par de vrtices nocomponente e no existe caminho em G do vrtice v paraw, se v e w estiverem em dois componentes diferentes
Assim, se A matriz de adjacncias de um grafo no-orientado (A simtrica), seu fechamento transitivo A+pode ser determinado em tempo O(n2) por sedeterminarem primeiro os componentes conexos (queser visto mais adiante)
rvore de Coberturarvore de Cobertura
Sendo um grafo G conexo, uma pesquisa emprofundidade ou em largura, comeando em qualquervrtice, visita todos os vrtices em G
Nesse caso, as arestas de G so divididas em doisconjuntos T, para arestas de rvore e B, para arestas de retorno, ou frondes
sendo T o conjunto de arestas utilizadas ou atravessadas
durante a busca e B o conjunto de arestas remanescente O conjunto T pode ser determinado por se inserir o
comando seguinte nas clusulas then de DFS e BFS T T {(v, w)}
As arestas em T formam uma rvore que inclui todos osvrtices de G, ou seja, uma rvore de cobertura de G
128
rvore de Coberturarvore de Cobertura
rvores de cobertura resultantes de busca emprofundidade e em largura de G, comeando pelovrtice 1
1
2
4 5
3
6 7
G
8
1
2
4 5
3
6 7
rvore de cobertura
DFS(1)
8
1
2
4 5
3
6 7
8
rvore de cobertura
BFS(1)
rvore de Coberturarvore de Cobertura
Se os ns de G representarem, por exemplo, cidades e aarestas representarem possveis meios de comunicaoentre duas cidades ento o nmero mnimo necessrio delos para interligar n cidades de (n-1) arestas As rvores estendidas de G representaro todas as escolhas
possveis Todavia, em situaes prticas so designadas s
arestas determinadas ponderaes Essas ponderaes podem representar o custo da construo, o
comprimento de ligao etc
Tendo um grafo ponderado, seria ento desejvel
selecionar para fins de construo um conjunto de elos dcomunicaes que interligariam todas as cidades, tendocusto total mnimo ou extenso total mnima Em qualquer dos casos os elos selecionados tero que formar
uma rvore (admitindo que sejam positivas todas as ponderaes
130
rvore de Coberturarvore de CoberturaAssim sendo, a seleo dos elos contm
ciclosA remoo de qualquer um dos elos desse
ciclo resultar numa seleo de elos decusto mais baixo, para interligar todas ascidades
O objetivo encontrar uma rvore decobertura de G com custo mnimo
O custo de uma rvore de cobertura ser asoma dos custos das arestas dessa rvore
rvore de Cobertura de Custorvore de Cobertura de Custo
MnimoMnimoUma abordagem para determinao de uma
rvore estendida de custo mnimo de um grafo foproposta por Kruskal
Nessa abordagem construda, aresta poraresta, uma rvore estendida de custo mnimo T
So consideradas as arestas para incluso em Tpor ordem crescente de seus custos
Uma aresta includa em T, caso no forme ciclocom as arestas j existentes em T
Uma vez que G est interligado e possui n > 0vrtices, sero selecionadas exatamente n-1
arestas para incluso em T
5/21/2018 Aed II Grafos
22/40
132
rvore de Cobertura de Custorvore de Cobertura de CustoMnimoMnimo
Quais as duas primeiras arestas a seremincludas em T, lembrando que as arestas soselecionadas por ordem crescente de seuscustos?
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
3
Componentes conexos: {1}, {2}, {3}, {4}, {5}, {6}
rvore de Cobertura de Custorvore de Cobertura de CustoMnimoMnimo
As primeiras duas arestas (2,3) e (2,4)esto includas em T
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
3
5
Componentes conexos: {1}, {2,3}, {4}, {5},
134
rvore de Cobertura de Custorvore de Cobertura de CustoMnimoMnimo
As primeiras duas arestas (2,3) e (2,4)esto includas em T
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
36
5
Componentes conexos: {1}, {2,3,4}, {5}, {6}
rvore de Cobertura de Custorvore de Cobertura de CustoMnimoMnimo
A prxima aresta a ser considerada (4,3)que liga entre si dois vrtices j interligadosem T e por isso rejeitada
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
36
5
10
Componentes conexos: {1}, {2,3,4}, {5}, {
136
rvore de Cobertura de Custorvore de Cobertura de Custo
MnimoMnimoA aresta (2,6) selecionada...
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
3
11
6
5
Componentes conexos: {1}, {2,3,4,6}, {5}
rvore de Cobertura de Custorvore de Cobertura de Custo
MnimoMnimoA aresta (2,6) selecionada, ao passo que (4,6)
rejeitada, uma vez que os vrtices 4 e 6 jesto ligados em T, sendo que a incluso de(4,6) resultaria num ciclo
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
3
11
14
6
5
Componentes conexos: {1}, {2,3,4,6}, {5
5/21/2018 Aed II Grafos
23/40
138
rvore de Cobertura de Custorvore de Cobertura de CustoMnimoMnimo
Finalmente, so includas as arestas (1,2)...
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
3
16
11
6
5
Componentes conexos: {1,2,3,4,6}, {5}
rvore de Cobertura de Custorvore de Cobertura de CustoMnimoMnimo
Finalmente, so includas as arestas (1,2) e(4,5)
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
3
16
11
18
6
5
Componentes conexos: {1,2,3,4,5,6}
140
rvore de Cobertura de Custorvore de Cobertura de CustoMnimoMnimo
Nesse ponto, T possui n-1 arestas, sendo umarvore que abrange n vrtices
A rvore de cobertura obtida tem custo de 56
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
3
16
11
18
6
5
rvore de cobertura de custo mnimo de G
rvore de Cobertura de Custorvore de Cobertura de CustoMnimoMnimo
A seqncia de arestas consideradas para seremincludas na rvore de cobertura de custo mnimo foi: (2,3), (2,4), (4,3), (2,6), (4,6), (1,2) e (4,5)
Isto corresponde seqncia de custos 5, 6, 10, 11, 14, 16 e 18
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
3
16
11
18
6
5
rvore de cobertura de custo mnimo de
142
ExerccioExerccioEncontre a rvore de cobertura de custo
mnimo do grafo G e o custocorrespondente
4
6
21
5
3
14
5
11 21
3318
19
7
3
6
G
4
6
21
5
3
SoluoSoluoT = {(2,3), (1,5), (3,4), (1,6), (1,2)}
Custo(T) = 39
4
6
21
5
3
14
5
11 21
3318
19
7
3
6
G rvore de cobertura de custo mnimo de
4
6
21
5
3
14
5
113
6
5/21/2018 Aed II Grafos
24/40
144
Algoritmo deAlgoritmo de KruskalKruskal
function Kruskal
1 T ;
2 while T contm menos de n-1 arestas andE no vazio do
3 escolha uma aresta (v,w) de E, de menor custo;
4 E E {(v,w)}; // remova (v,w) de E
5 if (v,w) no cria um ciclo em T then
6 T T {(v, w)}; // adicione (v,w) a T
7 endif
8 endwhile
9 if T contm menos de n-1 arestasthen
10 T ; // nenhuma rvore de cobertura encontrada
11 endif
12 return T;
endKruskal
Algoritmo deAlgoritmo de KruskalKruskal
Inicialmente, E o conjunto de todas as arestas em G As nicas funes realizadas com este conjunto so:
(i) determinar uma aresta com custo mnimo (linha 3) e (ii) remover essa aresta (linha 4)
Ambas funes podem ser realizadas com eficincia, contanto que aarestas em E sejam mantidas como lista seqencial ordenada porcustos
Na realidade, no essencial classificar todas as arestas, contantoque a prxima aresta para a linha 3 possa ser determinada com
facilidade A ordenao pelo mtodo heapsortserve de maneira ideal para isto permite que a prxima aresta seja determinada e seja removida emtempo O(e*log(e)) A construo do heap em si requer tempo O(e)
O tempo de computao do algoritmo determinado pelas linhas 3 e4 que, no pior caso, de O(e*log(e))
146
Algoritmo deAlgoritmo de KruskalKruskal
Para se realizar eficientemente os passos 5 e 6, osvrtices em G devem ser agrupados de tal maneira quese possa facilmente determinar se os vrtices v e wjesto interligados pela seleo anterior de arestas Nesse caso, a aresta (v,w) deve ser descartada
Caso contrrio, (v,w) deve ser includa em T Um agrupamento possvel consistiria em se colocarem
todos os vrtices do mesmo componente conexo de Tnum conjunto (todos os componentes conexos de T serotambm rvores)
Assim, dois vrtices v e w, estaro interligados em T seestiverem no mesmo conjunto
Algoritmo deAlgoritmo de KruskalKruskal
No exemplo, onde se considera a aresta (4,3), osconjuntos seriam {1}, {2,3,4}, {5}, {6} Os vrtices 4 e 3 j esto no mesmo conjunto, de
forma que a aresta (4,3) rejeitada
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
36
5
10
148
Algoritmo deAlgoritmo de KruskalKruskal A prxima aresta a ser considerada (2,6), os conjuntos ainda so
{1}, {2,3,4}, {5}, {6} Como os vrtices 2 e 6 esto em conjuntos diferentes, a aresta aceita
interligando os dois componentes {2,3,4} e {6}
Esses dois componentes devem ser unidos para se obter o conjunto querepresenta o novo componente {2,3,4,6}
4
6
21
5
3
16
19
21 11
1433
18
6
5
10
G
4
6
21
5
3
11
6
5
Caminhos Mais CurtosCaminhos Mais Curtos Os grafos podem ser utilizados para representar a
estrutura rodoviria de um estado ou de um pas, com osvrtices representando cidades e as arestasrepresentando trechos de rodovia
As arestas podem ento ter ponderaes podem ser adistncia entre as duas cidades interligadas pela aresta,ou o tempo mdio necessrio para percorrer a referidaseo da rodovia ou mesmo o custo de combustvel
Um motorista que queira ir da cidadeA para a cidade Bestaria interessado em ter as respostas para: Existe um caminho que vai deA para B? Havendo mais de um caminho deA para B, qual o caminho mais
curto?
5/21/2018 Aed II Grafos
25/40
150
Caminhos Mais CurtosCaminhos Mais Curtos
Os grafos podem ser utilizados para representar aestrutura rodoviria de um estado ou de um pas, com osvrtices representando cidades e as arestasrepresentando trechos de rodovia
As arestas podem ento ter ponderaes podem ser adistncia entre as duas cidades interligadas pela aresta,ou o tempo mdio necessrio para percorrer a referida
seo da rodovia ou mesmo o custo de combustvel Um motorista que queira ir da cidadeA para a cidade B
estaria interessado em ter as respostas para: Existe um caminho que vai deA para B? Havendo mais de um caminho deA para B, qual o caminho mais
curto?
Caminhos Mais CurtosCaminhos Mais Curtos
O comprimento de um caminho agora definido como a soma das ponderaes dasarestas do caminho ao invs do nmero dearestas
O vrtice inicial do caminho ser denominadoorigem e o ltimo vrtice destino
Os grafos possivelmente sero dgrafos paralevar em conta as ruas de mo nica
A no ser que se indique ao contrrio,admitiremos que todas as ponderaes sopositivas
152
Origem nica de Todos os DestinosOrigem nica de Todos os Destinos
Sejam G(V,E) um grafo dirigido w(e) uma funo de ponderao para as
arestas de G vo o vrtice de origem
O problema consiste em se determinarquais os caminhos mais curtos de vo para
todos os demais vrtices de GAdmite-se que todas as ponderaes
sejam positivas
Origem nica de Todos os DestinosOrigem nica de Todos os Destinos
No exemplo, os nmeros aplicados s arestasso as ponderaes
Sendo vo=0 o vrtice de origem, o caminho maiscurto de 0 para 1 0,2,3,1 O comprimento desse caminho 10+15+20 = 45
0 1 4
2 3 5
50
15
15 3
20 10 20
10
35
30
45
154
Origem nica de Todos os DestinosOrigem nica de Todos os Destinos No exemplo, os nmeros aplicados s arestas so as ponderaes Sendo vo=0 o vrtice de origem, o caminho mais curto de 0 para 1
0,2,3,1 O comprimento desse caminho 10+15+20 = 45
Ainda que esse caminho apresente trs arestas, ele mais curto doque o caminho 0,1 cujo comprimento 50
No existe caminho de 0 para 5
450,4450,2,3,1
250,2,3
100,2
ComprimentoCaminho0 1 4
2 3 5
50
15
15 3
20 10 20
10
35
30
45
Caminhos mais curtos de vopara todos os destinos
Origem nica de Todos os DestinosOrigem nica de Todos os DestinosOs caminhos foram relacionados por ordem
crescente de comprimentoSe elaborarmos um algoritmo que gere os
caminhos mais curtos, nessa ordem, podemosento chegar a diversas observaes
Seja S o conjunto de vrtices (inclusive vo) paraas quais j foram encontrados os caminhos maiscurtos
Para o caso de w S, seja DIST[w] ocomprimento do caminho mais curto, partindo devo e passando unicamente por aqueles vrtices
que esto em S e que terminem em w
5/21/2018 Aed II Grafos
26/40
156
Origem nica de Todos os DestinosOrigem nica de Todos os Destinos
Observamos que (i) Se o prximo caminho mais curto for aquele que vai para o vrtice u, o
caminho comea em vo, termina em u e passa unicamente atravsdaqueles vrtices de S Para comprovar isto temos que mostrar que todos os vrtices intermedirios
no caminho mais curto para u esto em SAdmitamos que exista um vrtice w nesse caminho que no se encontre em S Nesse caso, o caminho de vo para u contm tambm um caminho de vo para
w que de comprimento inferior ao caminho de vo para u Supondo que os caminhos mais curtos esto sendo gerados em ordem
crescente de comprimento, o caminho mais curto vo para w j deve ter sido
geradoAssim sendo, no pode haver vrtice intermedirio que no esteja em S
(ii) O destino do prximo caminho gerado deve ser aquele vrtice u quetem a distncia mnima, DIST[u] entre todos os vrtices que no estoem S Isto decorre da definio de DIST e da observao (i) Caso existam diversos vrtices que no estejam em S, mas que tenham a
mesma DIST, qualquer um deles poder ser selecionado
Origem nica de Todos os DestinosOrigem nica de Todos os Destinos
(iii) Tendo selecionado um vrtice u, como em (ii) e tendo gerado o caminhmais curto de vo para u, o vrtice u passa a se tornar integrante de S Nesse ponto, poder diminuir o comprimento dos caminhos mais curto
comeando em vo e que passam atravs dos vrtices em S, que terminam em uvrtice w que no est em S
Em outras palavras, o valor de DIST[w] poder sofrer alterao Caso no mude, isto ser devido a um caminho mais curto que comea em vo
que vai a u e depois a w Os vrtices intermedirios no caminho vo para u e no caminho de u para w deve
todos estar em S Alm do mais, o caminho de vo para u deve ser o caminho mais curto (ca
contrrio, DIST[w] no foi definida corretamente) O caminho de u para w pode ser escolhido para no conter quaisquer vrticintermedirios
Podemos, portanto, concluir que se DIST[w] vai mudar (isto , diminuir), evirtude de um caminho de vo para u para w, onde o caminho de vo para u caminho mais curto, sendo que o caminho de u para w a aresta (u,w)
O comprimento desse caminho ser DIST[u] + custo da aresta (u,w)
159
Origem nica de Todos os DestinosOrigem nica de Todos os Destinos
O algoritmo para encontrar o caminho mais curto foi enunciado pelaprimeira vez por Dijkstra e recorre s observaes precedentes a fimde determinar o custo dos caminhos mais curtos de vo para todos osdemais vrtices em G
Admite-se que os n vrtices de G so numerados de 1 at n O conjunto S mantido como um arranjo de bits com S[i]=false se o
vrtice i no esteja em S e sendo S[i]=true caso contrrio Admite-se ainda que o grafo est representado pela sua matriz de
adjacncias de custos, sendo COST[i,j] a ponderao da aresta (i,j) COST[i,j] conter algum nmero grande +, caso a aresta (i,j) no
esteja em E(G) Para i=j, COST[i,j] pode ser qualquer nmero no-negativo sem
afetar o resultado do algoritmo A gerao real dos caminhos uma extenso de menor importnciado prprio algoritmo, sendo deixada como exerccio
Algoritmo deAlgoritmo de DijkstraDijkstra
Inicialmente: vo = 5 (origem)
S vazio
DIST[i] consiste em COST[vo,i]
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
901006
120
0
3
150
0
4
0
5
801003
4
5
07
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
+
+
25
0
150
+
+
+
S = {}
161
Algoritmo deAlgoritmo de DijkstraDijkstra
Inicialmente: vo = 5 (origem)
S
DIST[i] consiste em COST[vo,i]
Coloque vo em S S S {v
o}
DIST[vo] 0
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
140901006
120
0
3
150
0
4
0
5
801003
4
5
10007
0
8
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
+
+
25
0
150
+
+
+
S = {5}
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que
DIST[u] = mn{DIST[w]} para todos w S
u = 6
Coloque u em S S S {u}
Para todos w S DIST[w] mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
901006
120
0
3
150
0
4
0
5
801003
4
5
07
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
+
+
25
0
150
+
+
+
S = {5}
5/21/2018 Aed II Grafos
27/40
163
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 6
Coloque u em S
SS {u}
Para todos w S DIST[w]mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
140901006
120
0
3
150
0
4
0
5
801003
4
5
10007
0
8
1708
0302
01
721
8
7
6
5
4
3
21
DIST
+
+
25
0
150
+
++
S = {5,6}
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que
DIST[u] = mn{DIST[w]} para todos w S u = 6
Coloque u em S S S {u}
Para todos w S DIST[w]mn{DIST[w], DIST[u]+COST[u,w]}
DIST[4] mn{DIST[4], DIST[6]+COST[6,4]} DIST[4]mn{150, 25+100} DIST[4]125 Analogamente para demais w S
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
901006
120
0
3
150
0
4
0
5
801003
4
5
07
1708
0302
01
721
8
7
6
5
4
3
21
DIST
+
+
25
0
150
+
++
S = {5,6}
165
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 6
Coloque u em S S S {u} Para todos w S
DIST[w]mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
140901006
120
0
3
150
0
4
0
5
801003
4
5
10007
0
8
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
+
+
+
S = {5,6}
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que
DIST[u] = mn{DIST[w]} para todos w S
u = 7
Coloque u em S S S {u} Para todos w S
DIST[w] mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
901006
120
0
3
150
0
4
0
5
801003
4
5
07
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
+
+
+
S = {5,6}
167
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 7
Coloque u em S
SS {u}
Para todos w S DIST[w]mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
140901006
120
0
3
150
0
4
0
5
801003
4
5
10007
0
8
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
+
+
+
S = {5,6,7}
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 7
Coloque u em S S S {u}
Para todos w S
DIST[w] mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
901006
120
0
3
150
0
4
0
5
801003
4
5
07
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
+
+
+
S = {5,6,7}
5/21/2018 Aed II Grafos
28/40
169
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que
DIST[u] = mn{DIST[w]} para todos w S
u = 4
Coloque u em S S S {u}
Para todos w S DIST[w]mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
140901006
120
0
3
150
0
4
0
5
801003
4
5
10007
0
8
1708
0302
01
721
8
7
6
5
4
3
21
DIST
165
115
25
0
125
+
++
S = {5,6,7}
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 4
Coloque u em S
SS {u}
Para todos w S DIST[w] mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
901006
120
0
3
150
0
4
0
5
801003
4
5
07
1708
0302
01
721
8
7
6
5
4
3
21
DIST
165
115
25
0
125
+
++
S = {5,6,7,4}
171
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 4
Coloque u em S S S {u}
Para todos w S
DIST[w]mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
140901006
120
0
3
150
0
4
0
5
801003
4
5
10007
0
8
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
245
+
+
S = {5,6,7,4}
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que
DIST[u] = mn{DIST[w]} para todos w S
u = 8
Coloque u em S S S {u}
Para todos w S DIST[w] mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
901006
120
0
3
150
0
4
0
5
801003
4
5
07
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
245
+
+
S = {5,6,7,4}
173
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 8
Coloque u em S
SS {u}
Para todos w S DIST[w]mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
140901006
120
0
3
150
0
4
0
5
801003
4
5
10007
0
8
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
245
+
+
S = {5,6,7,4,8}
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 8
Coloque u em S S S {u}
Para todos w S
DIST[w] mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
901006
120
0
3
150
0
4
0
5
801003
4
5
07
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
245
+
335
S = {5,6,7,4,8}
5/21/2018 Aed II Grafos
29/40
175
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que
DIST[u] = mn{DIST[w]} para todos w S
u = 3
Coloque u em S S S {u}
Para todos w S DIST[w]mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
140901006
120
0
3
150
0
4
0
5
801003
4
5
10007
0
8
1708
0302
01
721
8
7
6
5
4
3
21
DIST
165
115
25
0
125
245
+335
S = {5,6,7,4,8}
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 3
Coloque u em S
SS {u}
Para todos w S DIST[w] mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
901006
120
0
3
150
0
4
0
5
801003
4
5
07
1708
0302
01
721
8
7
6
5
4
3
21
DIST
165
115
25
0
125
245
+335
S = {5,6,7,4,8,3}
177
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 3
Coloque u em S S S {u}
Para todos w S
DIST[w]mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
140901006
120
0
3
150
0
4
0
5
801003
4
5
10007
0
8
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
245
325
335
S = {5,6,7,4,8,3}
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que
DIST[u] = mn{DIST[w]} para todos w S
u = 2
Coloque u em S S S {u}
Para todos w S DIST[w] mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
901006
120
0
3
150
0
4
0
5
801003
4
5
07
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
245
325
335
S = {5,6,7,4,8,3}
179
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 2
Coloque u em S
SS {u}
Para todos w S DIST[w]mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
140901006
120
0
3
150
0
4
0
5
801003
4
5
10007
0
8
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
245
325
335
S = {5,6,7,4,8,3,2}
Algoritmo deAlgoritmo de DijkstraDijkstra
Escolha u tal que DIST[u] = mn{DIST[w]} para todos w S
u = 2
Coloque u em S S S {u}
Para todos w S
DIST[w] mn{DIST[w], DIST[u]+COST[u,w]}
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
1000
25
6
901006
120
0
3
150
0
4
0
5
801003
4
5
07
1708
0302
01
721
8
7
6
5
4
3
2
1
DIST
165
115
25
0
125
245
325
335
S = {5,6,7,4,8,3,2}
5/21/2018 Aed II Grafos
30/40
181
Algoritmo deAlgoritmo de DijkstraDijkstra
DISTVrtice
1651152501252453253355,6,7,4,8,3,2final
16511525012524532533525,6,7,4,8,36
16511525012524532533535,6,7,4,85
165115250125245+33585,6,7,44
165115250125245++45,6,73
165115250125+++75,62
165115250125+++651++250150+++5inicial
87654321SelecionadoSIterao
1
2 3 4 5
6
78
80
30 100
170
120 150
25
14090
100
100
Algoritmo deAlgoritmo de DijkstraDijkstra
// DIST[j], 1 j n posicionado para o comprimento do caminhomais curto do vrtice v at o vrtice j num dgrafo G com nvrtices. G representado por sua matriz de adjacncias decustos COST[1..n, 1..n]. S um arranjo declarado como S[1..n]
procedure ShortestPath(v, COST, DIST, n)
1for i 1 to n do // inicialize conjunto S como vazio
2 S[i] false; DIST[i] COST[v,i];3next j
4 S[v] true; DIST[v] 0; num 2 // coloque v no conjunto S5while num < n do // determine n-1 caminhos a partir de v
6 escolha u: DIST[u] = mn{DIST[w]} para todos w com S[w]=false
7 S[u] true; num num + 1; // coloque u no conjunto S8 for todos w com S[w]=falsedo // atualize as distncias
9 DIST[w] mn{DIST[w], DIST[u]+COST[u,w]};10 next w
11endwhile
endShortestPath
184
ExerccioExerccio
Utilize o algoritmo ShortestPath para obter, emseqncia crescente, os comprimentos doscaminhos mais curtos entre o vrtice 1 e todos osvrtices restantes do dgrafo
3
4
25
6
1
10
10
15
30
4
10
4
2
15
20
ExerccioExerccio
Utilize o algoritmo ShortestPath para obter, emseqncia crescente, os comprimentos doscaminhos mais curtos entre o vrtice 1 e todos osvrtices restantes do dgrafo
3
4
25
6
1
10
10
15
30
4
10
4
2
15
20
0
15
3
4
15
0
4
10
0
10
5
1043
4
5
0
30
6
6
022
2001
21
186
SoluoSoluo
3
4
25
6
1
10
10
15
30
4
10
4
2
15
20
DISTVrtice
252929151901,3,2,6,4final
2529291519041,3,2,64
2529291519061,3,23
2529+1519021,32
25++15190311
+++152001inicial
654321SelecionadoSIterao
0
15
3
4
15
0
4
10
0
10
5
1043
4
5
0
30
6
6
022
2001
21Anlise deAnlise de ShortestPathShortestPathO tempo consumido pelo algoritmo em um
grafo com n vrtices : O lao forda linha 1 leva um tempo de O(n)
O lao while executado n-2 vezesCada execuo deste lao requer um tempo de
O(n) na linha 6, para selecionar o prximo vrtice enovamente, nas linhas 8-10 para atualizar DIST
Assim, o tempo total de execuo deO(n2)
5/21/2018 Aed II Grafos
31/40
188
Anlise deAnlise de ShortestPathShortestPath
Qualquer algoritmo de caminho mais curto deve examinar cadaaresta no grafo uma vez pelo menos, j que qualquer uma dasarestas poderia estar num caminho mais curto
Assim sendo, o tempo mnimo possvel seria O(e) Uma vez que foi utilizada matriz de adjacncias de custos para
representar o grafo, isso toma o tempo de O(n2) s para determinarquais as arestas que esto em G Assim qualquer algoritmo de caminho mais curto que utilizar essa
representao deve tomar O(n2) Dessa forma, o algoritmo ShortestPath encontra-se otimizado, dentro de
um fator constante No caso de listas de adjacncias, o tempo total para o lao fordas
linhas 8-10 pode ser reduzido para O(e) Uma vez que DlST pode mudar somente no caso dos vrtices adjacentes
a u O tempo total para a linha 6 continua a ser O( n2)
Caminhos Mais Curtos entre TodosCaminhos Mais Curtos entre Todosos Paresos Pares
O problema do caminho mais curto entre todos os paresrequer encontrar os caminhos mais curtos entre todos ospares de vrtices vi e vj, ij
Uma possvel soluo seria aplicar n vezes o algoritmoShortestPath, uma vez para cada vrtice em V(G) comoorigem O tempo total consumido seria O(n3)
Para o problema de todos os pares, podemos obter umalgoritmo mais simples em termos conceituais e quefuncionar ainda que algumas arestas em G tenhamponderaes negativas. contanto que G no tenha cicloscom comprimento negativo O tempo de computao desse algoritmo ainda ser O(n3),
embora seja menor o fator constante
190
Caminhos Mais Curtos entre TodosCaminhos Mais Curtos entre Todosos Paresos Pares
O grafo G representado pela sua matriz deadjacncias de custos, com COST[i,i] = 0 e COST[i,j] = + caso a aresta (i,j), ij no esteja em G
Seja Ak[i,j] defindo como o custo do caminhomais curto de i atj que no passa por nenhumvrtice intermedirio com ndice superior a k
Nesse caso An[i,j] ser o custo do caminho maiscurto de i paraj em G, que possui n vrtices
A0[i,j] igual a COST[i,j] uma vez que os nicoscaminhos de i atj permitidos no podem incluirvrtices intermedirios
Caminhos Mais Curtos entre TodosCaminhos Mais Curtos entre Todosos Paresos Pares
A idia bsica no algoritmo de todos os pares gerarsucessivamente as matrizes A0, A1, A2, ..., An
Se j tivermos gerado Ak-1, podemos gerar Ak, porcompreender que para qualquer par de vrtices i ej ou (a) o caminho mais curto de i paraj (que no atravessa
nenhum vrtice com ndice superior a k) no passa pelo vrtice kassim, seu custo ser Ak-1[i,j]
ou (b) o mais curto desses caminhos passa pelo vrtice k: essecaminho composto por uma rota de i at k e outro rota de k at
j; esses caminhos devem ser os caminhos mais curtos de i parae de k paraj que no atravessam nenhum vrtice com ndicesuperior a k-1; assim, seus custos so Ak-1[i,k] e Ak-1[k,j]
Isto verdade se G no tiver nenhum ciclo com ocomprimento negativo contendo o vrtice k
192
Caminhos Mais Curtos entre TodosCaminhos Mais Curtos entre Todos
os Paresos ParesAssim, obtemos as seguintes frmulas para
Ak[i,j]A0[i,j] = COST[i,j]Ak[i,j] = mn{Ak-1[i,j], Ak-1[i,k]+Ak-1[k,j]}, k1
O algoritmo AllCosts calcula An[i,j]O clculo efetuado na prpria matriz,
sendo eliminado o superscrito de A O clculo pode ser feito na prpria matriz uma
vez que Ak[i,k]=Ak-1[i,k] e Ak[k,j]=Ak-1[k,j] de
modo que a computao no altera o resultado
1
2 3
4
2
116 3
0+33
2062
11401
321COST
0+33
2062
11401
321A0
0733
2062
11401
321A1
0733
2062
6401
321A2
0733
2052
6401
321A3
ExemploExemplo
5/21/2018 Aed II Grafos
32/40
194
AlgoritmoAlgoritmoAllCostsAllCosts
// COST[1..n,1..n] a matriz de adjacncias de custos de um grafocom n vrtices; A[i,j] o custo do caminho mais curto entrevrtices i e j. COST[i,i]= 0, 1 i n
procedure AllCosts(n,COST,A)
1 for i 1to n do
2 for j 1 to n do
3 A[i,j] COST[i,j];4 next j
5 next i
6 for k 1 to n do
7 for i 1 to n do
8 for j 1 to n do
9 A[i,j] mn{A[i,j], A[i,k]+A[k,j]};10 next j
11 next i
12 next kendAllCosts
Fechamento TransitivoFechamento Transitivo
Um problema relacionado com o problema do caminhomais curto de todos os pares o de se determinar paracada par de vrtices i ej em G, a existncia de umcaminho de i atj
O comprimento do caminho igual ao nmero de arestas Sendo A a matriz de adjacncias de G, ento a matriz A+
que tiver a propriedade A+[i,j] = 1, se h um caminho de comprimento > 0 de i paraj
A+[i,j] = 0, caso contrrioA+ denominada matriz de fechamento transitivo de GA matriz A* com a propriedade
A*[i,j] = 1, se h um caminho de comprimento 0 de i paraj A*[i,j] = 0, caso contrrio
A* denominada matriz de fechamento transitivoreflexivo de G
196
ExemploExemplo
1 2 3
45
00100510000401000300100200010154321A
111005111004111003111002
11110154321A+
111005111004111003111102
11111154321A*
Fechamento TransitivoFechamento Transitivo
A nica diferena entre A* e A+ reside nos termos dadiagonal
A+[i,j] = 1 se existe um ciclo de comprimento > 1 contendo vrtice i, enquanto A*[i,i] ser sempre igual a 1, umavez que existe um caminho de comprimento 0 que vai depara i
Se usarmos o algoritmo AllCosts com COST[i,j]=1, se (i,j) for uma aresta em G e COST[i,j]=+ se (i,j) no est em G
ento podemos obter facilmente A+ da matriz final A
deixando A
+
[i,j]=1 se A[i,j] < +
A* pode ser obtido de A+, fazendo-se iguais a 1 todos oselementos da diagonal
O tempo total de O(n3)
198
Ordenao TopolgicaOrdenao Topolgica Todos os projetos, exceto os mais simples, podem ser subdivididos em
diversos subprojetos denominados tarefas ou atividades A terminao bem-sucedida dessas atividades resultar na concluso do
projeto na sua totalidade Em projetos de engenharia ou manufatura, uma tarefa dividida em subtarefas.
Em geral, o trmino de certas subtarefas deve preceder a execuo de outrassubtarefas. Se uma subtarefa x deve preceder uma subtarefa y, isto ser denotadopor x < y. A ordenao topolgica, neste caso, consiste em dispor as subtarefasem uma ordem tal que, antes da iniciao de cada subtarefa, todas as subtarefasde que ela depende tenham sido previamente completadas
Em um currculo universitrio, algumas disciplinas devem ser cursadas antes deoutras, uma vez que se baseiam nos tpicos apresentados nas disciplinas que soseus pr-requisitos. Se uma disciplina x pr-requisito da disciplina y, a notaoser x < y. A ordenao topolgica corresponde, no caso, a arranjar as di sciplinasem uma ordem tal que nenhuma delas exija como pr-requisito uma outra que notenha sido previamente cursada
Em um programa, alguns procedimentos podem conter referncias (chamadas) aoutros procedimentos. Se um procedimento x chamado por um procedimento y,denota-se o fato por x < y. Neste caso, a ordenao topolgica implica o arranjodas declaraes de procedimento em tal forma que nunca haja referncias a
procedimentos a serem declarados posteriormente
Ordenao TopolgicaOrdenao Topolgica Uma ordem parcial de um conjunto S uma relao entr
os elementos de S Esta relao, denotada pelo smbolo
5/21/2018 Aed II Grafos
33/40
200
Ordenao TopolgicaOrdenao Topolgica
Admita que o conjunto S e suasrelaes de ordenao sejaminicialmente representados poruma seqncia de pares de ns
Para o exemplo ao lado, asrelaes de ordem entre osvrtices so mostrados aseguir, no qual os smbolos refere-se ao que apontado por ptr
8
ptr
ptr
ptr->
244
Ordenao TopolgicaOrdenao Topolgica
// n vrtices de um grafo so relacionados em ordem topolgica
procedure TopologicalOrder(n,count,link)
1 top 0; // inicialize a pilha
2 for i 1 to n do // crie uma pilha de ligao de vrtices sem predecessores
3 if count[i] = 0 then count[i] top; top i; endif4 next i
5 for i 1 to n do // imprima os vrtices em ordem topolgica6 if top = 0 then print('grafo tem um ciclo'); return; endif
7 j top; top count[top]; print(j); // coloque vrtice j na lista de sada
8 ptr link[j];9 while ptr NULL do // decremente a contagem de vrtices sucessores de j
10 k ptr->vertex; // k o sucessor de j
11 count[k] count[k] 1;12 if count[k] = 0 then // adicione vrtice k pilha
13 count[k] top; top k;14 endif
14 ptr ptr->NextNode;15 endwhile
16 next i
endTopologicalOrder
Ordenao TopolgicaOrdenao Topolgica
Como resultado de uma escolha criteriosa deestruturas de dados o algoritmo muito eficiente
Para uma rede com n vrtices e e arestas o lao de linhas 2-4 requer um tempo de O(n) as linhas 6-8 requerem O(n) para o algoritmo inteiro o lao while precisa de tempo O(di) para cada vrtice
i, onde di o grau de sada do vrtice i (1 i n)Uma vez que esse lao encontrado uma vez para cada
vrtice de sada, o tempo total para essa parte do algoritmo de O((di)+n) = O(e+n)
Portanto, o tempo assinttico de computao doalgoritmo O(e+n), ou seja, linear segundo otamanho do problema
246
ResumoResumoGrafos so estruturas de dados que
possuem um conjunto de vrtices e umconjunto de arestas
Entre outros, foram vistos algoritmoselementares de busca em grafos: Profundidade Largura
Observa-se que a eficincia de algoritmosem grafos, em alguns casos, depende daescolha adequada de estruturas de dados