CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches

Documentos relacionados
CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 10: Introdução aos Grafos

Grafos Orientados (digrafos)

Árvores: Conceitos Básicos e Árvore Geradora

01 Grafos: parte 1 SCC0503 Algoritmos e Estruturas de Dados II

Cap. 2 Conceitos Básicos em Teoria dos Grafos

Teoria dos Grafos Aula 2

GRAFOS ORIENTADOS. PSfrag replacements. Figura 1: Exemplo de um grafo orientado.

Conceito Básicos da Teoria de Grafos

Teoria dos Grafos Aula 5

IFRN. Introdução à Teoria dos Grafos. Prof. Edmilson Campos

Conceitos Básicos da Teoria de Grafos

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Teoria dos Grafos Aula 8

Teoria dos Grafos Introdu c ao

Teoria dos Grafos Aula 2

Alg l ori r t i m t os e E str t u r tu t ra r s d e D ados I I Intr t o r duçã ç o ã a a Gr G a r f a o f s P of o a. M. C r C ist s ina n a /

Teoria dos Grafos Aula 6

Algoritmos e Estruturas de Dados II Introdução a Grafos. Divisão do arquivo

Teoria dos Grafos. Motivação

Noções da Teoria dos Grafos. André Arbex Hallack

Teoria dos Grafos. Edson Prestes

PERCURSOS. André Falcão, Carlos Augusto, Rafael Broédel e Lucas Dipré

Projeto e Análise de Algoritmos

CAP4. ELEMENTOS DA TEORIA DE GRAFOS. Grafo [graph]. Estrutura que consiste num par ordenado de conjuntos, G ( V, E) , sendo:

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32

Definições Básicas para Grafos

Teoria da Computação. Clique de um Grafo. Alexandre Renato Rodrigues de Souza 1

GRAFOS. Prof. André Backes. Como representar um conjunto de objetos e as suas relações?

PCC173 - Otimização em Redes

Grafos representação e aplicações. Prof. Guilherme Tomaschewski Netto

Grafos IFRN. Robinson Alves

Matemática Discreta - Exercícios de Grafos

Pesquisa Operacional

INF1010 Lista de Exercícios 2

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

Grafos: aplicações. Grafos: árvore geradora mínima

Doutorado em Ciência da Computação. Algoritmos e Grafos. Raimundo Macêdo LaSiD/DCC/UFBA

Grafos: caminhos (matriz adjacência)

Alguns probleminhas...

Pesquisa Operacional II. Professor João Soares de Mello

TEORIA DOS GRAFOS UMA APLICAÇÃO DE LOGÍSTICA PARA O ENSINO MÉDIO. Profº M. Sc. Marcelo Mazetto Moala

As Pontes de Königsberg

Grafos: caminhos mínimos

Lista de Exercícios Programação Inteira. x 2 0 e inteiros.

Percursos em um grafo

Teoria dos Grafos. Edson Prestes

Representações de Grafos

1.3 Isomorfismo 12 CAP. 1 CONCEITOS BÁSICOS

Teoria dos Grafos. Edson Prestes

Teoria dos Grafos. Edson Prestes

Lista de Exercícios Programação Inteira. x 2 0 e inteiros.

MÓDULO 3 - PROBLEMAS DE COBERTURAS DE ARCOS E NÓS

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

CONCEITO DE ÁRVORE CES-11. A raiz é o único nó que não possui ancestrais. As folhas são os nós sem filhos. Exemplos:

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

AVALIAÇÃO DE CONHECIMENTO ESPECÍFICO

Teoria dos Grafos. Edson Prestes

Matemática Discreta. Aula nº 22 Francisco Restivo

INF 1620 P3-25/11/05 Questão 1 Nome:

Algoritmos e Estrutura de Dados. Aula 05 Estrutura de Dados: Listas (Parte II) Prof. Tiago A. E. Ferreira

Teoria dos Grafos AULA 3

Teoria dos Grafos. Edson Prestes

Sumário. 1.1 Variáveis Globais e Locais Passagem de Parâmetro (por valor por referência) 1

Busca em Profundidade e em Largura

Teoria dos grafos. Caminho euleriano e Hamiltoniano. Prof. Jesuliana N. Ulysses

Grafos Eulerianos e o Problema do Carteiro Chinês

Tópicos de Matemática Finita Data: I II-1 II-2 II-3 II-4 III-1 III-2 III-3 III-4 IV-1 IV-2 IV-3 IV-4 Nota Final

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Grafos: algoritmos de busca

Grafos: componentes fortemente conexos, árvores geradoras mínimas

Matemática Aplicada às Ciências Sociais- 11º ano (Versão: para o manual a partir de 2016/17)

Matemática discreta e Lógica Matemática

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

APLICAÇÕES DA TEORIA DOS GRAFOS

