Algoritmos em Grafos

Documentos relacionados
Grafos: algoritmos de busca

Introdução à Teoria dos Grafos (MAC-5770) IME-USP Depto CC Profa. Yoshiko. Capítulo 3

Matemática Discreta 10

Algoritmos 2 - Introdução

Teoria dos Grafos. Edson Prestes

Aula 10: Tratabilidade

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

Grafos: caminhos mínimos

Árvores UFES. Teoria dos Grafos. CC/EC/Mestrado

CONCEITOS BÁSICOS EM GRAFOS

Teoria dos Grafos. Edson Prestes

Grafos Planares. Grafos e Algoritmos Computacionais. Prof. Flávio Humberto Cabral Nunes

Grafos: caminhos (matriz adjacência)

Optimização em Redes e Não Linear

ANÁLISE COMBINATÓRIA

Problema do Caminho Mais Curto. Problema do Caminho Mais Curto

Aprendendo a Programar Programando numa Linguagem Algorítmica Executável (ILA)

Definição e Conceitos Básicos

A Cidade Enlameada Árvores Geradoras Mínimas

APLICAÇÕES DE BUSCA EM GRAFOS

Introdução à Teoria dos Grafos

Estruturas de Dados Pilhas, Filas, Listas

Variáveis, Tipos de Dados e Operadores

Teoria dos Grafos Introdu c ao

Árvores. ! utilizada em muitas aplicações. ! modela uma hierarquia entre elementos. ! O conceito de árvores está diretamente ligado à recursão

Matrizes esparsas: definição

4 Casamento de Padrões

OBI2012 Caderno de soluções

Grafos Msc. Daniele Carvalho Oliveira. Doutoranda em Computação UFU Mestre em Computação - UFU Bacharel em Computação - UFJF 1

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34

Curso de Formação de Oficiais Conhecimentos Específicos ENGENHARIA DE COMPUTAÇÃO CADERNO DE QUESTÕES

Introdução à Programação

Análise de Ponto de Função APF. Aula 03

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 1 8: Figura 1 9: Figura 1 10:

MODELO DE BANCO DE DADOS RELACIONAL

Árvore Binária de Busca Ótima

IFRN. Conexidade e Distância. Prof. Edmilson Campos

Aula 13 Roteamento Dinâmico com Protocolos Link-State (Protocolo OSPF)

Fluxo Máximo. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Fluxo Máximo 2014/ / 28

FACULDADE PITÁGORAS PRONATEC

UNIP Ciência da Computação AES Análise Essencial de Sistemas MER (Modelo Entidade Relacionamento)

Árvore Vermelho-Preta. Estrutura de Dados II Jairo Francisco de Souza

TEORIA DOS GRAFOS NA TOMADA DE DECISÃO

Árvores B. Prof. Flávio Humberto Cabral Nunes

XIX Semana Olímpica de Matemática. Nível 2. Grafos. Matheus Secco

Pesquisa Operacional

PESQUISA OPERACIONAL APLICADA A LOGÍSTICA

Plano Curricular de Matemática 5ºAno - 2º Ciclo

O uso da Teoria dos Grafos no Jogo Icosiano

Algoritmos geométricos

FACULDADE CAMPO LIMPO PAULISTA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto a Análise de Algoritmos I Lista de Exercícios 1

Grafos Hamiltonianos e o Problema do Caixeiro Viajante. Prof. Ademir Constantino Departamento de Informática Universidade Estadual de Maringá

PLANO DE ESTUDOS DE MATEMÁTICA - 5.º ANO PERFIL DO ALUNO

Aplicação do algoritmo de Dijkstra para o problema de roteamento da frota de táxis partindo de um ponto fixo

BCC204 - Teoria dos Grafos

S12 - Software e Engenharia de Software

Inteligência Artificial. Conceitos Gerais

BC1424 Algoritmos e Estruturas de Dados I Aula 05 Custos de um algoritmo e funções de complexidade

