Análise de algoritmos

Documentos relacionados
Análise de algoritmos

Algoritmos de ordenação Heapsort

Ordenação Interna. Prof. Jonas Potros

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

Algoritmos de Ordenação: HeapSort

Análise de algoritmos

Heap Sort. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1

Algoritmos de ordenação Quicksort

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Estruturas de Dados 2

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

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

Métodos de Ordenação Parte 3

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Ordenação em Tempo Linear. Leitura: Cormen Capítulo 8

Ordenação por Seleção Métodos de Ordenação Parte 3

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

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA

Análise de algoritmos

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados 2006/2007

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

CES-11. Algoritmos e Estruturas de Dados. Representação. A estrutura heap. Heap é uma árvore binária com duas propriedades:

Árvores Auto-ajustadas

INF 1010 Estruturas de Dados Avançadas

Heaps binomiais. Gabriel Pedro de Castro. 20 de setembro de 2007

Aula 28: Listas de Prioridades

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

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

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Heapsort ordenação por árvore de seleção

INF111 Programação II Aulas 11, 12, 13 Ordenação

Métodos de Ordenação Parte 4

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

Projeto e Análise de Algoritmos

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

Interval Trees, Priority Search Trees, Segment Trees. João Comba. Pesquisas intervalares sobre segmentos de reta

Teoria dos Grafos Aula 8

Algoritmos e Estruturas de Dados 2005/2006

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Ordenação por Intercalação Métodos de Ordenação Parte 4

Listas de Prioridade. Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC.

Algoritmos e Estrutura de dados II. Fila de Prioridade e Heaps

Processamento Cosequencial: Ordenação Interna e Externa. Thiago A. S. Pardo Leandro C. Cintra M.C.F. de Oliveira Cristina D. A.

Otimização em Grafos

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

Análise de Algoritmos Algoritmos de Ordenação

Algoritmos de Ordenação: Cota Inferior

Heapsort ordenação por árvore de seleção

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Heapsort é um método de ordenação cujo princípio de funcionamento é o mesmo utilizado para a ordenação por seleção.

INF 1010 Estruturas de Dados Avançadas

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Algoritmos. para concursos. Questões comentadas

DAINF - Departamento de Informática

Estruturas de Dados 2

INF 1010 Estruturas de Dados Avançadas

Estruturas Discretas

3. Conteúdo de um vértice v é conteúdo dos filhos de v.

Extra- Algoritmos de Ordenação

Arvores binárias. Fonte: PF 14 pf/algoritmos/aulas/bint.html

Heapsort Letícia Rodrigues Bueno

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

Algoritmos de Ordenação e Pesquisa. Marco Antonio Moreira de Carvalho Algoritmos e Estrutura de Dados

Programação II Aula 07

Ordenação de Dados (III) HeapSort

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

Busca em Regiões Ortogonais

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Priority Queues. Problem. Let S={(s1,p1), (s2,p2),,(sn,pn)} where s(i) is a key and p(i) is the priority of s(i).

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

Aula 18 Algoritmos básicos de busca e classificação

Árvores AVL e Árvores B. Jeane Melo

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Comportamento assintótico

Ordenação em Tempo Linear

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

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

Filas com prioridade - Introdução (1)

Pesquisa em Memória Primária. Prof. Jonas Potros

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

Métodos de Ordenação

Análise de algoritmos

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Projeto e Análise de Algoritmos

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

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

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

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Transcrição:

Análise de algoritmos Heapsort Conteúdo Introdução A estrutura de dados heap Definição Manutenção da propriedade de heap A construção de um heap O algoritmo heapsort Exercícios Referências Introdução Heapsort (ordenação por monte) é um algoritmo de ordenação Características O tempo de execução é O(n lg n) (como a ordenação por intercalação) Ordenação local (como a ordenação por inserção) Usa uma estrutura de dados chamada heap 3 / 24 A estrutura de dados heap A estrutura de dados heap (binário) é um array que pode ser visto como uma árvore binária praticamente completa Cada nó da árvore corresponde ao elemento do array que armazena o valor do nó A árvore está preenchida em todos os níveis, exceto talvez no nível mais baixo, que é preenchido a partir da esquerda Um array A que representa um heap tem dois atributos A.comprimento que é o número de elementos do array A.tamanho-do-heap que é o número de elementos no heap armazenado em A (A.tamanho-do-heap A.comprimento) A raiz da árvore é A[1] Dado o índice i de um nó, os índice de seu pai, do filho a esquerda e do filho a direita podem ser calculados da forma parent(i) = i/2 left(i) = 2i right(i) = 2i + 1 4 / 24

Exemplo 5 / 24 A estrutura de dados heap Existem dois tipos de heap heap máximo heap mínimo Em ambos os tipos, os valores nos nós satisfazem uma propriedade de heap Em um heap máximo, a propriedade de heap máximo é que, para todo nó i diferente da raiz A[parent(i)] A[i] Em um heap mínimo, a propriedade de heap mínimo é que, para todo nó i diferente da raiz A[parent(i)] A[i] Visualizando o heap como uma árvore, definimos a altura de um nó como o número de arestas no caminho descendente simples mais longo deste o o nó até uma folha a altura do heap como a altura de sua raiz a altura de um heap é Θ(lg n) 6 / 24 Operações sobre heap Algumas operações sobre heap max-heapify, executado no tempo O(lg n), é a chave para manter a propriedade de heap máximo build-max-heap, executado em tempo linear, produz um heap a partir de um array de entrada não ordenado heapsort, executado no tempo O(n lg n), ordena um array localmente 7 / 24 Manutenção da propriedade de heap A função max-heapify recebe como parâmetro um array A e um índice i, e requer que As árvores binárias com raízes em left(i) e right(i) sejam heaps máximos A[i] pode ser menor que seus filhos A função max-heapify deixa que o valor A[i] flutue para baixo, de maneira que a subárvore com raiz no índice i se torne um heap 8 / 24