Programa. 1 Parte 1 - Conjuntos e Aplicações. 1 Conjuntos. 4 Indução Matemática e Divisibilidade. 5 Congruências Lineares

Grafos e Mediana. Rafaela G. da Motta Camicia 1 Amarildo de Vicente 2

Sistema Rodoviário Tabajara

Ciência da Computação Engenharia de Computação Mestrado em Informática. Teoria dos Grafos. Maria Claudia Silva Boeres.

15 - Coloração Considere cada um dos grafos abaixo:

05 Grafos: ordenação topológica SCC0503 Algoritmos e Estruturas de Dados II

Cortes (cut sets) 2010/2 Teoria dos Grafos (INF 5037/INF2781) CC/EC/UFES

Algoritmos 2 - Introdução

UNIVERSIDADE FEDERAL DO PARÁ BIBLIOTECA DE OBJETOS MATEMÁTICOS COORDENADOR: Dr. MARCIO LIMA

Matrizes esparsas: definição

CURSO BÁSICO DE PROGRAMAÇÃO AULA 15. Revisão Vetores e Matrizes Trabalho

Grafos: árvores geradoras mínimas. Graça Nunes

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DO 2 o TESTE

BCC204 - Teoria dos Grafos

APLICAÇÕES DE BUSCA EM GRAFOS

Teoria dos Grafos Aula 24

Métodos Computacionais. Listas Encadeadas

Oferta de Serviços. Grafo Planar. Notas. Teoria dos Grafos - BCC204, Planaridade. Notas

Introdução a Teoria dos Grafos Raimundo Macêdo

Teoria dos Grafos. Aula 5 - Estruturas de Dados para Grafos. Profª. Alessandra Martins Coelho. março/2013

CAP Exame de Admissão 16/12/2013. Instruções Gerais (leia atentamente)

Teoria dos Grafos. Edson Prestes

Conteúdo. Conceitos e Resultados Gerais. 11 Combinatória. Introdução

Grafo planar: Definição

Transcrição:

CES-11 Algoritmos e Estruturas de Dados Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

CES-11 Grafos Conceitos gerais e representações Algoritmos em grafos Exploração sistemática em largura Caminhos mais curtos Exploração sistemática em profundidade Teste de aciclicidade Ordenação topológica Componentes fortemente conexos Vértices e arestas de corte Árvore geradora de custo mínimo

CES-11 Grafos Conceitos gerais e representações Algoritmos em grafos Exploração sistemática em largura Caminhos mais curtos Exploração sistemática em profundidade Teste de aciclicidade Ordenação topológica Componentes fortemente conexos Vértices e arestas de corte Árvore geradora de custo mínimo

Definição Um grafo G=(V,E) é formado o pelos vértices V = {v 1, v 2,..., v n } e pelas arestas E = {e 1, e 2,..., e m }. Consideraremos sempre que V = n e E = m. Um exemplo: v 1 v 5 v 8 e 2 e 5 e8 e 10 e 1 e 12 e 4 e7 e 7 v 3 v 4 v 7 e 6 e 3 e 9 e11 v 2 v 6 v 9 V = {v 1, v 2 2, v 3 3, v 4 4, v 5 5, v 6 6, v 7 7, v 8 8, v 9 9} n = 9 E = {e 1, e 2, e 3, e 4, e 5, e 6, e 7, e 8, e 9, e 10, e 11, e 12 } m = 12

Informações em um grafo Pode haver informações nos vértices e/ou nas arestas. Ex1: Fornecimento de produtos entre fábricas Vértice (fábrica): nome, localização, li número de empregados Aresta (fornecimento): produto transportado, quantidade, custo Ex2: Mapa rodoviário Vértice (cidade): nome, número de habitantes, área Aresta (rodovia): distância, qualidade do trecho, eventuais pedágios Ex3: Rede social Vértice (pessoa): nome, ocupação, idade, endereço Aresta (colaboração): trabalhos em conjunto, área de atuação, artigos

Algumas aplicações Administração comercial: diagramas de processos, organogramas Bioinformática: mapas genéticos, interação de proteínas Bancos de dados: relacionamento de entidades Internet: conexões entre redes, projeto e otimização de sites Problemas em geral: diagramas de evolução, validação de circuitos, autômatos finitos, análise de linguagens, g controle de fluxos, etc.

Exemplo: mapeamento m de vizinhanças

Exemplo: metrô de Moscou

Exemplo: escalonamento de provas Southern Methodist University (Dallas) Vértices representam provas, arestas significam ifi conflitos (pelo menos um aluno em comum) Exames de mesma cor poderiam ser realizados simultaneamente (não estão conectados)

Exemplo: mapas de redes P2P Criado por GnuMap Identificação de subredes altamente conectadas Identificação dos servidores que ficariam desconectados em caso de falha

