39
1 ESTRUTURAS DE DADOS II prof. Alexandre César Muniz de Oliveira 1. Grafos 2. Ordenação 3. Busca Sugestão bibliográfica: ESTRUTURAS DE DADOS USANDO C Aaron M. Tenenbaum, et alli DATA STRUCTURES AND ALGORITHMS WITH OBJECT- ORIENTED DESIGN PATTERNS IN JAVA -BRUNO R. PREISS, DATA STRUCTURES, AN ADVANCED APPROACH USING C JEFFREY ESAKOV & TOM WEISS ESTRUTURAS DE DADOS E ALGORITMOS EM JAVA (2ED) MICHAEL GODRICH & ROBERTO TAMASSIA

ED Grafos 2005

Embed Size (px)

DESCRIPTION

a

Citation preview

  • 1

    ESTRUTURAS DE DADOS II prof. Alexandre Csar Muniz de Oliveira

    1. Grafos 2. Ordenao 3. Busca Sugesto bibliogrfica:

    ESTRUTURAS DE DADOS USANDO C Aaron M. Tenenbaum, et alli

    DATA STRUCTURES AND ALGORITHMS WITH OBJECT-ORIENTED DESIGN PATTERNS IN JAVA -BRUNO R. PREISS,

    DATA STRUCTURES, AN ADVANCED APPROACH USING C JEFFREY ESAKOV & TOM WEISS

    ESTRUTURAS DE DADOS E ALGORITMOS EM JAVA (2ED) MICHAEL GODRICH & ROBERTO TAMASSIA

  • 2

    GRAFOS 1 Fundamentos Um grafo G = {V,A}, onde V= conjunto de vrtices, no vazio, e A= conjunto de arestas, formadas por pares de vrtices a=(v,w) que formam uma relao binria entre eles. Logo:

    G={(v1,v2),(v3,v4),...,(vn-1,vn)}, onde cada um destes pares chamado de aresta e {v1,v2,...vn} V (vrtices de G).

  • 3

    GRAFOS 2 Dgrafos Quando as arestas so pares ordenados de vrtices, tem-se um grafo orientado (ou dgrafo). Caso contrrio, tem-se um grafo no orientado.

    Fig 1 Grafo orientados e no orientados

    6

    3 1

    5

    2

    4

    6

    3 1

    5

    2

    4

  • 4

    3 Completos Quando o nmero mximo de arestas atingido. Nesse caso, com base no nmero de vrtices, pode-se calcular o nmero de arestas. Num grafo completo orientado n (n-1). Os grafos completos no orientados so tambm denominados cliques. Um clique pode ser representado por Kn, onde n = nmero de vrtices do grafo completo.

    Fig 2 Grafos completos

    4 Grafo Bipartido Um grafo G bipartido quando for possvel obter uma partio de conjuntos de vrtices V com dois subconjuntos V1 e V2, de forma que, no existam arestas unindo elementos de V1 ou unindo elementos de V2. Grafos completos bipartidos podem ser denotados por Kpq, onde p e q so as cardinalidades das duas parties do grafo. Se o grafo da Fig 3 fosse no orientado poderia ser denotado por K3,2.

    Fig 3 Grafo Bipartido

  • 5

    GRAFOS

    5 Grafo Ponderado ou Rede Um Grafo G, orientado ou no, dito ponderado (ou valorado) se tem valores (pesos) associados aos vrtices e/ou arestas. Estes valores, em geral, podem corresponder a distncias, capacidade, localizao ou custos em funo das caractersticas ou propriedades de cada elemento de G. Em um dgrafo, quando se destacam um n fonte e outro n sumidouro, tem-se uma rede.

    Fig 4 Grafo ponderado

  • 6

    6 Grau de um grafo Dado um grafo G=(V,E), se E, vi vj, ento os vrtices vi e vj so adjacentes. O grau de um vrtice vi V igual ao nmero de vrtices adjacentes a vi e grau g(G) = max { g(v1), g (v2), g(v3), ..., g(vn) } para vi V.

  • 7

    GRAFOS 7 Caminho, percurso, ciclo, circuito e comprimento Um caminho de um vrtice vi0 para vik uma seqncia de arestas , , ... . Um caminho dito elementar se passa exatamente uma vez por cada vrtice e simples se passa uma vez por cada aresta. Quando o grafo no orientado o conceito de caminho substitudo por cadeia. Percurso pode ser utilizado genericamente nos dois casos. Se vi0 = vik , diz-se que o percurso fechado e forma um ciclo (no orientado) ou circuito (orientado). O comprimento de um percurso a soma dos pesos associados a cada uma das arestas (ou vrtices) envolvidos (para um grafo valorado) ou o nmero de arestas que compe o percurso (para um grafo no valorado).

    Fig 5 - Percursos

  • 8

    GRAFOS

    Ciclo Hamiltoniano e Euleriano Um ciclo e(G) simples que passa por todas as arestas de um grafo G dito Euleriano. Um ciclo h(G) elementar que passa por todos os vrtices de um grafo G dito Hamiltoniano.

    Fig 6 Pontes de Koenigsberg, junto com as terras A,B,C e D

    no formam um grafo de Euler, mas possue um ciclo Hamiltoniano h(G) = {,,,}

    Grafo Desconexo

    Um grafo G no orientado conexo se para todo par de vrtices (v,w) existe pelo menos uma cadeia entre eles. Caso haja pelo menos um par de vrtice de G que no possua uma cadeia entre eles, diz-se que G desconexo. Em grafos orientados no existe a obrigatoriedade de haver um caminho entre todo par de vrtice. Se isso ocorrer, diz-se que o grafo fortemente conexo.

    Fig 7 Grafo conexo (G1) e desconexo (G2)

  • 9

    GRAFOS

    8 Grafo Planar Arestas podem se interceptar em um ponto onde no h um vrtice. Um grafo G onde toda intercesso de arestas corresponde a um vrtice dito planar.

    Fig 8 Grafo planar

    Grafo rvore A definio clssica de rvore: estrutura de dados que possui uma estrutura hierrquica entre seus

    elementos conjunto finito de ns onde um deles denominado raiz e os

    demais, recursivamente, so tambm rvore (sub-rvores) Existem variaes de conceitos para rvores que no guardam relao de conectividade. rvores no conexas, isto , orchards. Uma rvore conexa que possui um n raiz, chamada rvore enraizada (rooted tree). E cada sub-rvore de uma rvore por si uma rvore que formam um conjunto de rvores que so conhecidas como floresta de uma rvore. Com relao a grafos, pode-se dizer que uma rvore de n ns um grafo conexo, sem ciclos e com exatamente (n-1) arestas. Por no haver ciclos, existe uma s cadeia que liga dois vrtices (v e w) diferentes.

  • 10

    GRAFOS 9 Representao de grafos

    Matricial

  • 11

    GRAFOS Grafo esparso e grafo denso

  • 12

    GRAFOS Exemplos de representao ligada

  • 13

    GRAFOS Implementao em C

  • 14

    GRAFOS Implementao em Java

  • 15

    GRAFOS

  • 16

    GRAFOS

  • 17

    GRAFOS Mtodos de acesso e modificadores getNumberOfEdges This method returns the number of edges contained by the graph. getNumberOfVertices This method returns the number of vertices contained by the graph. isDirected This boolean-valued method returns true if the graph is a directed graph. addVertex This method inserts a vertex into a graph. All the vertices contained in a given graph must have a unique vertex number. Furthermore, if a graph contains n vertices, those vertices shall be numbered 0, 1, ..., n-1. Therefore, the next vertex inserted into the graph shall have the number n. getVertex This method takes an integer, say i where , and returns the vertex contained in the graph. addEdge This method inserts an edge into a graph. If the graph contains n vertices, both arguments must fall in the interval [0,n-1]. isEdge This boolean-valued method takes two integer arguments. It returns true if the graph contains an edge that connects the corresponding vertices.

  • 18

    GRAFOS getEdge This method takes two integer arguments. It returns the edge instance (if it exists) that connects the corresponding vertices. The behavior of this method is undefined when the edge does not exist. (An implementation will typically throw an exception). isCyclic This boolean-valued method returns true if the graph is cyclic. isConnected. This boolean-valued method returns true if the graph is connected. getVertices This method returns an enumeration that can be used to traverse the elements of E. getEdges This method returns an enumeration that can be used to traverse the elements of .E depthFirstTraversal This methods accepts two arguments--a PrePostVisitor and an integer. The integer specifies the starting vertex for a depth-first traversal of the graph. breadthFirstTraversal This methods accepts two arguments--a Visitor and an integer. The integer specifies the starting vertex for a breadth-first traversal of the graph.

  • 19

    GRAFOS

    isStronglyConnected This boolean-valued method returns true if the directed graph is strongly connected. Strong connectedness is discussed in Section . topologicalOrderTraversal A topological sort is an ordering of the nodes of a directed graph. This traversal visits the nodes of a directed graph in the order specified by a topological sort

  • 20

  • 21

    GRAFOS Fechamento Transitivo

    Observando a matriz adjacncia ADJ, que representa as arestas interligando os vrtices de um dado grafo G, pode-se concluir que: Se ( ADJ[i][j] = V )

    Existe um caminho de comprimento 1(ou aresta) entre i e j.

    Se ( ADJ[i][1] = V .E. ADJ[1][j] = V .OU. ADJ[i][2] = V .E. ADJ[2][j] = V .OU. ADJ[i][3] = V .E. ADJ[3][j] = V .OU. ... ADJ[i][N] = V .E. ADJ[N][j] = V .OU. ) Existe pelo menos um caminho de comprimento 2 entre i e j.

    O mesmo pode ser feito para mais arestas, o que tornaria o princpio vlido para caminhos de qualquer comprimento. Quando ADJ contm 1s e 0s, pode-se reescrever

    ADJ[i][k] = V .E. ADJ[k][j] = V .OU. como

    ADJ[i][k] * ADJ[k][j] +

    Assim, a matriz dos caminhos de comprimento 2 ADJ2 = ADJ * ADJ (multiplicao de matrizes) e de comprimento 3 ADJ3 = ADJ2 * ADJ ... ADJn = ADJn-1 * ADJ

    Fechamento transitivo ou matriz caminho definida como sendo a matriz de todos os caminhos de qualquer comprimento em um grafo G:

    PATH[i][j] = ADJ[i][j] || ADJ2 [i][j] || ADJ 3[i][j] || ... || ADJn[i][j]

  • 22

    GRAFOS 10 Matriz Custo

    A matriz adjacncia pode conter tambm informaes sobre o custo associado a uma aresta. A figura seguir mostra um grafo e a matriz custo inicial com a notao , simbolizando ausncia de arestas (custo infinito).

    A matriz custo mnimo de um grafo G considera, de todos os caminhos (de qualquer comprimento) possveis entre dois vrtices, aqueles que possuem menor custo associado. equivalente ao fechamento transitivo, mas no mostra apenas a presena ou no de caminho entre i e j (vrtices de G), mas tambm o menor custo entre i e j. Se entre dois vrtices no existir caminho de comprimento algum (PATH[i][j]=0), a matriz custo mnimo dever apresentar para aquela aresta (i,j). Portanto a matriz custo mnimo a matriz dos caminhos de menor custo, obtida a partir da matriz de custo inicial. Assim

  • 23

    GRAFOS MatrizCustoMnimo (Cm) := min { Ci , Ci2, Ci3, ... Cin }

    Cm := Ci // O(n2) Para x=1, n Para i=1,n Para j=1,n Se i j Para k=1, n Cm(i,j) := min (Cm(i,j) , Cm(i,k) + Cm( k, j )// O(n4) Fim Fim Fim Fim Fim

    11 Percursos em Grafos no orientados Em Profundidade

    Profundidade ( vrtice v) Visitado (v) := .T. Para cada vrtice w adjacente a v Se (no Visitado (v)) ento Profundidade ( w ) Fim Fim

    Em Largura Largura ( vrtice v) Visitado (v) := .T. Inicia (Q) Faa (.T.) Para cada vrtice w adjacente a v Se (no Visitado (v)) ento

    Insere (Q, w ) Visitado (w) := .T.

    Fim Fim Se Vazia(Q) return; Seno v := Remove (Q)

    Fim Fim

  • 24

    GRAFOS

    12 rvores Geradoras rvores geradas a partir de percursos em grafos no orientados, onde apenas o n raiz dessa rvore no possui predecessor. O termo floresta geradora mais genrico, pois trata de um conjunto de rvores geradas nessas mesmas condies, ou seja, mais de um n no possui predecessor. Assim deseja-se encontrar um subgrafo acclico (rvore) T G que conecta todos os vrtices de G. Para tanto necessrio que G seja no orientados e conexo. Diz-se que T espalha G (spanning tree). Assim, pode-se ter rvores geradoras em profundidade (AGP) e rvores geradoras em largura (AGL). Observe os exemplos a seguir: Seja o grafo G:

    AGP: AGL:

    4

    3 2

    5

    1

    8

    6 7

    4

    3 2

    5

    1

    8

    6 7

    4

    3 2

    5

    1

    8

    6 7

  • 25

    GRAFOS

  • 26

    GRAFOS

  • 27

    GRAFOS 13 Ordenao Topolgica Um grafo acclico direcionado (DAG) G = (V,E) induz um conjunto

    S={v1, v2, v3, ..., v|v| } onde vk aparece uma nica vez e S est ordenado

    de modo a se obter uma seqncia de vrtices v1, v2, ..., vn , onde vi < vj,

    para i < j. Essa seqncia uma ordenao topolgica.

    S= {C2,C7,C1,C4,C3,C6,C8,C5}

  • 28

    GRAFOS

  • 29

    GRAFOS 14 rvore Geradora Mnima (minimal-spanning-tree)

    rvore T gerada a partir de um grafo no orientado, conexo e ponderado G de forma a minimizar:

    w(T) = w(u,v), onde (u,v) T

  • 30

    GRAFOS Algoritmo: Prim-Dijkstra:

  • 31

    GRAFOS

  • 32

    GRAFOS Kruskal's Algorithm

    Algoritmo MST-Krushal(G,w) // O(A log A) T := Enquanto no vazio(G) Encontre (u,v) , w(u,v) < w(x,y) para (x,y) G G := G - {(u,v)} T := T + {(u,v)} Se Caminhos (u,v) > 1 // forma ciclo

    T := T - {(u,v)} Fim

    Fim

  • 33

    GRAFOS

  • 34

    GRAFOS 15 Problema do caminho mnimo Referncia: Projeto de Algoritmos. Ornelas Almeida e Nivio Ziviani.

    2004

    Algoritmo de Djikstra

    Uma rvore de caminhos mais curtos com raiz em s V um

    subgrafo direcionado G (V, A), onde V V e A A, tal que:

    a. V o conjunto de vrtices alcanveis a partir de s G,

    b. G forma uma rvore de raiz s,

    c. Para todos os vrtices v V, o caminho simples de s at v

    um caminho mais curto de s at v em G.

  • 35

    GRAFOS Algoritmo de Dijkstra

    Mantm um conjunto S de vrtices cujos caminhos mais

    curtos at um vrtice origem j so conhecidos.

    Produz uma rvore de caminhos mais curtos de um

    vrtice origem s para todos os vrtices que so

    alcanveis a partir de s.

    Utiliza a tcnica de relaxamento:

    o Para cada vrtice v V o atributo p[v] um limite

    superior do peso de um caminho mais curto do

    vrtice origem s at v.

    o O vetor p[v] contm uma estimativa de um caminho

    mais curto.

    O primeiro passo do algoritmo inicializar os antecessores

    e as estimativas de caminhos mais curtos:

  • 36

    GRAFOS O relaxamento de uma aresta (u, v) consiste em verificar

    se possvel melhorar o melhor caminho at v obtido at

    o momento se passarmos por u.

    if p[v] > p[u] + peso da aresta (u,v) then

    p[v] = p[u] + peso da aresta (u,v)

    Antecessor[v] := u

  • 37

    GRAFOS

  • 38

    GRAFOS

  • 39

    GRAFOS Fluxo Mximo

    Grafo para o problema do fluxo mximo