Busca em largura. Algoritmos em Grafos. Marco A L Barbosa

Documentos relacionados
Grafos. Notas. Notas. Notas. Notas. Algoritmos elementares. Representação de grafos Lista de adjacências Matriz de adjacências Atributos

Caminhos mínimos de única origem

Caminhos mínimos de todos os pares

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Ciclos hamiltonianos e o problema do caixeiro viajante

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

Grafos: Busca. Algoritmos e Estruturas de Dados 2. Graça Nunes

Análise e Síntese de Algoritmos

Busca em Largura. Adaptado de Humberto C. B. Oliveira

Grafos: algoritmos de busca

Análise e Síntese de Algoritmos. Algoritmos em Grafos CLRS, Cap. 22

Teoria dos Grafos Aula 5

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Projeto e Análise de Algoritmos

Grafos e Algoritmos de Busca

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Busca em Profundidade e em Largura

Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma

Grafos: Busca. SCE-183 Algoritmos e Estruturas de Dados 2. Thiago A. S. Pardo Maria Cristina

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

GRAFOS Aula 05 Algoritmos de percurso: busca em largura e profundidade Max Pereira

DFS: Depth-First Search (pesquisa em profundidade) Percursos e Conectividade em Grafos Depth-First Search. Implementação de DFS

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Teoria dos Grafos Aula 6

Algoritmos em Grafos: Caminho Mínimo

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Grafos - Representação

Algoritmos e Estruturas de Dados

PAA-DCC-UFAM. Grafos. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford. O problema tem subestrutura óptima

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford

AULA 13 PROJETO E ANÁLISE DE ALGORITMOS. Problema do caminho mais curto de uma única origem em grafos Karina Valdivia Delgado

Busca em Largura Letícia Rodrigues Bueno

Complexidade de Algoritmos

Caminho Mínimo de Fonte Única em Grafos sem Pesos Negativos

Algoritmos em Grafos

PCS LABORATÓRIO DE PROGRAMAÇÃO ORIENTADA A OBJETOS PARA A ENGENHARIA ELÉTRICA

APLICAÇÕES DE BUSCA EM GRAFOS

Busca em Profundidade. Componentes Conexos. Grafos. Maria Adriana Vidigal de Lima. Fevereiro

Percursos e Conectividade em Grafos Depth-First Search. DFS: Depth-First Search (pesquisa em profundidade)

Grafos planares. Algoritmos em Grafos. Marco A L Barbosa

INF 1010 Estruturas de Dados Avançadas

não descobertos descobertos explorados descoberta cruzamento

Estruturas de Dados Grafos

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de todos os pares

BCC204 - Teoria dos Grafos

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

Melhores momentos AULAS 1-8

Naturais. Paradigma de Programação Funcional. Marco A L Barbosa

Projeto e Análise de Algoritmos

Otimização em Grafos

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

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Algoritmos e Estruturas de Dados II

Análise e Síntese de Algoritmos

Universidade Federal de Alfenas

Distâncias Mínimas. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Distâncias Mínimas 2014/ / 27

06 Grafos: Caminhos Mínimos SCC0503 Algoritmos e Estruturas de Dados II

Algoritmo de Dijkstra Estudo e Implementação

PCS3111. Laboratório de Programação Orientada a Objetos para Engenharia Elétrica. Aula 11: Exercício Integrador (parte 2)

grafo nós vértices arcos arestas

Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 33

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

Algoritmos e Estruturas de Dados. Grafos Semestre de Inverno 13/14

Projeto e Análise de Algoritmos. Método Guloso

Teoria dos Grafos Aula 8

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Algoritmo de Prim Wikipédia, a enciclopédia livre

INF 1010 Estruturas de Dados Avançadas

Caminho Mínimo de Fonte Única em Grafos com Pesos Negativos Letícia Rodrigues Bueno

Planaridade. Grafos: Planaridade. Planaridade. Planaridade Fórmula. Euler. Cartografia Posteriormente, coloração de mapas

Grafos Caminhos mais Curtos

Desafios de Programação TCC Turma A-1

03 Grafos: percurso, ponderação e caminhos SCC0503 Algoritmos e Estruturas de Dados II

GRAFOS E ALGORITMOS ALGORITMOS E APLICAÇÕES

Fluxo Máximo a Custo Mínimo

Teoria dos Grafos Aula 2

Cap. 2 Conceitos Básicos em Teoria dos Grafos

Dados compostos. Paradigma de Programação Funcional. Marco A L Barbosa

Árvores: Conceitos Básicos e Árvore Geradora

INSTITUTO FEDERAL DO ESPÍRITO SANTO CURSO BACHARELADO EM SISTEMAS DE INFORMAÇÃO

AED2 - Aula 22 Busca em largura, cálculo de distâncias

Sub-grafo. Árvore Geradora Mínima

CES-11. Algoritmos e Estruturas de Dados

Aula 09. Percurso em grafo

Grafos Parte 1. Aleardo Manacero Jr.

Matemática Discreta - Exercícios de Grafos

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

Combinação de modelos

Algoritmo de Kruskal. Algoritmo de Kruskal. Floresta geradora 26. Subfloresta S 20.3

