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

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

O PROFESSOR ADVERTE: SLIDES NÃO DEVEM SER UTILIZADOS COMO ÚNICA FONTE PARA ESTUDAR OS CONTEÚDOS MINISTRADOS. PROCURE CONSULTAR, PELO MENOS, A

Ordenação Interna. Prof. Jonas Potros

INF 1010 Estruturas de Dados Avançadas

Métodos de Ordenação Parte 3

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

Métodos de Ordenação. Ordenação Interna. Ordenação Interna

Métodos de Ordenação

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

MÉTODOS DE CLASSIFICAÇÃO EM MEMÓRIA PRIMÁRIA. George Gomes Cabral

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI1

Aula 11 Métodos de Classificação em memória primária. Prof. Gustavo Callou

5. Algoritmos de Ordenação

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

Breve Introdução à Complexidade Assintótica de Algoritmos Letícia Rodrigues Bueno

Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort. Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional

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

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

Algoritmos de Ordenação: HeapSort

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

Ordenação de Dados (III) HeapSort

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira

Aula 12 Métodos de Classificação: - Classificação por Inserção Direta - Classificação por Seleção Direta

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;

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

2. Ordenação por Seleção

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort.

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

Heapsort Letícia Rodrigues Bueno

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

ÁRVORES. Prof. Yan ndre Maldonado - 1. Prof. Yandre Maldonado e Gomes da Costa

Métodos de Ordenação

Lista de Prioridades. Estrutura de Dados II Prof. Erinaldo

INF 1010 Estruturas de Dados Avançadas

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

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

Algoritmos de Ordenação: Cota Inferior

Algoritmos de ordenação Heapsort

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

Estruturas de Dados Algoritmos de Ordenação

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Filas de Prioridades Letícia Rodrigues Bueno

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

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

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

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Á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

Análise de algoritmos

Ordenação de Dados. Ordenação de Dados

Ordenação. Prof. Jonas Potros

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

Algoritmos de ordenação: Inserção e Shellsort

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

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

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Métodos de Ordenação Parte I

Extra- Algoritmos de Ordenação

SCC-501 Introdução à Ciência de Computação II

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

Árvores binárias de busca

Árvores Vermelho-Preto

Árvores Vermelho-Preto

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

Estruturas de Dados 2

Métodos de Ordenação Parte 4

Estrutura de Dados. Plano de Ensino. Vilson Heck Junior. Campus Lages. Instituto Federal de Santa Catarina

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

Métodos de Ordenação

Análise de algoritmos

PLANO DE DISCIPLINA DISCIPLINA: Estrutura de Dados 2

Árvores Binárias. Disciplina de Algoritmos e Estrutura de Dados III. Prof. Marcos Antonio Schreiner 17/03/2015

Programa Analítico de Disciplina SIN213 Projeto de Algoritmos

ÁRVORES. Árvores. Árvores. Prof. Yandre Maldonado e Gomes da Costa

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

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

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

ESTRUTURA DE DADOS CIÊNCIA E TECNOLOGIA DO RIO. Curso de Tecnologia em Sistemas para Internet

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

Ordenação em Memória Primária Estrutura de Dados II

ESTRUTURA DE DADOS DCC013. Árvore Binária de Busca

Aula 28: Listas de Prioridades

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

SCC-201 Introdução à Ciência de Computação II

Informática Parte 18 Prof. Márcio Hunecke

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

DAINF - Departamento de Informática

Árvores binárias de busca

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

BCC202 - Estrutura de Dados I

Árvores de pesquisa. Árvores de pesquisa equilibradas

Algoritmos e Estruturas de Dados 2006/2007

Carlos Eduardo Batista. Centro de Informática - UFPB

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

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Ordenação e Busca em Arquivos

Limite assintótico para a ordenação, Ordenação em tempo linear

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

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

Transcrição:

UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Heapsort ordenação por árvore de seleção Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa

Prof. Yandre Maldonado - 2 Métodos de ordenação interna: Simples: complexidade média O(n 2 ); Eficientes: complexidade média O(n log n); Simples: Inserção; Seleção; Troca (bolha); Eficientes: Shell (ou shellsort); Quick (ou quicksort); Heap (ou heapsort).

