03 Grafos: percurso, ponderação e caminhos SCC0503 Algoritmos e Estruturas de Dados II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2011/1 Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 1 / 19 Sumário 1 Novos Conceitos 2 Percurso em Grafos Busca em Profundidade Busca em Largura 3 Grafos ponderados 4 Implementação de Percursos e Grafos Ponderados Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 2 / 19 Conectividade Fortemente conexo: grafo no qual existe um caminho para qualquer par de vértices no grafo. Conexo: digrafos no qual existe um caminho para qualquer par de vértices no grafo. Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 3 / 19 Grafos Planares e Bipartidos Grafo planar grafo possível de desenhar de tal forma que duas arestas não se cruzem. Teorema de Kuratowski: um grafo é planar apenas se não possuir um subgrafo que é o grafo completo K5 ou o grafo bipartido K3,3 . Grafo bipartido G = (U , V , A), cujos vértices podem ser divididos em dois U e V tais que toda aresta conecta um vértice em U a um vértice em V se |U | = |V | é chamado de grafo bipartido balanceado. se cada vértice de U está ligado a cada vértices em V , então é chamado grafo bipartido completo, Ka,b . grafo conjuntos disjuntos Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 4 / 19 Isomorsmo (I) Denição G = (V1 , A1 ) e H = (V2 , A2 ) são isomorfos se existe uma f : V1 → V2 tal que (v , w ) ∈ A1 se e somente se (f (v ), f (w )) ∈ A2 . dois grafos função biunívoca bijeção com preservação de arestas. Motivação Captura a noção informal de que alguns objetos possuem estruturas iguais Aplicações práticas incluem: biologia e química computacional, matemática química (identicação de compostos químicos), e automação de projetos eletrônicos (vericação da equivalência das diferentes representações do desenho de um circuito eletrônico) Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 5 / 19 Isomorsmo (II) No exemplo acima, dizemos que G∼ = H, ou G e H são isomorfos. gura de autoria de Booyabazooka, distribuída por GNU-FDL Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 6 / 19 Sumário 1 Novos Conceitos 2 Percurso em Grafos Busca em Profundidade Busca em Largura 3 Grafos ponderados 4 Implementação de Percursos e Grafos Ponderados Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 7 / 19 Percurso em Grafos Denição Visitar todos os vértices de um grafo. O percurso em árvores é um caso particular de percurso em grafos. Algoritmos Depth-rst search Busca em profundidade ( DFS): num contexto de árvore, visita os nós lhos antes de visitar os nós irmãos. Breadth-rst search Busca em largura ( BFS): num contexto de árvore, visita os nós irmãos antes de visitar os nós lhos. Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 8 / 19 Busca em Profundidade : algoritmo DFS(Graph G, Vertex u) { visit(u); // realiza alguma operacao no vertice mark u as visited; // para nao ser visitado novamente for (each vertex v such that (u,v) exists) { if (v is not visited) { DFS(v); } } } Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 9 / 19 Busca em Profundidade : algoritmo Características implementa uma pilha (explicitamente ou por recursão) visita os vértices adjacentes em uma ordem particular Complexidade lista de adjacência: executa em tempo O (|V | + |A|). 2 2 é denso, então |A| ≈ |V |, e portanto O (|V | ). matriz de adjacência: executa em tempo O (|V |2 ) Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 Quando o grafo 2011/1 10 / 19 Busca em Largura: algoritmo BFS(Graph G, Vertex u) { visit(NULL,u); // chama funcao visitar(origem, destino) mark u as visited; // garante que nao sera visitado novament q = createQueue(); // cria uma fila q.enqueue(u); // inclui o vertice inicial na fila } } // retira um elemento da fila e visita todos os seus adjacentes while (!q.isEmpty()) { v = q.dequeue(); for (each vertex w such that (v,w) exists) if (!w.visited) { visit(v,w); // funcao visitar w com origem em v mark w as visited; // marca como visitado q.enqueue(w); // inclui elemento visitado na fila } Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 11 / 19 Busca em Largura : algoritmo Características implementa uma la permite, ao visitar (retirar da la), chamar uma função visit() de forma a armazenar em cada vértice qual a sua distância do vértice inicial. Complexidade lista de adjacência: executa em tempo O (|V | + |A|). 2 2 é denso, então |A| ≈ |V |, e portanto O (|V | ). matriz de adjacência: executa em tempo O (|V |2 ) Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 Quando o grafo 2011/1 12 / 19 Percurso em grafos: aplicações Caminho mais curto BFS encontra o caminho com menor número de arestas, de cada vértice para o vértice inicial, por meio de ponteiros para os vértices de origem. os elementos são inseridos na la em ordem de distância do vértice inicial. Grafo conexo escolha um vértice qualquer do grafo e execute BFS ou DFS. após a execução, se todos os vértices foram marcados como visitados, então o grafo é conexo. qualquer percurso em grafo permite vericar se um grafo é conexo (ou fortemente conexo). Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 13 / 19 Grafos ponderados Denição cada aresta é rotulada com um peso numérico Implementação matriz de adjacência, usar um arranjo de ints, doubles ou adequado, marcando -1 quando não houver aresta. em lista de adjacência, cada nó da lista inclui um peso, do tipo em o tipo adequado. Problemas que envolvem grafos ponderados a relação entre dois itens possui um valor, por exemplo, num grafo em que os vértices representam cidades e as arestas estradas que conectam essas cidades, com peso igual à distância entre as cidades. shortest-path) o problema do caminho mais curto ( é um dos que usam grafos ponderados. Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 14 / 19 Implementação de Percursos e Grafos Ponderados para permitir realizar percursos em grafos e trabalhar com grafos ponderados algumas mudanças são necessárias no código modicaremos principalmente Vertex e Node, para incluir informações de distância nos vértices, e pesos nas arestas. Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 15 / 19 Implementação de Percursos e Grafos Ponderados // Um 'node' representa um elemento na lista de adjacencia // e o tipo 'Link' e um ponteiro para a estrutura 'node typedef struct node *Link; struct node { Vertex w; // indice do vertice adjacente double weight; // peso da aresta Link next; // ponteiro para proximo vertice da lista de adjacencia }; // VertexList (elemento para lista de vertices) typedef struct { Link adj; // ponteiro para o inicio da lista de adjacencia int visited; // =-1 se vertice nao foi visitado ou >=0 se foi visitado } VertexList; // digraph - estrutura que contem o digrafo/grafo struct digraph { int V; // total de vertices int A; // total de arestas VertexList *list; // lista de vertices (arranjo a ser alocado) }; // Digraph sera um ponteiro para a criacao de um digrafo typedef struct digraph *Digraph; Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 16 / 19 Bibliograa I SEDGEWICK, R. Algorithms in C: part 5, 3.ed., Addison-Wesley, 2002. Graph ADTAdjacency-Lists Representation (Seções 17.2, 17.3 e 17.4) ZIVIANI, N. Projeto de Algoritmos, 3.ed. Cengage, 2004. (Capítulo 7) TENEMBAUM, A.M. et al. Estruturas de Dados Usando C. Pearson Makron, 1995. Grafos e suas aplicações (Capítulo 8). CORMEN, T. H. et al. Algoritmos: teoria e prática. Campus-Elsevier, 2002. Algoritmos de Grafos (parte IV). Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 17 / 19 Bibliograa II KNUTH, D. The Art of Computer Programming: fundamental algorithms, v.1. Addison-Wesley, 1969. Basic Mathematical Properties of Trees (Seção 2.3.4) FEOFILOFF, P. Estruturas de Dados. http://www.ime.usp.br/~pf/algoritmos_para_grafos/aulas/ digraphdatastructs.html FEOFILOFF, P. Listas de adjacência. http://www.ime.usp.br/~pf/algoritmos_para_grafos/aulas/adjlists.html Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 18 / 19 Bibliograa III FEOFILOFF, P. Matrizes de adjacência. http: //www.ime.usp.br/~pf/algoritmos_para_grafos/aulas/adjmatrix.html Moacir Ponti Jr. (ICMCUSP) 03 Grafos: parte 3 2011/1 19 / 19