Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Pesquisa e Ordenação: Pesquisa e Ordenação: 
HeapsortHeapsort
Rodrigo VerasRodrigo Veras
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 22
RoteiroRoteiro
 Introdução;
 Ordenação;
 Estrutura Heap;
 Principais Características;
 Tipos de Heap;
 Heapsort;
 Funcionamento do Método;
 Definição do Algoritmo;
 Comparação com outros algoritmos;
 Revisão;
 Exercícios;
IntroduçãoIntrodução
OrdenaçãoOrdenação
IntroduçãoIntrodução
 Pesquisa e Ordenação são operações
fundamentais em computação;
 Existem muitos algoritmos de pesquisa de
ordenação.
 A escolha do algoritmo depende das
propriedades dos dados.
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 44
OrdenaçãoOrdenação
 Ordenação:
 É o ato de se colocar os elementos de uma sequência
de informações, em uma ordem predefinida.
 O termo técnico em inglês para ordenação é sorting,
cuja tradução literal é "classificação".
 Dado uma seqüencia de n dados: <a1,a2,...,an>
 O problema de ordenação é uma permutação
<a1’,a2’,...,an’> dessa seqüencia tal que:
 a1’ ≤ a2’ ≤ ... ≤an’ para alguma relação de ordem.
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 55
OrdenaçãoOrdenação
 Um Algoritmo que ordena uma conjunto,
geralmente representada num vetor, é
chamadado um algoritmos de ordenação.
 Entre os mais importantes, podemos citar
 Bubble sort (ou ordenação por flutuação);
 Insertion sort (ou ordenação por inserção);
 Merge sort (ou ordenação por mistura);
 Heapsort (ou ordenação por heap);
 Quicksort.
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 66
Estrutura Estrutura HeapHeap
Principais CaracterísticasPrincipais Características
Tipos de HeapTipos de Heap
HeapHeap
 A estrutura de dados Heap (binário) é um arranjo
que pode ser visto como uma árvore binária
praticamente completa.
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 88
77 55 60 50 30 44 55 22
77
55 60
50 30 44 55
22
HeapHeap
 Cada nó da árvore corresponde a um elemento
do arranjo que armazena o valor no nó;
 A árvore está completamente preenchida em
todos os níveis, exceto possivelmente no nível
mais baixo, que é preenchido da esquerda para a
direita até certo ponto
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 99
Heap: DefiniçõesHeap: Definições
 Comprimento do arranjo:
 Número de elementos do arranjo;
 comprimento(A);
 Tamanho do heap:
 Número de elementos do heap armazenados no
arranjo;
 tamHeap(A);
 Para todo heap: tamHeap(A) ≤ comprimento(A);
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 1010
Heap: DefiniçõesHeap: Definições
 O elemento A[1] é a raiz da árvore;
 Determinação das relações de um nó i;
 Determinação do pai:
 Pai(i) = Piso(i/2);
 Determinação do filho à esquerda:
 Esquerda(i) = 2*i;
 Determinação do filho à direita:
 Direita(i)= 2*i + 1;
 Exemplo:
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 1111
77 55 60 50 30 44 55 22
Exemplo de uma HeapExemplo de uma Heap
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 1212
77 55 60 50 30 44 55 22
77
55 60
50 30 44 55
22
Heap MáximoHeap Máximo
 A[pai(i)] ≥ A[i].
 Isto é, o valor de um nó é no máximo o valor de seu
pai.
 O maior elemento do heap está na raiz.
 As subárvores de um nó possuem valores
menores ou iguais ao do nó.
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 1313
Heap MínimoHeap Mínimo
 A[pai(i)] ≤ A[i].
 Isto é, o valor de um nó é maior ou igual o valor de seu
pai.
 O menor elemento do heap está na raiz;
 As subárvores de um nó possuem valores
maiores ou iguais ao do nó.
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 1414
HeapsortHeapsort
Funcionamento do MétodoFuncionamento do Método
Definição do AlgoritmoDefinição do Algoritmo
ComparaçãoComparação
Funcionamento do MétodoFuncionamento do Método
 Suponhamos que um arranjo A implementado
sobre um vetor de N elementos.
 O algoritmo de Heapsort para ordenação deste
arranjo consiste em duas fases:
 Construção do Heap H a partir do arranjo A dado;
 Retirada repetida da raiz de H.
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 1616
Construção do HeapConstrução do Heap
 A construção da estrutura heap pode ser
realizada em dois passos:
 Coloca-se o Item a ser inserido no final da árvore;
 Move-se esse Item na árvore até que fique num local
apropriado;
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 1717
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 1818
44, 30, 50, 22, 60, 55, 77, 55
44
44
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 1919
44 30
44, 30, 50, 22, 60, 55, 77, 55
44
30
 Vetor Atualizado