Normalização de Dados. Disciplina: Fundamentos de Banco de dados Docente: Kelyn Schenatto

Redes de Computadores

Teoria dos Grafos Aula 27

Trabalho: Algoritmos de Busca e Ordenação. 1 Introdução. Prof. Bruno Emerson Gurgel Gomes IFRN - Câmpus Currais Novos. 31 de outubro de 2012

FLUXO DE VEÍCULOS. Prof. Dr. Renato da Silva Lima (35) Fluxo de Veículos

Determinação de medidas de posição a partir de dados agrupados

Solucionador de circuitos lógicos em C++

Sistemas de Numeração

Proteção. Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa. Fernando Ramos, Nuno Neves, Sistemas Operativos,

Domínio Números e Operações Subdomínio Adição e subtração de números racionais não negativos. Metas/Objetivos Conceitos/Conteúdos Aulas previstas

Aula 4: Bases Numéricas

Prof. Leonardo Augusto Casillo

PROGRAMAÇÃO I. Introdução

ALGORITMO DE DIJKSTRA

Distorções Dinâmicas no Tempo & Pesquisa. Distorção dinâmica no tempo Pesquisa Algoritmos gráficos de pesquisa Algoritmos de programação dinâmica

ADT - Árvores. ADT Árvores Definição

Planificação Anual (por unidades)

Modelo Relacional Normalização Diagramas E-R e Tabelas Originadas

Inteligência Artificial IA IV. RACIOCÍNIO BASEADO EM REGRAS

Árvores AVL. Estrutura de Dados II Jairo Francisco de Souza

Geometria Espacial PRISMA RETO DE BASE TRIANGULAR (OU PRISMA TRIANGULAR)

Aula 12 Protocolo de Roteamento EIGRP

Números e Operações (NO) Álgebra (ALG) DOMÍNIO SUBDOMÍNIO OBJETIVO GERAL/DESCRITORES RECURSOS. Conhecer e aplicar propriedades dos divisores

Este trabalho foi licenciado com a Licença Creative Commons Atribuição - NãoComercial - SemDerivados 3.0 Não Adaptada

Conteúdo Programático. Cursos Técnicos Subsequentes

BCC402 Algoritmos e Programação Avançada. Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Tóffolo 2011/1

Inteligência Computacional

Ferramenta 2.1 Matriz do Modelo de Maturidade de Inovação

Trabalho Prático. Descrição Considere os seguintes dados a respeito de uma pessoa:

SISTEMAS DE COORDENADAS

Universidade Federal do Espírito Santo Departamento de Informática 1 o Trabalho de Algoritmos Numéricos I - 14/2 Sistemas Lineares

Transcrição:

Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/42

Introdução (1) Um grafo G=(V,E) consiste em um conjunto V de vértices e um conjunto E de pares de vértices ou arestas. Os grafos são uma forma de modelar os problemas. Muitos problemas algorítmicos são simplificados ao pensarmos neles em termos de grafos. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 2/42

Introdução (2) A teoria dos Grafos fornece uma linguagem para tratarmos com as propriedades dos grafos. Conhecer diferentes problemas algorítmicos em grafos é melhor do que entender os detalhes de algoritmos particulares em grafos. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 3/42

Conteúdo Estruturas de dados básicas e operações de atravessamento. Algoritmos mais sofisticados para: caminhos mais curtos e árvore geradora. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 4/42

Observações Grafos podem ser utilizados para modelar uma variedade de estruturas e relações. Muitas aplicações de grafos podem ser reduzidas a propriedades padrão de grafos e usando algoritmos bem conhecidos. Busca em profundidade e busca em largura fornecem mecanismos para visitar cada aresta e cada vértice do grafo. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 5/42

Matriz de adjacências Espaço: O(n²) Espaço pode ser reduzido agrupandose as informações em bits ou armazenando apenas a matriz triangular. Tempo constante para testar a pertinência de uma aresta ao grafo. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 6/42