Prof. Yandre Maldonado - 3 Método proposto por Floyd e Williams, em 1964; É considerado um método de ordenação de bom desempenho; O desempenho no pior caso é semelhante ao caso médio; É considerado uma variação do método de ordenação por seleção; Faz um uso comportado da memória;

Prof. Yandre Maldonado - 4 O método consiste em: Transformar a seqüência inicial em uma seqüência que esteja associada à uma estrutura do tipo heap; Heap é uma árvore binária em que: A diferença máxima de altura entre os nós folha é de um nível; Os nós do nível mais profundo são preenchidos da esquerda para a direita; Todo nó deve armazenar uma chave maior do que as dos seus filhos;

Prof. Yandre Maldonado - 5 Um heap pode ser representado em um vetor com índices c 1, c 2,..., c n da seguinte forma: Para toda chave c i, com i entre 1 e n div 2: c 1 é a raiz da árvore; c 2i é a raiz da sub-árvore esquerda de c i e c 2i+1 é a raiz da sub-árvore direita de c i ;

Para um vetor com índices de 1 a 7 haveria o seguinte heap associado: Prof. Yandre Maldonado - 6 c 1 c 2 c 3 c 4 c 5 c 6 c 7 C 1 C 2 C 3 C 4 C 5 C 6 C 7

A seqüência de chaves descrita a seguir será transformada em um heap: Prof. Yandre Maldonado - 7 `19 5 30 11 9 12 20 19 5 30 11 9 12 20 Para que a estrutura seja um heap, cada nó deve ter chave maior do que as chaves de seus filhos.

A transformação começa a partir do nó que ocupa a posição n div 2 do vetor, neste caso a posição de índice 3: Prof. Yandre Maldonado - 8 `19 5 30 11 9 12 20 19 5 30 11 9 12 20 Como esta subárvore respeita o critério para formação do heap, volta-se para o nó associado à posição anterior do vetor.

Os próximos nós serão obtidos decrementando-se o índice no vetor até atingir o índice 1: Prof. Yandre Maldonado - 9 `19 5 30 11 9 12 20 19 5 30 11 9 12 20 Neste ponto, percebe-se que a chave 5 é menor do que a dos seus filhos, então troca-se as posições desta chave com a maior chave associada aos seus filhos.

Os próximos nós serão obtidos decrementando-se o índice no vetor até atingir o índice 1: Prof. Yandre Maldonado - 10 `19 11 30 5 9 12 20 19 11 30 5 9 12 20 Agora esta subárvore respeita o critério para formação do heap. Com isto, volta-se para o nó associado à posição anterior do vetor.

O índice 1 finalmente foi atingido: Prof. Yandre Maldonado - 11 `19 11 30 5 9 12 20 19 11 30 5 9 12 20 Neste ponto, percebe-se que a chave 19 é menor do que a de um dos seus filhos, então troca-se a posição destas chaves.

Agora, percebe-se que esta última troca trouxe um novo problema ao heap como um todo : Prof. Yandre Maldonado - 12 `30 11 19 5 9 12 20 30 11 19 5 9 12 20 Para corrigir este problema, percorre-se agora no sentido inverso as posições, de 1 até n div 2.

Para corrigir o problema, percorre-se agora no sentido inverso as posições, de 1 até n div 2: Prof. Yandre Maldonado - 13 `30 11 19 5 9 12 20 30 11 19 5 9 12 20 Esta sub-árvore respeita o critério para formação do heap. Com isto, passa-se para a próxima posição do vetor.

Para corrigir o problema, percorre-se agora no sentido inverso as posições, de 1 até n div 2: Prof. Yandre Maldonado - 14 `30 11 19 5 9 12 20 30 11 19 5 9 12 20 Esta sub-árvore respeita o critério para formação do heap. Com isto, passa-se para a próxima posição do vetor.

Para corrigir o problema, percorre-se agora no sentido inverso as posições, de 1 até n div 2: Prof. Yandre Maldonado - 15 `30 11 19 5 9 12 20 30 11 19 5 9 12 20 Neste ponto, percebe-se que a chave 19 é menor do que a de um dos seus filhos, então troca-se a posição destas chaves.

Para corrigir o problema, percorre-se agora no sentido inverso as posições, de 1 até n div 2: Prof. Yandre Maldonado - 16 `30 11 20 5 9 12 19 30 11 20 5 9 12 19 A varredura do índice 1 até n div 2 deve ser repetida até que nenhuma nova troca ocorra. Assim, o heap estará definitivamente formado.

