Aed II Grafos

Embed Size (px)

Citation preview

  • 5/21/2018 Aed II Grafos

    1/40

    Jos Augusto BaranauskasDepartamento de Fsica e Matemtica FFCLRP-USP

    [email protected]

    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