Listas de adjacências Tempo O(di ) para verificar a pertinência de uma aresta ao grafo, onde d i é o grau do vértice i. Pior caso quando di =Θ(n). Na prática os grafos geralmente são esparsos. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 7/42

Lista de adjacências Para muitas aplicações é a melhor alternativa. A utilização de lista ligada facilita a ampliação da estrutura. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 8/42

Matriz de Adjacências X Listas de Adjacências Testar se aresta está no grafo. Determinar o grau de um vértice. Menos memória em grafos pequenos. Menos memória em grafos grandes. Inserção ou remoção de aresta. Atravessar o grafo. Melhor na maioria dos problemas. Matriz de Adjacência Listas de Adjacências Listas de Adjacências Matriz de Adjacência Matriz de Adjacência Listas de Adjacências????????? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 9/42

Atravessando Grafos Impressão ou validação de cada vértice e/ou aresta. Cópia de um grafo ou conversão entre representações diferentes. Contagem de números de vértices e/ou arestas. Determinação de componentes conexas. Determinação de caminho entre dois vértices ou ciclos, caso existam. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 10/42

Atravessando Grafos Eficiência um mesmo local não deve ser visitado repetidamente. Corretude o percurso deve ser feito de modo que não se perca nada. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 11/42

Atravessando Grafos Os vértices devem ser marcados quando visitados pela primeira vez. Cada vértice deve ter um dos estados: Não-visitado Visitado Completamente explorado IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 12/42

Atravessando Grafos Mantém-se uma estrutura de dados com todos os vértices já visitados mas ainda não completamente explorados. As arestas não-orientadas são consideradas duas vezes. As orientadas apenas uma. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 13/42

Atravessando Grafos Estruturas dados para armazenar os vértices descobertos mas ainda não completamente explorados: Fila busca em largura Pilha busca em profundidade IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 14/42

Busca em Largura 2 1 3 4 3 3 3 3 5 3 3 6 A árvore define um caminho mais curto da raiz até cada um dos vértices. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 15/42

Busca em Profundidade 1 2 3 2 6 1 3 5 4 4 6 Geralmente é mais útil do que a busca em largura. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 16/42 5

Aplicações da Travessia Componentes Conexas Detecção de Árvores e Ciclos 2-coloração de Grafos Ordenação Topológica Vértices de Articulação IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 17/42

Componentes Conexas Pode-se usar Busca em Largura ou Busca em Profundidade. Em grafos orientados temos os conceitos de fracamente conexo e fortemente conexo. Tempo: O(m+n) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 18/42

Detecção de Árvores e Ciclos Detecção de árvores é feita usando busca em profundidade o grafo é uma árvore se, e somente se, não existirem arestas de retorno. A detecção de ciclo é feita quando a primeira aresta de retorno é identificada. Tempo: O(n) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 19/42

2-coloração de Grafos Pode-se usar busca em largura ou em profundidade. Um vértice visitado recebe sempre cor diferente da de seu pai. Para cada aresta não visitada verificase se ela não une dois vértices de mesma cor. Neste caso, foi possível uma 2-coloração. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 20/42

Ordenação Topológica Consideremos grafos dirigidos acíclicos. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 21/42

Ordenação Topológica É uma ordenação nos vértices de forma que todas as arestas vão da esquerda para a direita. Busca em profundidade é utilizada para determinar se o grafo orientado é acíclico e então determinar uma ordenação topológica. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 22/42

Ordenação Topológica Um grafo orientado é acíclico se, e somente se, não são encontradas arestas de retorno durante uma busca em profundidade. Cada vértice é rotulado em ordem inversa à ordem em que eles são marcados completamente explorados. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 23/42

Vértices de Articulação (1) É um vértice de um grafo conexo cuja remoção torna o grafo desconexo. Qualquer grafo que contenha um vértice de articulação é frágil. A conectividade de um grafo é a quantidade de vértices necessários para desconectar o grafo. Conectividade é uma importante medida de robustez no projeto de rede. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 24/42