Formado o heap, sabe-se que a maior de todas as chaves está posicionada na primeira posição do vetor: Prof. Yandre Maldonado - 17 `30 11 20 5 9 12 19 30 11 20 5 9 12 19 Neste caso, nenhuma nova troca acontece, portanto o heap já está formado.

Com isto, troca-se a posição da primeira chave com a última no vetor: Prof. Yandre Maldonado - 18 `19 11 20 5 9 12 30 19 11 20 5 9 12 Sabendo-se que a posição definitiva da maior de todas as chaves será a última do vetor, faz-se a troca entre a chave do primeiro e a do último índice.

Prof. Yandre Maldonado - 19 Entende-se que a última chave já encontrou sua posição definitiva e as demais passam a formar um novo heap, de tamanho menor: `19 11 20 5 9 12 30 Novo heap 19 11 20 5 9 12 O heap agora será formado pelas chaves que estão nas posições entre os índices 1 e 6.

Prof. Yandre Maldonado - 20 Para restabelecer o heap, percorre-se as chaves no vetor a partir da posição 1 até a posição n div 2 * percorrendo apenas os índices que correspondam a elementos eventualmente trocados: `19 11 20 5 9 12 30 19 11 20 5 9 12 Neste ponto, percebe-se que a chave 19 é menor do que a de um dos seus filhos, então troca-se a posição destas chaves. * Sem alterar chaves das células sombreadas, que já se encontram em suas posições definitivas.

Prof. Yandre Maldonado - 21 Para restabelecer o heap, percorre-se as chaves no vetor a partir da posição 1 até a posição n div 2 * percorrendo apenas os índices que correspondam a elementos eventualmente trocados: 20 11 19 5 9 12 30 20 11 19 5 9 12 * Sem alterar chaves das células sombreadas, que já se encontram em suas posições definitivas.

Prof. Yandre Maldonado - 22 Para restabelecer o heap, percorre-se as chaves no vetor a partir da posição 1 até a posição n div 2 * percorrendo apenas os índices que correspondam a elementos eventualmente trocados: 20 11 19 5 9 12 30 20 11 19 5 9 12 Esta sub-árvore respeita o critério para formação do heap, já que a posição de índice 7 do vetor não é mais parte do heap. * Sem alterar chaves das células sombreadas, que já se encontram em suas posições definitivas.

Atingido o índice n div 2, o heap está finalmente restabelecido: Prof. Yandre Maldonado - 23 20 11 19 5 9 12 30 20 11 19 5 9 12 Restabelecido o heap, a chave que ocupa a posição de índice 1 pode ser trocada com a que está no último índice associado ao heap.

Agora, mais uma chave encontrou sua posição definitiva e as demais passam a formar um novo heap, de tamanho menor: Prof. Yandre Maldonado - 24 12 11 19 5 9 20 30 Novo heap 12 11 19 5 9 O heap agora será formado pelas chaves que estão nas posições entre os índices 1 e 5.

Prof. Yandre Maldonado - 25 Para restabelecer o heap, percorre-se as chaves no vetor a partir da posição 1 até a posição n div 2 * percorrendo apenas os índices que correspondam a elementos eventualmente trocados: 12 11 19 5 9 20 30 12 11 19 5 9 Neste ponto, percebe-se que a chave 12 é menor do que a de um dos seus filhos, então troca-se a posição destas chaves. * Sendo n igual a 5 neste momento. As posições sombreadas não podem mais ser alteradas.

Prof. Yandre Maldonado - 26 Para restabelecer o heap, percorre-se as chaves no vetor a partir da posição 1 até a posição n div 2 * percorrendo apenas os índices que correspondam a elementos eventualmente trocados: 19 11 12 5 9 20 30 19 11 12 5 9 * Sendo n igual a 5 neste momento. As posições sombreadas não podem mais ser alteradas.