Exemplo: autômatos e algoritmos Algoritmo para verificar a divisibilidade de um número por 7 Percurso começa no círculo Para cada dígito d do número, andar d arestas azuis Ao passar para o dígito seguinte, andar 1 aresta vermelha Repetir o processo até terminar os dígitos do número Se terminar no círculo o número é Se terminar no círculo, o número é divisível por 7

Arestas e vértices Uma aresta e E é um par não-ordenado ordenado (u,v), onde u,v V. Neste caso, dizemos que os vértices u e v são adjacentes entre si, e que a aresta e é incidente em u e em v. Uma aresta e = (u,v) é chamada de laço quando u = v. v d(u) é o grau do vértice u, isto é, o número de incidências em u. É fácil observar que Σ u єv d(u) = 2. E

Origem histórica Na cidade de Königsberg g (atual Kaliningrado), havia sete pontes sobre o rio Pregel: Será possível fazer um passeio pela cidade, começando e terminando no mesmo local, e passando uma única vez em cada ponte? Euler (1736) resolveu o problema: esse passeio só seria possível se cada vértice do grafo tivesse grau par. Todo grafo com essa propriedade é chamado de euleriano.

Subgrafos O grafo G =(V,E ) é um subgrafo de G=(V,E) se V V e E E, e todas arestas de E têm seus vértices em V. Quando V =V, V, G é chamado de subgrafo gerador de G. Seja X V e E(X) o conjunto das arestas de E com ambos os vértices em X. Dizemos que G(X)=(X,E(X)) é o subgrafo de G induzido por X. Exemplo: G 1 2 X = {2, 3, 4, 5} 6 4 3 G(X) 5

Sequências de vértices Caminho é uma sequência alternada de vértices e arestas, onde cada aresta é incidente tanto ao vértice que a antecede como ao que a segue. Caminho simples é um caminho no qual cada vértice aparece uma única vez. Comprimento de um caminho é o seu número de arestas. Ciclo ou circuito é um caminho que começa e termina no mesmo vértice.

Componentes conexos Dois vértices v e u são conectados se houver um caminho entre eles. Componentes conexos são subconjuntos maximais de vértices conectados entre si. Um grafo é conexo se tiver um único componente conexo, ou seja, se todos seus vértices estiverem conectados entre si. Exemplo: Grafo com 3 componentes conexos

Árvores e florestas Árvore ror é um grafo conexo o sem circuitos. Exemplo: Portanto, todo caminho simples é uma árvore. Floresta é um grafo cujos componentes conexos são árvores. Exemplo:

Vértices e arestas de corte Em um grafo G, u V é chamado de vértice de corte (ou ponto de articulação) se a sua remoção desconecta G. Exemplo: u Se um componente conexo de um grafo não possui vértices de corte, ele é chamado de componente biconexo. Analogamente, uma aresta e, cuja remoção ocasiona a desconexão do grafo, recebe o nome de aresta de corte (ou ponte). Exemplo: e

Digrafos ou grafos orientados Digrafos são grafos orientados, isto é, suas arestas possuem direção e são chamadas de arcos. Em um digrafo G=(V,E), uma aresta e E é um par ordenado (u,v), onde u,v V. u v v é sucessor de u u é predecessor de v Cada vértice v tem um grau de saída d + (v) e um grau de entrada d - (v), que correspondem respectivamente ao total de arcos que saem ou chegam em v. 2 Exemplo: d + (4) = 0 1 5 3 4 6 d - (4) = 3 d + (6) = 1 d - (1) = 1

Sequências de arcos Caminho é uma sequência de arcos e 1, e 2,..., e q tal que a extremidade inicial de e i coincide com a final de e i-1, 1 < i q. Ciclo ou circuito é um caminho que começa e termina no mesmo vértice. Exemplo: 2 e 5 e 1 e 2 e 3 e 6 e 4 3 e 7 e 3, e 4, e 7, e 5 : caminho entre os vértices 2 e 1 e 3, e 6, e 5, e 1 : ciclo ou circuito 1 e 5 4

Componentes fortemente conexos Em um digrafo, dois vértices v i e v j estão conectados entre si se existem caminhos de v i a v j e de v j a v i. Desse modo, surge analogamente o conceito de componente fortemente conexo. Exemplos: 2 6 7 1 3 5 8 {1, 2, 3, 4, 5, 6, 8, 9, 10} {7} 9 10 1 4 4 7 {1, 2, 3, 4} 2 3 5 6 {5, 6, 7}

