Árvores de Suporte de Custo Mínimo
|
|
|
- Maria do Mar Miranda César
- 7 Há anos
- Visualizações:
Transcrição
1 Árvores de Suporte de Custo Mínimo Pedro Ribeiro DCC/FCUP 2016/2017 Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
2 Árvore de Suporte Uma árvore de suporte ou árvore de extensão (spanning tree) é um subconjunto das arestas de um grafo não dirigido que forma uma árvore ligando todos os vértices. A figura seguinte ilustra um grafo e 3 árvores de suporte: Podem existir várias árvores de suporte para um dado grafo Uma árvore de suporte de um grafo terá sempre V 1 arestas Se tiver menos arestas, não liga todos os nós Se tiver mais arestas, forma um ciclo Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
3 Árvore de Suporte de Custo Mínimo Se o grafo for pesado (tem valores associados às arestas), existe a noção de árvore de suporte de custo mínimo (minimum spanning tree - MST), que é a árvore de suporte cuja soma dos pesos das arestas é a menor possível. A figura seguinte ilustra um grafo não dirigido e pesado. Qual é a sua árvore de suporte de custo mínimo? Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
4 Árvore de Suporte de Custo Mínimo Custo total: 46 = Custo total: 41 = Custo total: 37 = E de facto esta última é uma árvore de suporte de custo mínimo! Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
5 Árvore de Suporte de Custo Mínimo Pode existir mais do que uma MST. Por exemplo, no caso dos pesos serem todos iguais, qualquer árvore de suporte tem custo mínimo! Em termos de aplicações, a MST é muito útil. Por exemplo: Quando queremos ligar computadores em rede gastando a mínima quantidade de cabo. Quando queremos ligar casas à rede de electricidade gastando o mínimo possível de fio. Como descobrir uma MST para um dado grafo? Existe um número exponencial de árvores de suporte Procurar todas as árvores possíveis e escolher a melhor não é eficiente! Como fazer melhor? Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
6 Algoritmos para Calcular MST Vamos falar essencialmente de dois algoritmos diferentes: Prim e Kruskal Ambos os algoritmos são greedy: em cada passo adicionam uma nova aresta tendo o cuidado de garantir que as arestas já selecionadas são parte de uma MST Algoritmo Genérico para MST A Enquanto A não forma uma MST fazer Descobrir uma aresta (u, v) que é segura para adicionar A A (u, v) retorna(a) Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
7 Algoritmo de Prim Começar num qualquer nó Em cada passo adicionar à árvore já formada o nó cujo custo seja menor (que tenha aresta de menor peso a ligar à árvore). Em caso de empate qualquer um funciona. Vamos ver passo a passo para o grafo anterior... Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
8 Algoritmo de Prim (imagem de Introduction to Algorithms, 3rd Edition) Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
9 Algoritmo de Prim (imagem de Introduction to Algorithms, 3rd Edition) Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
10 Algoritmo de Prim Vamos operacionalizar isto em código: Algoritmo de Prim para descobrir MST de G (começar no nó r) Prim(G, r): Para todos os nós v de G fazer: v.dist v.pai NULL r.dist 0 Q G.V /* Todos os vértices de G */ Enquanto Q fazer u EXTRAIR-MINIMO(Q) /* Nó com menor dist */ Para todos os nós v adjacentes a u fazer Se v Q e peso(u, v) < v.dist então /* Actualizar distâncias */ v.pai u v.dist peso(u, v) Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
11 Algoritmo de Prim A complexidade do algoritmo de Prim depende da operação EXTRAIR-MINIMO Vamos chamar EXTRAIR-MINIMO V vezes Cada aresta vai ser considerada duas vezes (uma para cada um dos nós extremidade) no ciclo que actualiza os valores de dist A complexidade final é O( E + V custo(extrair-minimo)) Uma implementação naive em que o mínimo é descoberto de forma linear (um ciclo para ver qual o menor) daria uma complexidade de O( E + V 2 ) É possível reduzir para um tempo linearítmico se usarmos uma estrutura de dados que suporte a operação de extrair o mínimo em tempo logarítmico! Uma estrutura de dados para esta função (devolver o elemento mínimo ou máximo) é conhecida como fila de prioridade Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
12 Heap: uma implementação de uma fila de prioridade Uma heap é uma estrutura de dados organizada como uma árvore binária equilibrada, implementando uma fila de prioridade Existem dois tipos básicos de heaps: max-heaps: o elemento mais prioritário é o de máximo valor min-heaps: o elemento mais prioritário é o de menor valor Para termos uma heap a seguinte condição tem de ser respeitada: o pai de um nó tem sempre mais prioridade do que ele. Dito de outro modo, numa max-heap os filhos de um nó têm menor valor que ele, e numa min-heap os filhos têm maior valor. Uma heap deve ser uma árvore binária completa até ao seu penúltimo nível, e o último nível deve estar preenchido da esquerda para a direita. Isto garante que a altura máxima de uma árvore com n nós é proporcional a log 2 n Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
13 Heap: uma implementação de uma fila de prioridade Uma heap é tipicamente implementada com um array, onde: Os filhos do nó (i) são os nós nas posições (i 2) e (i 2 + 1) O pai de um nó (i) é o nó na posição (i/2). A figura seguinte ilustra uma min-heap e o array correspondente: Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
14 Heap: uma implementação de uma fila de prioridade Existem duas operações importantes numa heap: remover e inserir Remover um elemento passa por remover a raiz Numa min-heap a raíz é o menor elemento de todos Numa max-heap a raíz é o maior elemento de todos Depois de remover a raíz é necessário repor as condições de heap. Para isso, faz-se o seguinte: Pega-se no último elemento e coloca-se na posição da raíz O elemento baixa (down-heap), trocando com o mais prioritário dos filhos, até que a condição de heap esta reposta No máximo faz-se O(log n) operações, porque a árvore é equilibrada! Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
15 Heap: uma implementação de uma fila de prioridade Inserir um elemento passa por: Colocá-lo na última posição O elemento sobe (up-heap), trocando com o pai, até que a condição de heap esteja reposta No máximo faz-se O(log n) operações, porque a árvore é equilibrada! Exemplo para inserção do elemento 2 Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
16 Algoritmo de Prim e Filas de Prioridade Recorda que a complexidade do algoritmo de Prim é O( E + V custo(extrair-minimo)) Supondo que usamos uma estrutura de dados especializada para EXTRAIR-MINIMO necessitamos de ter em conta o tempo para actualizar (baixar) o valor da distância de um nó: O( E custo(actualizar) + V custo(extrair-minimo)) Com uma min-heap: Cada operação de retirar o nó mais perto vai custar O(log V ) (é só chamar a remoção da heap) Cada operação de actualização vai também custar O(log V ) (como uma actualização só pode reduzir o valor, é chamar um up-heap) A complexidade final é O( E log V + V log V, que é o mesmo que O( E log V ) (existem assintoticamente pelo menos tantas arestas como nós, caso contrário nem uma árvore de suporte conseguiriamos fazer) Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
17 Algoritmo de Prim e Filas de Prioridade As linguagens de programação tipicamente trazem já disponível uma fila de prioridade que garante complexidade logarítimica para inserção de um novo valor e remoção do mínimo: C++: priority queue Java: PriorityQueue Estas implementações não trazem tipicamente a parte de actualizar um valor (nem a hipótese de retirar um valor no meio da fila). Três possíveis hipóteses para lidar com actualização de valor: 1 Implementar heap manualmente (podemos chamar up-heap em qualquer nó no meio da fila() Complexidade do Prim: O( E log V ) ou 2 Usar uma PriorityQueue e actualizar ser feito via inserção de novo elemento na heap com a nova distância (cada nó será inserido no máximo tantas vezes quanto o seu grau) Complexidade do Prim: O( E log E ) ou 3 Usamos uma BST (ex: um set) e actualizar ser feito via remoção + inserção (ambas as operações em tempo logarítmico) Complexidade do Prim: O( E log V ) Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
18 Algoritmo de Kruskal Manter uma floresta (conjunto de árvores), onde no início cada nó é uma árvore isolada e no final todos os nós fazem parte da mesma árvore Ordenar as arestas por ordem crescente de peso Em cada passo selecionar a aresta de menor valor que ainda não foi testada e, caso esta aresta junte duas árvores ainda não ligadas, então juntar a aresta, combinando as duas árvores numa única árvore. Vamos ver passo a passo para o grafo anterior... Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
19 Algoritmo de Kruskal (imagem de Introduction to Algorithms, 3rd Edition) Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
20 Algoritmo de Kruskal (imagem de Introduction to Algorithms, 3rd Edition) Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
21 Algoritmo de Kruskal (imagem de Introduction to Algorithms, 3rd Edition) Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
22 Algoritmo de Kruskal Vamos operacionalizar isto em código: Algoritmo de Kruskall para descobrir MST de G Kruskal(G, r): A Para todos os nós v de G fazer: MAKE-SET(v) /* criar árvore para cada nó */ Ordenar arestas de G por ordem crescente de peso Para cada aresta (u, v) de G fazer: /* segue ordem anterior */ Se FIND-SET(u) FIND-SET(v) então /* estão em árvores difer. */ A A {(u, v)} UNION(u,v) /* juntar duas árvores */ retorna(a) MAKE-SET(v): criar conjunto apenas com v FIND-SET(v): descobrir qual o conjunto de v UNION(u,v): unir os conjuntos de u e v Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
23 Se mantivermos um atributo auxiliar para cada nó dizendo qual o conjunto onde está, podemos fazer o FIND-SET em O(1), mas o UNION passa a custar O( V ) (mudar esse atributo para os nós de uma das listas a ser unida), pelo que a complexidade final não melhora. Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28 Algoritmo de Kruskal Para além da ordenação, a complexidade do algoritmo de Kruskall depende das operações MAKE-SET, FIND-SET e UNION Vamos chamar MAKE-SET no início V vezes Cada aresta vai levar a duas chamadas a FIND-SET e potencialmente a uma chamada a UNION Uma implementação naive em que um conjunto é mantido numa lista, daria um MAKE-SET com O(1) (criar lista com o nó), um FIND-SET com O( V ) (procurar lista com elemento ) e um UNION com O(1) (juntar duas filas é só fazer o apontador do último nó de uma lista apontar para o início do primeiro nó da outra lista.) Isto daria uma complexidade de O( E V )
24 Union-Find É possível reduzir para um tempo linearítmico se usarmos uma estrutura de dados que suporte estas operações em tempo logarítmico ou constante (supondo que a ordenação demora O(n log n)) Uma estrutura de dados para esta função (manter conjuntos, suportando as operaçãos FIND-SET e UNION) é conhecida como union-find, e uma boa maneira de a implementar é usando florestas de conjuntos disjuntos. Cada conjunto é representando por uma árvore Cada nó guarda uma referência para o seu pai O representante de um conjunto é o nó raíz da árvore do conjunto Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
25 Union-Find Uma maneira naive de implementar florestas de conjuntos disjuntos: Naive UNION-FIND MAKE-SET(x): x.pai x /* Raíz aponta para ela própria */ FIND(x): Se x.pai = x então retorna x Senão retorna FIND(x.pai) UNION(x, y): xraiz FIND(x) yraiz FIND(y) xraiz.pai yraiz Com esta implementação podemos continuar a ter tempo linear por operação porque as árvores podem ficar desiquilibradas (e com altura igual ao número de nós). Para melhorar vamos usar duas coisas... Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
26 Union-Find - Melhoria Union by Rank Union by Rank - Juntar sempre a árvore mais pequena à árvore maior quando se faz uma união. O que queremos é não fazer subir tanto a altura das árvores Isto garante que a altura das árvores só aumenta se as duas árvores já tiveram altura igual. A ideia é manter um atributo rank que nos diz essencialmente a altura da árvore. Esta melhoria, por si só, já garante uma complexidade logarítmica para os FIND e UNION! Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
27 Union-Find - Melhoria Union by Rank UNION-FIND com Union by Rank MAKE-SET(x): x.pai x x.rank 0 UNION(x, y): xraiz FIND(x) yraiz FIND(y) Se xraiz = yraiz então retorna /* x e y não estão no mesmo conjunto - temos de os unir */ Se xraiz.rank < yraiz.rank então xraiz.pai yraiz Senão, Se xraiz.rank > yraiz.rank então yraiz.pai xraiz Senão yraiz.pai xraiz xraiz.rank xraiz.rank + 1 Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
28 Union-Find - Melhoria Path Compression A segunda melhoria é comprimir as árvores ( path compression ), fazendo que todos os nós que um FIND percorre passem a apontar directamente para a raíz, potencialmente diminuindo assim a altura da árvore UNION-FIND com Path Compression FIND(x): Se x.pai x então x.pai FIND(x.pai) retorna x.pai Com union by rank e path compression o custo amortizado por operação é, na prática, constante (para mais pormenores espreitar por exemplo o livro desta unidade curricular). O tempo para o algoritmo de Kruskall passa a ser dominado... pela ordenação das arestas! Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2016/ / 28
Árvores de Suporte de Custo Mínimo
Árvores de Suporte de Custo Mínimo Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Árvores de Suporte de Custo Mínimo 2014/2015 1 / 28 Árvore de Suporte Uma árvore de suporte ou árvore de extensão
Distâncias Mínimas. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Distâncias Mínimas 2014/ / 27
Distâncias Mínimas Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Distâncias Mínimas 2014/2015 1 / 27 Distâncias Mínimas Uma das aplicações mais típicas em grafos é o cálculo de distâncias.
Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma
Grafos Árvores espalhadas mínimas Conteúdo Introdução Como construir uma árvore geradora miníma Algoritmos Referências Introdução Dado um grafo conectado não orientado G = (V, E) e uma função peso w :
Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32
Grafos - Introdução Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/2015 1 / 32 Conceito Definição de Grafo Formalmente, um grafo é: Um conjunto de nós/vértices (V).
Algoritmo de Dijkstra Estudo e Implementação
Teoria dos Grafos 0/0 Algoritmo de Dijkstra Estudo e Implementação Professora: Claudia Boeres Alunos: José Alexandre Macedo Maycon Maia Vitali Problema do Caminho Mínimo Qual o caminho mínimo entre um
Teoria dos Grafos Aula 8
Teoria dos Grafos Aula 8 Aula passada Grafos com pesos, caminhos e distâncias Ideia e algoritmo de Dijkstra Dijkstra o próprio Aula de hoje Corretude de Dijkstra Fila de prioridades e Heap Dijkstra eficiente
Otimização em Grafos
Otimização em Grafos Luidi G. Simonetti PESC/COPPE 2017 Luidi Simonetti (PESC) EEL857 2017 1 / 35 Teoria dos Grafos - Relembrando Árvore Um grafo G é uma árvore se é conexo e não possui ciclos (acíclico).
Estruturas de Dados para Conjuntos Disjuntos: Union-find Letícia Rodrigues Bueno
Estruturas de Dados para Conjuntos Disjuntos: Union-find Letícia Rodrigues Bueno UFABC Estruturas de Dados para Conjuntos Disjuntos: Introdução Estruturas de Dados para Conjuntos Disjuntos: Introdução
Grafos: árvores geradoras mínimas. Graça Nunes
Grafos: árvores geradoras mínimas Graça Nunes 1 Motivação Suponha que queremos construir estradas para interligar n cidades Cada estrada direta entre as cidades i e j tem um custo associado Nem todas as
Lista de Prioridades. Estrutura de Dados II Prof. Erinaldo
Lista de Prioridades Estrutura de Dados II Prof. Erinaldo Heap Ou lista de prioridades, é composta por um conjunto finito de dados, cada qual com uma chave que determinará sua prioridade dentro da lista.
Grafos: componentes fortemente conexos, árvores geradoras mínimas
Grafos: componentes fortemente conexos, árvores geradoras mínimas SCE-183 Algoritmos e Estruturas de Dados 2 Thiago A. S. Pardo Maria Cristina 1 Componentes fortemente conexos Um componente fortemente
Estruturas de Dados para Conjuntos Disjuntos. Estruturas de dados para conjuntos disjuntos
Estruturas de Dados para Conjuntos Disjuntos Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 32 Estruturas de dados para conjuntos disjuntos Também conhecido por UNION-FIND. Objectivo: Manter uma
INF 1010 Estruturas de Dados Avançadas
INF 1010 Estruturas de Dados Avançadas Listas de Prioridades e Heaps 1 Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um
Desenho e Análise de Algoritmos
Desenho e Análise de Algoritmos Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Desenho e Análise de Algoritmos 2014/2015 1 / 13 Informações Gerais Site: http://www.dcc.fc.up.pt/~pribeiro/aulas/daa1415/
Algoritmos Greedy. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/ / 40
Algoritmos Greedy Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 1 / 40 Algoritmos Greedy Vamos falar de algoritmos greedy. Em português são conhecidos como: Algoritmos
GRAFOS Aula 08 Árvore Geradora Mínima: Algoritmos de Kruskal e Prim-Jarnik Max Pereira
Ciência da Computação GRAFOS Aula 08 Árvore Geradora Mínima: Algoritmos de Kruskal e Prim-Jarnik Max Pereira Árvore Geradora (spanning tree) É um subconjunto de um grafo G que possui todos os vértices
Filas de Prioridade e Heaps
Filas de Prioridade e Heaps Pedro Ribeiro DCC/FCUP 2017/2018 Pedro Ribeiro (DCC/FCUP) Filas de Prioridade e Heaps 2017/2018 1 / 31 Filas de prioridade - Motivação As urgências de um hospital funcionam
Otimização em Grafos
Otimização em Grafos Luidi G. Simonetti PESC/COPPE 2017 Luidi Simonetti (PESC) EEL857 2017 1 / 33 Definição do Problema Dado: um grafo ponderado G = (V, E), orientado ou não, onde d : E R + define as distâncias
Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 33
Pesquisa em Grafos Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/2015 1 / 33 Pesquisa em Grafos Uma das tarefas mais importantes é saber percorrer um grafo, ou seja
Aula 19 Conjuntos disjuntos (Union-find)
MC3305 Algoritmos e Estruturas de Dados II Aula 19 Conjuntos disjuntos (Union-find) Prof. Jesús P. Mena-Chalco [email protected] 2Q-2015 1 Números de Ackermann 2 3 Ackermann A função de Ackermann
SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca
ÁRVORES SUMÁRIO Fundamentos Árvores Binárias Árvores Binárias de Busca 2 ÁRVORES Utilizadas em muitas aplicações Modelam uma hierarquia entre elementos árvore genealógica Diagrama hierárquico de uma organização
Tecnicas Essencias Greedy e Dynamic
Tecnicas Essencias Greedy e Dynamic Paul Crocker RELEASE - Reliable and Secure Computation Group Universidade da Beira Interior, Portugal October 2010 1 / 27 Outline 1 Introdução 2 Exemplo Greedy I : Interval
Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010
Filas de prioridade Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010 Qual a Utilidade das Filas de Prioridade? Trabalhos maiores devem ser executados no fim (mesmo que não tenha sido o último
Filas de Prioridades Letícia Rodrigues Bueno
Filas de Prioridades Letícia Rodrigues Bueno UFABC Heaps Heaps: lista linear com chaves s 1,..., s n com propriedade s i s i/2, para 1 < i < n; Heaps Heaps: lista linear com chaves s 1,..., s n com propriedade
Desenho e Análise de Algoritmos
Desenho e Análise de Algoritmos Pedro Ribeiro DCC/FCUP 2016/2017 Pedro Ribeiro (DCC/FCUP) Desenho e Análise de Algoritmos 2016/2017 1 / 14 Informações Gerais Site: http://www.dcc.fc.up.pt/~pribeiro/aulas/daa1617/
ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES
ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES Listas de Prioridades! Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade! A prioridade associada a um dado pode
Aula 28: Listas de Prioridades
28.1 Aula 28: Listas de Prioridades Conceitos básicos Definição de heap Alteração de prioridades 28.2 Listas de Prioridades Motivação: Os dados possuem prioridades. A prioridade de um dado pode variar
Teoria dos Grafos Aula 6
Teoria dos Grafos Aula 6 Aula passada Busca em grafos Busca em largura (BFS Breadth First Search) Propriedades Aula de hoje BFS implementação Complexidade Busca em profundidade (DFS) Conectividade, componentes
Fluxo Máximo. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Fluxo Máximo 2014/ / 28
Fluxo Máximo Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Fluxo Máximo 2014/2015 1 / 28 Fluxo Máximo Um grafo pesado pode ser interpretado como uma rede de canalizações onde o peso é a capacidade
Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35
Heaps Estrutura de Dados Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Conteúdo Introdução Definição de Heap Heap Binária Implementação com vetor Fila de Prioridades
Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I
2014-01 Aula 16 Fila de Prioridade / HeapSort Adaptado por Reinaldo Fortes para o curso de 2014-01 Arquivo original: Aula 17: HeapSort Ordenação: HeapSort Prof. Túlio Toffolo http://www.toffolo.com.br
O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste
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
Listas de Prioridade. Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC.
Listas de Prioridade Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC. Capítulo 6 Prioridade } Algumas aplicações precisam recuperar rapidamente um dado
INF 1010 Estruturas de Dados Avançadas
INF Estruturas de Dados Avançadas Grafos // DI, PUC-Rio Estruturas de Dados Avançadas. Algoritmo de Dijkstra 8 8 Algoritmo de Dijkstra 8 8 8 Algoritmo de Dijkstra 8 8 8 Algoritmo de Dijkstra 8 8 8 8 8
Ciclos hamiltonianos e o problema do caixeiro viajante
Ciclos hamiltonianos e o problema do caixeiro viajante Algoritmos em Grafos Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional.
ESTRUTURAS DE DADOS. prof. Alexandre César Muniz de Oliveira. 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8.
ESTRUTURAS DE DADOS prof. Alexandre César Muniz de Oliveira 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8. Grafos Sugestão bibliográfica: ESTRUTURAS DE DADOS USANDO C Aaron
Algoritmo da IFT 2 / 16. Algoritmo da IFT Estrutura da fila de prioridade Resolvendo empates. Algoritmo 1 Algoritmo geral da IFT
Transformada Imagem-Floresta (Estrutura de dados) Prof. Dr. Paulo A. V. de Miranda Instituto de Matemática e Estatística (IME), Universidade de São Paulo (USP) [email protected] 1 / 16 Algoritmo
Grafos: Busca. Algoritmos e Estruturas de Dados 2. Graça Nunes
Grafos: Busca Algoritmos e Estruturas de Dados Graça Nunes Percorrendo um grafo Percorrendo um Grafo Percorrer um grafo é uma tarefa fundamental Pense no caso de se procurar uma certa informação associada
Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira
Árvores SCC-202 Algoritmos e Estruturas de Dados I Lucas Antiqueira Listas e árvores Listas lineares Um nó após o outro, adjacentes Nó sucessor e antecessor Diversas aplicações necessitam de estruturas
GRAFOS BUSCAS E MENOR CAMINHO. Prof. André Backes
8//6 GRAFOS BUSCAS E MENOR CAMINHO Prof. André Backes Busca em grafos Definição Consiste em explorar o grafo de uma maneira bem específica. Trata-se de um processo sistemático de como caminhar por seus
O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste
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
ÁRVORES E ÁRVORE BINÁRIA DE BUSCA
ÁRVORES E ÁRVORE BINÁRIA DE BUSCA Prof. André Backes Definição 2 Diversas aplicações necessitam que se represente um conjunto de objetos e as suas relações hierárquicas Uma árvore é uma abstração matemática
Estruturas de Dados 2
Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Dividir e Conquistar IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/83 Projeto de Algoritmos por Divisão
INF1010 Lista de Exercícios 2
INF00 Lista de Exercícios 2 Árvores. Construir algoritmo para dada uma árvore n-ária, transformá-la em uma árvore binária. 2. Qual a maior e menor quantidade de nós que podem existir em uma árvore binária
MATEMÁTICA DISCRETA PARA ENGENHARIA DE COMPUTAÇÃO
MATEMÁTICA DISCRETA PARA ENGENHARIA DE COMPUTAÇÃO Profa. Kathya Collazos Linares *As aulas baseiam-se no material do Professor Antonio Alfredo Ferreira Loureiro; Jorge Figueiredo e Judith Gersting Árvore
Problema da Árvore Geradora Mínima (The Minimum Spanning Tree Problem-MST)
Volmir Eugênio Wilhelm Departamento de Engenharia de Produção UFPR 45 Problema da Árvore Geradora Mínima (The Minimum Spanning Tree Problem-MST) Alguns problemas de otimização combinatória podem ser formulados
Pedro Ribeiro 2014/2015
Ordenação Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Ordenação 2014/2015 1 / 35 Ordenação A ordenação é um passo inicial para muitos outros algoritmos Ex: encontrar a mediana Quando não
Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões
Edital de Seleção 024/2017 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: «Nome» INSCRIÇÃO: «Inscrição» Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome
Ordenação de Dados (III) HeapSort
UFSC-CTC-INE INE53 - Estruturas de Dados Ordenação de Dados (III) Prof. Ronaldo S. Mello 00/ HeapSort HeapSort também é um método de seleção ordena através de sucessivas seleções do elemento correto a
Conjuntos disjuntos dinâmicos
Conjuntos disjuntos dinâmicos CLRS 21 Algoritmos p. 1 Conjuntos disjuntos Seja S = {S 1,S 2,...,S n } uma coleção de conjuntos disjuntos, ou seja, S i S j = para todo i j. Algoritmos p. 2 Conjuntos disjuntos
6. Pesquisa e Ordenação
6. Pesquisa e Ordenação Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 6. Pesquisa e Ordenação Estruturas de Dados 1 / 30 Pesquisa de Informação A pesquisa eficiente de informação
Estruturas de Dados. Pedro Ribeiro 2017/2018 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Estruturas de Dados 2017/ / 16
Estruturas de Dados Pedro Ribeiro DCC/FCUP 2017/2018 Pedro Ribeiro (DCC/FCUP) Estruturas de Dados 2017/2018 1 / 16 Informações Gerais Site: http://www.dcc.fc.up.pt/~pribeiro/aulas/edados1718/ Piazza: http://piazza.com/up.pt/spring2018/cc1007
Filas de Prioridade & Heaps
Filas de Prioridade & SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic [email protected] Instituto
Projeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Apresentação da Disciplina Edirlei Soares de Lima Por que Estudar Algoritmos? Razões Práticas e Teóricas: Devemos conhecer um conjunto de algoritmos
Estruturas de Dados Apresentação
Estruturas de Dados Apresentação Prof. Eduardo Alchieri Objetivos Apresentar técnicas fundamentais na análise e projeto de estruturas de dados em programas computacionais Vamos aprender: Quais são as principais
Árvores Vermelho-Preto
Árvores Vermelho-Preto SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich http://www.icmc.usp.br/~paulovic [email protected] Instituto de Ciências Matemáticas e de Computação (ICMC)
Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade
Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade Gustavo E.A.P.A. Batista 25 de janeiro de 2005 1 Contextualização 2 Caminhos Mínimos Caminhos Mínimos de uma Origem
Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB
Estrutura de Dados Carlos Eduardo Batista Centro de Informática - UFPB [email protected] Árvores (parte 3) Estruturas de Dados 2 Organização dos dados: Linear: Listas, pilhas, filas. Relação sequencial.
8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38
8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados
8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38
8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados
Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP
Aula 13: Ordenação - Heapsort Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Filas de Prioridades É uma estrutura de dados onde a chave de cada item reflete sua habilidade relativa de abandonar
Árvores e Mapas. Luís Lopes. Estruturas de Dados DCC-FCUP
Árvores e Mapas Luís Lopes DCC-FCUP Estruturas de Dados Estruturas não lineares Os arrays e as listas são exemplos de estruturas de dados lineares, cada elemento tem: um predecessor único (excepto o primeiro
Árvores AVL e Árvores B. Jeane Melo
Árvores AVL e Árvores B Jeane Melo Roteiro Árvores Binárias Árvores AVL Definição Motivação Balanceamento Operações de rebalanceamento Árvores B Introdução Árvores Binárias Árvores binárias Cada nó tem
Algoritmos em Grafos
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)
Splaying Tree (Árvore espalhada) Estrutura de Dados II Jairo Francisco de Souza
Splaying Tree (Árvore espalhada) Estrutura de Dados II Jairo Francisco de Souza Introdução Inventada por Adelson Velskii e Landis - 1962. Também chamada de Árvores Auto-Ajustadas ou Árvore de Afunilamento.
Ordenação Interna. Prof. Jonas Potros
Ordenação Interna Prof. Jonas Potros Heap A estrutura de dados heap é um objeto arranjo que pode ser visto como uma árvore binária completa. A árvore está completamente preenchida em todos os níveis, exceto
Bubble Sort. Tempo total O(n 2 )
Bubble Sort Considere uma seqüência de n elementos que se deseja ordenar. O método da bolha resolve esse problema através de várias passagens sobre a seqüência Não é um algoritmo eficiente, é estudado
Projeto e Análise de Algoritmos. Método Guloso
Projeto e Análise de Algoritmos Método Guloso Altigran Soares da Silva Universidade Federal do Amazonas Departamento de Ciência da Computação Árvore Geradora Um árvore geradora de um grafo G é um subgrafo
Pedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas
Programação Funcional 16 a Aula Árvores equilibradas Pedro Vasconcelos DCC/FCUP 2014 Aula anterior Operações sobre árvores binárias ordenadas: 1 pesquisa; 2 inserção; 3 remoção. Estas operações são mais
Pedro Ribeiro (DCC/FCUP) Sessão de Discussão dos Problemas
Pedro Ribeiro (DCC/FCUP) Sessão de Discussão dos Problemas Uma visão geral (e pessoal) # Nome Tipo Dificuldade Alg. Imp. Tot. Ling. #Linhas A Speed Leaks Ordenação por vários critérios 5 5 5 15 C 71 B