Prof. Yandre Maldonado - 27 Para restabelecer o heap, percorre-se as chaves no vetor a partir da posição 1 até a posição n div 2 * percorrendo apenas os índices que correspondam a elementos eventualmente trocados: 19 11 12 5 9 20 30 19 11 12 5 9 O índice 2 era o último a ser percorrido nesta variação, com isto, o heap está formado e a chave que ocupa o índice 1 pode ser trocada com aquela que ocupa a última posição do heap. * Sendo n igual a 5 neste momento. As posições sombreadas não podem mais ser alteradas.

Agora, mais uma chave encontrou sua posição definitiva e as demais passam a formar um novo heap, de tamanho menor: Prof. Yandre Maldonado - 28 9 11 12 5 19 20 30 Novo heap 5 9 11 12 O heap agora será formado pelas chaves que estão nas posições entre os índices 1 e 4.

Prof. Yandre Maldonado - 29 Para restabelecer o heap, percorre-se as chaves no vetor a partir da posição 1 até a posição n div 2 * percorrendo apenas os índices que correspondam a elementos eventualmente trocados: 9 11 12 5 19 20 30 5 9 11 12 Neste ponto, percebe-se que a chave 9 é menor do que as suas filhas, então troca-se a posição dela com a da maior das filhas. * Sendo n igual a 4 neste momento. As posições sombreadas não podem mais ser alteradas.

Prof. Yandre Maldonado - 30 Para restabelecer o heap, percorre-se as chaves no vetor a partir da posição 1 até a posição n div 2 * percorrendo apenas os índices que correspondam a elementos eventualmente trocados: 12 11 9 5 19 20 30 5 12 11 9 O índice 2 era o último a ser percorrido nesta variação, com isto, o heap está formado e a chave que ocupa o índice 1 pode ser trocada com aquela que ocupa a última posição do heap. * Sendo n igual a 4 neste momento. As posições sombreadas não podem mais ser alteradas.

Prof. Yandre Maldonado - 31 Para restabelecer o heap, percorre-se as chaves no vetor a partir da posição 1 até a posição n div 2 * percorrendo apenas os índices que correspondam a elementos eventualmente trocados: 5 11 9 12 19 20 30 5 11 9 Neste ponto, percebe-se que a chave 5 é menor do que as suas filhas, então troca-se a posição dela com a da maior das filhas. * Sendo n igual a 3 neste momento. As posições sombreadas não podem mais ser alteradas.

Prof. Yandre Maldonado - 32 Para restabelecer o heap, percorre-se as chaves no vetor a partir da posição 1 até a posição n div 2 * percorrendo apenas os índices que correspondam a elementos eventualmente trocados: 11 5 9 12 19 20 30 11 5 9 Restabelecido o heap, a chave da posição de índice 1 pode ser trocada com a da posição de índice 3. * Sendo n igual a 3 neste momento. As posições sombreadas não podem mais ser alteradas.

Prof. Yandre Maldonado - 33 Para restabelecer o heap, percorre-se as chaves no vetor a partir da posição 1 até a posição n div 2 * percorrendo apenas os índices que correspondam a elementos eventualmente trocados: 9 5 11 12 19 20 30 5 9 Esta sub-árvore respeita o critério para formação de um heap. Assim, a chave da posição de índice 1 pode ser trocada com a do índice 2. * Sendo n igual a 2 neste momento. As posições sombreadas não podem mais ser alteradas.

Prof. Yandre Maldonado - 34 5 9 11 12 19 20 30 Seqüência ordenada!

Prof. Yandre Maldonado - 35 Desempenho do Heapsort: Médio: O (n log n); Pior caso: O (n log n); Boa opção para situações em que é necessário garantir que a ordenação não esteja sujeita a um desempenho desastroso; Não indicado para quantidades pequenas de chaves devido ao custo da reconstrução do heap; Desempenho médio duas vezes inferior ao do Quicksort.

Bibliografia Heapsort Prof. Yandre Maldonado - 36 Azeredo, P. A. Métodos de Classificação de Dados e Análise de suas Complexidades. Rio de Janeiro: Editora Campus, 1996; Moraes, Celso Roberto. Estruturas de Dados e Algoritmos. São Paulo: Berkeley Brasil, 2001; Wirth, N. Algoritmos e Estruturas de Dados. Rio de Janeiro: LTC, 1999; Ziviani, N. Projeto de Algoritmos. São Paulo: Pioneira Thomson Learning, 2002.