Ordenação topológica Uma ordenação topológica de um digrafo G=(V,E) corresponde a uma bijeção f: V {1,2,..., n} tal que, para toda aresta (u,v) E,,f( f(u) < f(v). Em outras palavras, deseja-se numerar os vértices de tal modo que, se houver em G um caminho de u até v, então o número de u será menor que o de v. É fácil provar que um digrafo G admite uma ordenação topológica se e somente se for acíclico. Se os vértices forem alinhados de acordo com uma ordenação topológica, todos os arcos terão uma mesma direção.

Exercício Encontrar uma ordenação topológica para os Encontrar uma ordenação topológica para os digrafos abaixo.

CES-11 Grafos Conceitos gerais e representações Algoritmos em grafos Exploração sistemática em largura Caminhos mais curtos Exploração sistemática em profundidade Teste de aciclicidade Ordenação topológica Componentes fortemente conexos Vértices e arestas de corte Árvore geradora de custo mínimo

Matriz de adjacências Matriz de adjacências as é formada a por n linhas e n colunas. A posição a ij dessa matriz indica se o vértice v j ou não do vértice v i. é sucessor Exemplo: 1 2 0 1 1 0 0 0 1 1 A n = 4 3 n 0 0 0 1 0 0 0 0 Tamanho da estrutura: O(n 2 ) Útil quando grafo é denso: m ~ n 2

Lista de adjacências Lista de adjacências as é formada a por um vetor de n ponteiros, onde cada vértice aponta para seus sucessores (ou predecessores). Exemplo: 1 2 4 3 vértices sucessores 1 2 3 2 3 4 3 4 4 Útil quando grafo é esparso: m << n 2 Código para manipulação do grafo é mais complicado Tamanho da estrutura: O(n+m)

Grafos não orientados Exemplo: 1 2 4 3 Matriz de adjacências (simétrica em relação à diagonal principal) pa A n n = 0 1 1 0 1 0 1 1 1 1 0 1 0 1 1 0 Lista de adjacências (possui 2m nós) 3 vértices sucessores 1 2 3 2 1 3 4 4 1 2 4 2 3

Exemplo 1 Fornecimento nto de produtos entre fábricas:

Exemplo 1: matriz de adjacências int maxvert = 100; struct CelulaVertice { char nome[30]; bool adjacente[maxvert]; }; struct Digrafo { CelulaVertice vertices[maxvert]; int nvert; }; Digrafo Fornecimento; Se houver informação no arco, basta alterar esse tipo (poderia ser até uma estrutura complexa)

Exemplo 1: lista de adjacências int maxvert = 100; typedef int vertice; struct CelulaAdj { vertice vert; CelulaAdj *prox; }; struct CelulaVertice { char infovert[30]; CelulaAdj *listaadj; }; Se houver informação no arco, basta acrescentar um campo aqui struct Digrafo { int nvert; CelulaVertice vertices[maxvert]; }; Digrafo Fornecimento;

Exemplo 2: armazenamento m de digrafo Seja um digrafo de fornecimento entre fábricas: Arcos: custo de fornecimento mensal (em R$) Deseja-se representá-lo através de uma lista de adjacências, onde todas as dimensões são alocadas dinamicamente.

Exemplo 2: armazenamento m de digrafo typedef int vertice; struct CelulaAdj { vertice vert; int custo; CelulaAdj *prox; }; struct CelulaVertice { char nome[30]; CelulaAdj *listaadj; }; struct Digrafo { int nvert; CelulaVertice *vertices; }; Vetor de vértices alocados dinamicamente Digrafo G;

Exemplo 2: armazenamento m de digrafo // Função lergrafo: lê e armazena um digrafo na variável global G void lergrafo () { int i, j, n; CelulaAdj *p; // Alocação do vetor de vértices printf ("Numero de fabricas: "); scanf ("%d", &G.nvert); G.vertices=(CelulaVertice*)malloc((G.nvert+1)*sizeof(CelulaVertice)); // Leitura do nome das fábricas for (i = 1; i <= G.nvert; i++) { printf ("Nome da fabrica %d: ", i); scanf ("%s", &G.vertices[i].nome); G.vertices[i].listaAdj = NULL; } // Continua...

Exemplo 2: armazenamento m de digrafo // Leitura dos fornecimentos e seus custos for (i = 1; i <= G.nvert; i++) { printf ("Numero de fornecimentos de %s: ", G.vertices[i].nome); scanf("%d", &n); for (j = 1; j <= n; j++) { printf ("Numero da fabrica e custo:"); p = G.vertices[i].listAdj; tadj G.vertices[i].listaAdj = (CelulaAdj*)malloc(sizeof(CelulaAdj)); G.vertices[i].listaAdj->prox = p; scanf("%d %d", &G.vertices[i].listaAdj->vert, &G.Vertices[i].listaAdj->custo); } } }

Representação mais adequada Critérios Citéis para se escolher a melhor mlh representação: ã: Espaço de armazenamento (depende do tamanho do grafo) Teste de pertinência de uma aresta (matriz) Verificação do grau de um vértice (lista) Inserção ou remoção de uma aresta (matriz) Percurso no grafo (lista) Geralmente, a lista de adjacências costuma ser mais vantajosa