Construção do Heap: ExemploConstrução do Heap: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 2020
44, 30, 50, 22, 60, 55, 77, 55
44 30 50
44
30 50
 Vetor Atualizado
Construção do Heap: ExemploConstrução do Heap: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 2121
44, 30, 50, 22, 60, 55, 77, 55
50 30 44
50
30 44
 Vetor Atualizado
Construção do Heap: ExemploConstrução do Heap: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 2222
44, 30, 50, 22, 60, 55, 77, 55
50 30 44 22
50
30 44
22
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 2323
44, 30, 50, 22, 60, 55, 77, 55
50 30 44 22 60
50
30 44
22 60
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 2424
44, 30, 50, 22, 60, 55, 77, 55
50 60 44 22 30
50
60 44
22 30
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 2525
44, 30, 50, 22, 60, 55, 77, 55
60 50 44 22 30
60
50 44
22 30
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 2626
44, 30, 50, 22, 60, 55, 77, 55
60 50 44 22 30 55
60
50 44
22 30 55
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 2727
44, 30, 50, 22, 60, 55, 77, 55
60 50 55 22 30 44
60
50 55
22 30 44
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 2828
44, 30, 50, 22, 60, 55, 77, 55
60
50 55
22 30 44 77
60 50 55 22 30 44 77
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 2929
44, 30, 50, 22, 60, 55, 77, 55
60
50 77
22 30 44 55
60 50 77 22 30 44 55
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 3030
44, 30, 50, 22, 60, 55, 77, 55
77 50 60 22 30 44 55
77
50 60
22 30 44 55
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 3131
44, 30, 50, 22, 60, 55, 77, 55
77
50 60
22 30 44 55
55
77 50 60 22 30 44 55 55
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisae Ordenação: HeapsortPesquisa e Ordenação: Heapsort 3232
44, 30, 50, 22, 60, 55, 77, 55
77
50 60
55 30 44 55
22
77 50 60 55 30 44 55 22
Construção do Heap: ExemploConstrução do Heap: Exemplo
 Vetor Atualizado
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 3333
44, 30, 50, 22, 60, 55, 77, 55
77 55 60 50 30 44 55 22
77
55 60
50 30 44 55
22
Construção do HeapConstrução do Heap
 Observações:
 Os nós folhas constituem um heap máximo de 1
elemento;
 Na representação em forma de vetores, os nós folhas são
indexados pelos índices de (n/2 +1) a n.
 Ao inserirmos um novo elemento a propriedade do
heap pode ser quebrada;
 Deve-se percorrer os nós da árvore para verificação da
propriedade;
 Caso necessário, reajustar a posição dos nós;
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 3434
Algoritmo de ConstruçãoAlgoritmo de Construção
Algoritmo constroiHeapMax(A)
tamHeap(A) = comprimento(A);
para i = Piso(comprimento(A)/2) até 1 faça
refazHeapMax(A,i);
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 3535
Manutenção da PropriedadeManutenção da Propriedade
Algoritmo refazHeapMax(A,i)
e = esquerda(i);
d = direita(i);
se (e≤ tamHeap(A) E A[e] > A[i]) então
maior = e;
senão
maior = i;
se (d≤ tamHeap(A) E A[d] > A[maior]) então
maior = d;
se (maior ≠ i) então
trocar (A[i], A[maior])
refazHeapMax(A,maior);
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 3636
Ordenação do ArranjoOrdenação do Arranjo
 Ordenação em Ordem crescente:
 O primeiro elemento do arranjo é o maior elemento
do heap;
 Troca-se o primeiro elemento pelo ultimo e diminui-se