Exemplo 9 / 24 O algoritmo max-heapify max-heapify(a, i) 1 l = left(i) 2 r = rigth(i) 3 if l <= A.tamanho-do-heap e A[l] > A[i] then 4 maior = l 5 else 6 maior = i 7 if r <= A.tamanho-do-heap e A[r] > A[maior] then 8 maior = r 9 if maior!= i then 10 troca(a[i], A[maior]) 11 max-heapify(a, maior) 10 / 24 Análise do tempo de execução do max-heapify Tempo Θ(1) para corrigir os relacionamentos entre os elementos A[i], A[left[i]] e A[right(i)] Tempo para executar max-heapify em uma subárvore com raiz em dos filhos do nó i As subárvores de cada filho têm tamanho máximo igual a 2n/3 - ocorre quando o último nível da árvore está metade cheia Portanto, o tempo total de execução pode ser descrito pela recorrência T (n) T (2n/3) + Θ(1) Pelo caso 2 do teorema mestre T (n) = O(lg n) Também podemos expressar o tempo de execução de max-heapify em um nó de altura h como O(h) 11 / 24 A construção de um heap O procedimento max-heapify pode ser usado de baixo para cima para converter um array A[1..n] em um heap máximo Os elementos no subarray A[( n/2 + 1)..n] são folhas, e cada um é um heap máximo O procedimento build-max-heap percorre os nós restantes da árvore e executa max-hepify sobre cada um 12 / 24

Exemplo do funcionamento do build-max-heap 13 / 24 A construção de um heap build-max-heap(a) 1 A.tamanho-do-heap = A.comprimento 2 for i = piso(a.comprimento / 2) downto 1 3 max-heapify(a, i) 14 / 24 Corretude do build-max-heap build-max-heap mantém o seguinte invariante de laço No começo de cada iteração do laço das linhas 2 e 3, cada nó i + 1, i + 2,..., n é a raíz de um heap máximo Vamos mostrar que esta invariante é verdadeira e como consequência vamos concluir que build-max-heap é correto Inicialização: antes da primeira linha i = n/2 e cada nó n/2 + 1, n/2 + 2,..., n é uma folha, e portanto é a raiz de um heap máximo Manutenção: os filhos de i tem um número maior que i e pelo invariante são raízes de heaps máximos. Esta é a condição exigida para que a chamada max-hepify(a, i) torne i a raiz de um heap máximo. Decrementar i restabelece a invariante para a próxima iteração Término: i = 0, pela invariante de laço 1, 2,..., n são raizes de um heap máximo, particularmente o nó 1 é uma raíz 15 / 24 Análise do build-max-heap Limite superior simples Cada chamada de max-heapify custa O(lg n) e existem O(n) chamadas, portanto, o tempo de execução é O(n lg n). 16 / 24

Análise do build-max-heap Limite restrito O tempo de execução de max-heapify varia com a altura da árvore, a altura da maioria dos nós é pequena Um heap de n elementos tem altura lg n e no máximo n/2 h+1 nós de altura h Logo, podemos expressar o tempo de execução do build-max-heap como lg n n T (n) = 2 h+1 O(h) lg n n h = O 2 2 h = O n ( 1 h h 2) 17 / 24 Análise do build-max-heap Limite restrito Obtemos que T (n) = O n ( 1 h h 2) Usando a fórmula kx k = h ( ) h 1 = 2 k=1 1/2 (1 1/2) 2 = 2 x (1 x) 2 com x = 1 2, obtemos Portanto, o tempo de execução de build-max-heap é T (n) = O(n.2) = O(n) 18 / 24 O algoritmo heapsort Construir um heap, usando a função build-max-heap Trocar o elemento A[1] com A[n], e atualiza o tamanho do heap para n 1 Corrigir o heap com a função max-heapify e repetir o processo 19 / 24 Exemplo do funcionamento do heapsort 20 / 24

O algoritmo heapsort heapsort(a) 1 build-max-heap(a) 2 for i = A.comprimento downto 2 3 troca(a[1], A[i]) 4 A.tamanho-do-heap = A.tamanho-do-heap - 1 5 max-heapify(a, 1) 21 / 24 Análise do heapsort A chamada a build-max-heap demora O(n) O procedimento max-heapify demora O(lg n) e é chamado n 1 Portanto, o tempo de execução do heapsort é O(n lg n) 22 / 24 Exercícios Exercícios 6.1-1 a 6.1-7 Exercícios 6.2-1 a 6.2-6 Exercícios 6.3-1 a 6.3-3 Exercícios 6.4-1 a 6.4-3 23 / 24 Referências Thomas H. Cormen et al. Introdução a Algoritmos. 2 a edição em português. Capítulo 6. 24 / 24