Algoritmo Floyd-Warshall. Problema dos caminhos mínimos entre todos os pares. Programação dinâmica

Árvores de Suporte de Custo Mínimo

Algoritmos e Estruturas de Dados II

Grafos Árvores Geradoras Mínimas

CAL ( ) MIEIC/FEUP Grafos: Introdução (Março, 2011)

Projeto e Análise de Algoritmos

Estruturas de Dados. Árvores. Onde Estamos? Introdução à estrutura de dados. Alocação dinâmica de memória. Pilhas. Filas.

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

Transcrição:

Busca em largura Algoritmos em Grafos Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional.

Conteúdo Introdução Exemplo de execução Procedimento bfs Análise do tempo de execução do bfs Árvore primeiro na extensão Referências

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste material e a resolução (por parte do aluno) de todos os exercícios indicados. 3 / 24

Introdução

Introdução Dado um grafo G = (V, E) e um vértice de origem s, a busca em largura explora sistematicamente as arestas de G até descobrir cada vértice acessível a partir de s O algoritmo calcula a distância (menor número de arestas) deste s até todos os vértices acessíveis a partir de s O algoritmo produz uma árvore primeiro em extensão Recebe este nome porque expande a fronteira entre vértices descobertos e não descobertos uniformemente ao longo da extensão da fronteira. Descobre todos os vértices de distância k de s antes de descobrir quaisquer vértices de distância k + 1 5 / 24

Exemplo de execução

Exemplo de execução 7 / 24

Exemplo de execução 8 / 24

Exemplo de execução 9 / 24

Exemplo de execução 10 / 24

Exemplo de execução 11 / 24

Exemplo de execução 12 / 24

Exemplo de execução 13 / 24

Exemplo de execução 14 / 24

Exemplo de execução 15 / 24

Procedimento bfs

Procedimento bfs bfs(g, s) 1 for cada vértice u em G.V - {s} 2 u.d = infinito 3 u.pai = nil 4 u.cor = branco 5 s.d = 0 6 s.pai = nil 7 s.cor = cinza 8 Q = {} 9 Q.add(s) 10 while Q!= {} 11 u = Q.remove() 12 for cada vértice v em G.adj[u] 13 if v.cor == branco 14 v.d = u.d + 1 15 v.pai = u 16 v.cor = cinza 17 Q.add(v) 18 u.cor = preto 17 / 24

Análise do tempo de execução do bfs

Análise do tempo de execução do bfs Análise agregada 19 / 24

Análise do tempo de execução do bfs Análise agregada O teste da linha 13 garante que cada vértice é colocado na fila no máximo uma vez, e portanto, é retirado da fila no máximo uma vez As operações de colocar e retirar da fila demoram O(1), assim, o tempo total das operações com filas é O(V ) A lista de adjacência de cada vértice é examinada apenas quando o vértice é retirado da fila, desta forma, no máximo uma vez Como a soma dos comprimentos das listas de adjacências é Θ(E), o tempo para percorrer todas as listas é no máximo O(E) O tempo de inicialização é O(V ) Tempo total de execução do bfs é O(V + E) 19 / 24

Árvore primeiro na extensão

Árvore primeiro na extensão bfs constrói uma árvore primeiro na extensão A árvore é definida pelo campo pai (π) em cada vértice Para um grafo G = (V, E) e um vértice de origem s, definimos o subgrafo predecessor de G como G π = (V π, E π ) onde V π = {v V : v.π NIL} {s} E π = {(v.π, v) : v V π {s}} 21 / 24

Árvore primeiro na extensão bfs constrói uma árvore primeiro na extensão A árvore é definida pelo campo pai (π) em cada vértice Para um grafo G = (V, E) e um vértice de origem s, definimos o subgrafo predecessor de G como G π = (V π, E π ) onde V π = {v V : v.π NIL} {s} E π = {(v.π, v) : v V π {s}} O subgrafo predecessor G π é uma árvore primeiro na extensão Vπ consiste nos vértices acessíveis a partir de s Para todo v Vπ, existe um caminho único simples desde s até v em G π, que também é um caminho mais curto de s até v em G Uma árvore primeiro na extensão é de fato uma árvore, pois é conexa e E π = V π 1 21 / 24

Árvores primeiro na extensão imprimir-caminho(g, s, v) 1 if v == s 2 imprimir s 3 else if v.pai == nil 4 imprimir "nenhum caminho existente de" s "para" v 5 else 6 imprimir-caminho(g, s, v.pai) 7 imprimir v Executado em tempo 22 / 24

Árvores primeiro na extensão imprimir-caminho(g, s, v) 1 if v == s 2 imprimir s 3 else if v.pai == nil 4 imprimir "nenhum caminho existente de" s "para" v 5 else 6 imprimir-caminho(g, s, v.pai) 7 imprimir v Executado em tempo linear no número de vértices no caminho impresso, pois cada chamada recursiva é feita para um caminho com um vértice menor que o atual 22 / 24

Referências

Referências Thomas H. Cormen et al. Introduction to Algorithms. 3rd edition. Capítulo 22.2. 24 / 24