o tamanho do heap:
 O maior elemento já está na posição;
 O heap pode ter deixado de ser um heap máximo;
 Deve-se reconstruir o heap.
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 37
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 38
77
55 60
50 30 44 55
22
77 55 60 50 30 44 55 22
tamHeap(A)= 8;
Troca(A[1], A[8]);
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 39
22 55 60 50 30 44 55 77
tamHeap(A)= 8;
22
55 60
50 30 44 55
77
tamHeap(A) --;
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 40
22 55 60 50 30 44 55 77
tamHeap(A)= 7;
22
55 60
50 30 44 55
77
refazHeapMax(A,1));
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 41
60 55 55 50 30 44 22 77
tamHeap(A)= 7;
60
55 55
50 30 44 22
77
Troca(A[1], A[7]);
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 42
22 55 55 50 30 44 60 77
tamHeap(A)= 7;
22
55 55
50 30 44 60
77
tamHeap(A) --;
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 43
22 55 55 50 30 44 60 77
tamHeap(A)= 6;
22
55 55
50 30 44 60
77
refazHeapMax(A,1));
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 44
55 50 55 22 30 44 60 77
tamHeap(A)= 6;
55
50 55
22 30 44 60
77
Troca(A[1], A[6]);
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 45
44 50 55 22 30 55 60 77
tamHeap(A)= 6;
44
50 55
22 30 55 60
77
tamHeap(A) --;
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 46
44 50 55 22 30 55 60 77
tamHeap(A)= 5;
44
50 55
22 30 55 60
77
refazHeapMax(A,1));
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 47
55 50 44 22 30 55 60 77
tamHeap(A)= 5;
55
50 44
22 30 55 60
77
Troca(A[1], A[5]);
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 48
30 50 44 22 55 55 60 77
tamHeap(A)= 5;
30
50 44
22 55 55 60
77
tamHeap(A) --;
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 49
30 50 44 22 55 55 60 77
tamHeap(A)= 4;
30
50 44
22 55 55 60
77
refazHeapMax(A,1));
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 50
50 30 44 22 55 55 60 77
tamHeap(A)= 4;
50
30 44
22 55 55 60
77
Troca(A[1], A[4]);
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 51
22 30 44 50 55 55 60 77
tamHeap(A)= 4;
22
30 44
50 55 55 60
77
tamHeap(A) --;
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 52
tamHeap(A)= 3;
22
30 44
50 55 55 60
77
22 30 44 50 55 55 60 77
refazHeapMax(A,1));
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 53
tamHeap(A)= 3;
44
30 22
50 55 55 60
77
44 30 22 50 55 55 60 77
Troca(A[1], A[3]);
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 54
tamHeap(A)= 3;
22
30 44
50 55 55 60
77
22 30 44 50 55 55 60 77
tamHeap(A) --;
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 55
tamHeap(A)= 2;
22
30 44
50 55 55 60
77
22 30 44 50 55 55 60 77
refazHeapMax(A,1));
2.1 2.1 -- Funcionamento Do Método( 2ª Fase )Funcionamento Do Método( 2ª Fase )
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 56
tamHeap(A)= 2;
30
22 44
50 55 55 60
77
30 22 44 50 55 55 60 77
Troca(A[1], A[2]);
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 57
tamHeap(A)= 2;
22
30 44
50 55 55 60
77
22 30 44 50 55 55 60 77
tamHeap(A) --;
Ordenação do Arranjo: ExemploOrdenação do Arranjo: Exemplo
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 58
tamHeap(A)= 1;
22
30 44
50 55 55 60
77
22 30 44 50 55 55 60 77
Fim do Algoritmo
Vetor Ordenado
Algoritmo HeapsortAlgoritmo Heapsort
Algoritmo Heapsort(A)
constroiHeapMax(A)
Para i= comprimento(A) até 2 faça
Trocar(A[1], A[i]);
tamHeap(A)--;
refazHeapMax(A,1);
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 5959
ComparativoComparativo
Algoritmo Pior Caso Caso Médio
Insertion Sort O(n2) O(n2)
Selection Sort O(n2) O(n2)
Bubble Sort O(n2) O(n2)
Merge-Sort O(n log2n ) O(n log2n )
Heapsort O(n log2n ) O(n log2n )
Quicksort O(n2) O(n log2n )
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 6060
RevisãoRevisão
 A solução dos problemas de pesquisa e
ordenação são de suma importância para a
computação;
 O heapsort é um poderoso algoritmo para
ordenação de dados;
 Ele utiliza uma estrutura heap para armazenar os
dados;
 Um heap binário é uma árvore binária
paraticamente completa;
 Um heap pode ser máximo ou mínimo;
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 6161
RevisãoRevisão
 O algoritmo heapsort possui duas fases:
 Construção do heap;
 Remoção da raiz do heap; Ao final, obtém-se um arranjo ordenado;
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 6262
ExercíciosExercícios
 Onde, em um heap máximo, o menor elemento
poderia residir, supondo-se que todos os
elementos sejam distintos?
 A seqüência <23, 17, 14, 6, 13, 10, 1, 5, 7, 12> é
um heap máximo?
 Um arranjo que está em sequência ordenada é
um heap mínimo?
 Quais são os números mínimo e máximo de
elementos em um heap de altura h?
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 6363
ExercíciosExercícios
 Mostre que um heap de n elementos tem altura
Piso(log2n).
 Qual é o efeito de chamar refazHeapMax(A,i)
quando A[i] é maior que seus filhos?
 Qual é o efeito de chamar refazHeapMax(A,i)
quando i > compHeap/2?
 Siga a operação do algoritmo HeapSort sobre o
arranjo A = <5,13,2, 25, 7, 17, 20, 8, 4>.
Pesquisa e Ordenação: HeapsortPesquisa e Ordenação: Heapsort 6464

Mais conteúdos dessa disciplina