Vértice de Articulação (2) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 25/42

Modelagem de Problemas (1) Procura-se um algoritmo para o projeto de rotas naturais para personagens de jogos de vídeo game através de uma sala cheia de objetos. Como fazer? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 26/42

Como proceder? Uma grade onde cada vértice é um lugar válido e uma aresta ligando vértices vizinhos, com pesos dependendo da distância entre os vértices. Determinar o caminho mais curto. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 27/42

Modelagem de Problemas (2) No sequenciamento de DNA, os dados experimentais consistem de pequenos fragmentos. Para cada fragmento f, existem fragmentos que são forçados a estar à esquerda de f, outros à direita e outros que podem ir para qualquer um dos lados. Como podemos determinar uma ordenação consistente dos fragmentos da esquerda para a direita que satisfaça todas as restrições? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 28/42

Como proceder? Criar um grafo dirigido no qual a cada vértice é atribuído um fragmento. Uma aresta (l,f) liga um fragmento l que é obrigado a estar à esquerda. Uma aresta (f,r) liga um fragmento r que é obrigado a estar à direita. Determinar uma ordenação topológica neste grafo. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 29/42

Modelagem de Problemas (3) Dado um conjunto qualquer de retângulos no plano, como distribuí-los em um número mínimo de cestos tal que o subconjunto de retângulos em um mesmo cesto não intersectam-se entre si? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 30/42

Como proceder? Cada vértice representa um retângulo. Uma aresta liga vértices cujos retângulos se intersectam. Cada cesto corresponde a um conjunto independente. A coloração de vértices particiona um grafo em conjuntos independentes, logo nosso problema é determinar uma coloração mínima de vértices. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 31/42

Modelagem de Problemas (4) Ao portar códigos de UNIX para DOS, tem-se que reduzir o tamanho dos nomes de várias centenas de arquivos para no máximo 8 caracteres cada. Como diminuir o nome dos arquivos e garantir que não haja conflito? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 32/42

Como proceder? Construir um grafo com vértices correspondendo ao nome original ligados a vértices que possam corresponder a reduções do nome. Determinar um conjunto de n arestas que não tenham vértices em comum. Determinar um conjunto independente de arestas em um grafo bipartido. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 33/42

Árvore Geradora Mínima Uma árvore é uma grafo sem ciclos. Um árvore geradora é um subgrafo de G com os mesmo vértices que é uma árvore. Um árvore geradora mínima de um grafo com pesos é a árvore geradora de peso mínimo. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 34/42

Observações Úteis em determinar a menor quantidade de fios necessárias para interligar um grupo de casas ou cidades. Pode existir mais de uma tal árvore. Para o caso em que todas as arestas têm o mesmo peso, todas as árvores geradoras são mínimas. Para o caso geral, o problema não é tão simples. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 35/42

Algoritmo de Prim Escolha um vértice arbitrário s enquanto existe algum vértice fora da árvore faça tome a aresta de menor peso entre a árvore e um vértice não pertencente à árvore adicione a aresta selecionada e o vértice à árvore T IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 36/42

Exemplo IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 37/42

O(nm) Tempo Pode ser reduzido a O(n²). IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 38/42

Algoritmo de Kruskal Mantenha as arestas em uma fila de prioridade ordenada pelo peso Conta <- 0 enquanto (Conta < n-1) faça tome o próxima aresta (v,w) se componente(v)!= componente(w) insira (v,w) em T junte as componentes IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 39/42

Exemplo 1 1 1 1 3 3 1 2 1 2 3 1 3 2 3 3 IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 40/42

O(nm) Tempo Pode ser melhorado para O(m log m). IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 41/42

Agradecimentos Estes slides são baseados no livro The Algorithm Design Manual, de Steven S. Skiena. Qualquer incorretude é, entretanto, de inteira responsabilidade do prof. João Alberto Fabro, da UTFPR. IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 42/42