SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Introdução ao
JQuery e AJAX
Prof: Sérgio Souza Costa
Heap
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com
https://sites.google.com/site/profsergiocosta/home
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
http://www.slideshare.net/skosta/presentations?order=popular
Filas de prioridade
Diferentemente das filas comuns, neste caso, um elemento ao
entrar na fila tem prioridade.
O primeiro a sair não é necessariamente o primeiro a entrar
Filas de prioridade
Exemplos de aplicação
●Uma fila de pacientes esperando transplante de orgão.
●Em sistemas operacionais, a fila de prioridade de processos
aguardando o processador para execução.
○Os processos mais prioritários são executados antes dos
outros.
Veremos algumas formas de implementar uma fila de
prioridade. Algumas são eficientes na inserção, outras na
remoção.
Filas de prioridade
Fila de prioridade é uma estrutura de dado que mantém uma
coleção de elementos, cada um com uma prioridade
associada. Valem as operações seguintes:
●Inserir um elemento novo na fila de prioridade.
●Remover o elemento de maior prioridade da fila de
prioridade.
Filas de prioridade
Eficiente na inserção:
● cada elemento inserido é anexado à lista
● a cada extração, percorremos a lista em busca do elemento
com maior prioridade
Se há n elementos na fila, então...
O(1) para inserções
O(n) para extrações
Filas de prioridade
Eficiente na remoção:
●a cada inserção, a fila é percorrida até o ponto de inserção,
inserção ordenada.
●a extração é sempre do primeiro elemento
Se há n elementos na fila, então...
● O(n) para inserções
● O(1) para extrações
Filas de prioridade
Eficiente na inserção:
Para esta codificação não precisamos modificar a função
enfileira
Precisamos modificar a função dequeue (desenfileira).
○ Primeiro encontramos o maior valor, percorrendo a lista
da fila.
○ Depois removemos este valor da lista (list_remove)
○ Por fim, retornamos o maior valor
Filas de prioridade
Eficiente na remoção:
Para esta codificação não precisamos modificar a função
desenfileira.
Precisamos modificar a função enfileira.
●Neste caso, inserimos ordenado dentro da lista.
Para maior eficiência, usamos heaps
Um heap é uma estrutura de dados baseada em árvore
binárias...
Os dados armazenados em um heap devem satisfazer a
seguinte condição:
● todo nó deve ter valor maior (ou menor) que seus filhos
● Não confunda a condição de heap com a de árvore binária
de pesquisa!
Heaps
Podemos representar heaps em vetores
A idéia é linearizar a árvore por níveis
●a raíz é armazenada na primeira posição do vetor,
●o filho à esquerda da raíz na segunda posição,
●o filho à direita da raíz na terceira,
●o primeiro neto da raíz na quarta,
●etc..
Heaps - Representação
Heaps - Representação
int Pai(int i)
1: return (int)i/2
int Esq(int i)
1: return 2*i
int Dir(int i)
1: return 2*i + 1
Heaps - Representação
Para inserir um novo elemento com prioridade e,
● Cria-se um novo elemento no fim do array A para
receber e.
Isso pode perturbar a propriedade do “heap”.
Para consertar isso:
● se e for maior que seu pai, então os dois trocam de
lugar.
● essa operação é repetida até que e encontre o seu
lugar correto no vetor A.
Heaps - Representação
Heaps - Inserção
Insere(A,e)
1: n = tam(A);
2: se n = max
3: then erro 'heap cheio'
4: i = n
5: enquanto (i > 1) e (A[Pai(i)] < e)
6: A[i] := A[Pai(i)]
7: i := Pai(i)
8: A[i] = e
9: n++
Note que nesse algoritmo, o novo elemento não é colocado
dentro do “heap” até que o lugar apropriado tenha sido
obtido
Heaps - Inserção
A remoção em si é muito simples, já que o elemento de maior
prioridade é A[1].
Após a remoção, entretanto, precisamos rearranjar os
elementosdo“heap”:
● Colocamos em A[1] o elemento da última posição: A[num] e
chamamos o algoritmo de correção:
Elemento ExtraiMáximo()
1: if num = 0
2: then erro 'heap vazio'
3: máximo := A[1]
4: A[1] := A[num]
5: num--
6: CorrigeHeap(1)
7: return máximo
Heaps - Inserção
CorrigeHeap(i)
1: esq := Esq(i)
2: dir := Dir(i)
3: maior := i
4: if esq <= tam(A) && A[esq] > A[i]
5: then maior := esq
6: if dir <= tam(A) && A[dir] > A[maior]
7: then maior := dir
8: if maior != i
9: then troque A[i] por A[maior]
10: CorrigeHeap(maior)
Heap - Correção
Perceba que podemos ordenar os elementos em um heap sem
"dificuldades"...
Basta extrair os elementos um a um
O algoritmo conhecido como heapsort explora exatamente essa
idéia
Heap - Ordenação
O problema é: como fazer com que os elementos de um vetor
desordenado passem à condição de heap?
Uma solução simples é usar o algoritmo de inserção repetidas
vezes...
● Custo: O(n log n)
Heap - Ordenação
Então podemos construir um novo vetor, dado um
vetor desordenado de entrada, e corrigi-lo depois:
void HeapSort(int *vet, int n) {
Heap heap;
ConstroiHeap(&heap, vet, n);
for (int i = 0; i < n; i++)
vet[heap.n] = ExtraiMaximo(&heap);
}
Heap - Ordenação

Mais conteúdo relacionado

Mais procurados (20)

Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Pilha
PilhaPilha
Pilha
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
(A11b) LabMM3 - JavaScript - Arrays
(A11b) LabMM3 - JavaScript - Arrays(A11b) LabMM3 - JavaScript - Arrays
(A11b) LabMM3 - JavaScript - Arrays
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Coleções do c
Coleções do cColeções do c
Coleções do c
 
Aula15 - Array PHP
Aula15 - Array PHPAula15 - Array PHP
Aula15 - Array PHP
 
Algoritmos de ordenação - heapsort
Algoritmos de ordenação - heapsortAlgoritmos de ordenação - heapsort
Algoritmos de ordenação - heapsort
 
Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas Estáticas
 
Listas em C
Listas em CListas em C
Listas em C
 
Collection Java (2/2)
Collection Java (2/2)Collection Java (2/2)
Collection Java (2/2)
 
Java 12 Colecoes
Java 12 ColecoesJava 12 Colecoes
Java 12 Colecoes
 
Arrays em java
Arrays em javaArrays em java
Arrays em java
 
Aula 16
Aula 16Aula 16
Aula 16
 
Arrays (vetores) em Java
Arrays (vetores) em JavaArrays (vetores) em Java
Arrays (vetores) em Java
 
Listas duplamente encadeadas
Listas duplamente encadeadasListas duplamente encadeadas
Listas duplamente encadeadas
 

Semelhante a Heap

Aula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.pptAula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.pptssuserd654cb1
 
Aula_02_-_Listas_com_Vetores-OOP.ppt
Aula_02_-_Listas_com_Vetores-OOP.pptAula_02_-_Listas_com_Vetores-OOP.ppt
Aula_02_-_Listas_com_Vetores-OOP.pptssuserd654cb1
 
15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binariaRicardo Bolanho
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAyrton Yagami
 
Listas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem CListas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem CMarcosEvandroCintra
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursaosamuelthiago
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Thaci Santos
 

Semelhante a Heap (20)

Slide Semana2 Rodrigo
Slide Semana2 RodrigoSlide Semana2 Rodrigo
Slide Semana2 Rodrigo
 
Aula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.pptAula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
 
Aula_02_-_Listas_com_Vetores-OOP.ppt
Aula_02_-_Listas_com_Vetores-OOP.pptAula_02_-_Listas_com_Vetores-OOP.ppt
Aula_02_-_Listas_com_Vetores-OOP.ppt
 
Slide Share s2 Rodd
Slide Share s2 RoddSlide Share s2 Rodd
Slide Share s2 Rodd
 
Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2
 
15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binaria
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton Yagami
 
Lpiii dp-apostila
Lpiii dp-apostilaLpiii dp-apostila
Lpiii dp-apostila
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Aquece Para a prova de EDA3
Aquece Para a prova de EDA3Aquece Para a prova de EDA3
Aquece Para a prova de EDA3
 
Listas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem CListas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem C
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursao
 
Grupo2
Grupo2Grupo2
Grupo2
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
Ordenação
OrdenaçãoOrdenação
Ordenação
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.
 
Algoritmo0
Algoritmo0Algoritmo0
Algoritmo0
 
Java básico - Módulo 06: Array
Java básico - Módulo 06: ArrayJava básico - Módulo 06: Array
Java básico - Módulo 06: Array
 
Pged 04
Pged 04Pged 04
Pged 04
 

Mais de Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasSérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computadorSérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosSérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemSérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaSérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoSérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theoremsSérgio Souza Costa
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsSérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosSérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)Sérgio Souza Costa
 

Mais de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 
Contextualizando o moodle
Contextualizando o moodleContextualizando o moodle
Contextualizando o moodle
 

Heap

  • 1. Introdução ao JQuery e AJAX Prof: Sérgio Souza Costa Heap
  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta http://www.slideshare.net/skosta/presentations?order=popular
  • 3. Filas de prioridade Diferentemente das filas comuns, neste caso, um elemento ao entrar na fila tem prioridade. O primeiro a sair não é necessariamente o primeiro a entrar
  • 4. Filas de prioridade Exemplos de aplicação ●Uma fila de pacientes esperando transplante de orgão. ●Em sistemas operacionais, a fila de prioridade de processos aguardando o processador para execução. ○Os processos mais prioritários são executados antes dos outros. Veremos algumas formas de implementar uma fila de prioridade. Algumas são eficientes na inserção, outras na remoção.
  • 5. Filas de prioridade Fila de prioridade é uma estrutura de dado que mantém uma coleção de elementos, cada um com uma prioridade associada. Valem as operações seguintes: ●Inserir um elemento novo na fila de prioridade. ●Remover o elemento de maior prioridade da fila de prioridade.
  • 6. Filas de prioridade Eficiente na inserção: ● cada elemento inserido é anexado à lista ● a cada extração, percorremos a lista em busca do elemento com maior prioridade Se há n elementos na fila, então... O(1) para inserções O(n) para extrações
  • 7. Filas de prioridade Eficiente na remoção: ●a cada inserção, a fila é percorrida até o ponto de inserção, inserção ordenada. ●a extração é sempre do primeiro elemento Se há n elementos na fila, então... ● O(n) para inserções ● O(1) para extrações
  • 8. Filas de prioridade Eficiente na inserção: Para esta codificação não precisamos modificar a função enfileira Precisamos modificar a função dequeue (desenfileira). ○ Primeiro encontramos o maior valor, percorrendo a lista da fila. ○ Depois removemos este valor da lista (list_remove) ○ Por fim, retornamos o maior valor
  • 9. Filas de prioridade Eficiente na remoção: Para esta codificação não precisamos modificar a função desenfileira. Precisamos modificar a função enfileira. ●Neste caso, inserimos ordenado dentro da lista.
  • 10. Para maior eficiência, usamos heaps Um heap é uma estrutura de dados baseada em árvore binárias... Os dados armazenados em um heap devem satisfazer a seguinte condição: ● todo nó deve ter valor maior (ou menor) que seus filhos ● Não confunda a condição de heap com a de árvore binária de pesquisa! Heaps
  • 11. Podemos representar heaps em vetores A idéia é linearizar a árvore por níveis ●a raíz é armazenada na primeira posição do vetor, ●o filho à esquerda da raíz na segunda posição, ●o filho à direita da raíz na terceira, ●o primeiro neto da raíz na quarta, ●etc.. Heaps - Representação
  • 13. int Pai(int i) 1: return (int)i/2 int Esq(int i) 1: return 2*i int Dir(int i) 1: return 2*i + 1 Heaps - Representação
  • 14. Para inserir um novo elemento com prioridade e, ● Cria-se um novo elemento no fim do array A para receber e. Isso pode perturbar a propriedade do “heap”. Para consertar isso: ● se e for maior que seu pai, então os dois trocam de lugar. ● essa operação é repetida até que e encontre o seu lugar correto no vetor A. Heaps - Representação
  • 16. Insere(A,e) 1: n = tam(A); 2: se n = max 3: then erro 'heap cheio' 4: i = n 5: enquanto (i > 1) e (A[Pai(i)] < e) 6: A[i] := A[Pai(i)] 7: i := Pai(i) 8: A[i] = e 9: n++ Note que nesse algoritmo, o novo elemento não é colocado dentro do “heap” até que o lugar apropriado tenha sido obtido Heaps - Inserção
  • 17. A remoção em si é muito simples, já que o elemento de maior prioridade é A[1]. Após a remoção, entretanto, precisamos rearranjar os elementosdo“heap”: ● Colocamos em A[1] o elemento da última posição: A[num] e chamamos o algoritmo de correção: Elemento ExtraiMáximo() 1: if num = 0 2: then erro 'heap vazio' 3: máximo := A[1] 4: A[1] := A[num] 5: num-- 6: CorrigeHeap(1) 7: return máximo Heaps - Inserção
  • 18. CorrigeHeap(i) 1: esq := Esq(i) 2: dir := Dir(i) 3: maior := i 4: if esq <= tam(A) && A[esq] > A[i] 5: then maior := esq 6: if dir <= tam(A) && A[dir] > A[maior] 7: then maior := dir 8: if maior != i 9: then troque A[i] por A[maior] 10: CorrigeHeap(maior) Heap - Correção
  • 19. Perceba que podemos ordenar os elementos em um heap sem "dificuldades"... Basta extrair os elementos um a um O algoritmo conhecido como heapsort explora exatamente essa idéia Heap - Ordenação
  • 20. O problema é: como fazer com que os elementos de um vetor desordenado passem à condição de heap? Uma solução simples é usar o algoritmo de inserção repetidas vezes... ● Custo: O(n log n) Heap - Ordenação
  • 21. Então podemos construir um novo vetor, dado um vetor desordenado de entrada, e corrigi-lo depois: void HeapSort(int *vet, int n) { Heap heap; ConstroiHeap(&heap, vet, n); for (int i = 0; i < n; i++) vet[heap.n] = ExtraiMaximo(&heap); } Heap - Ordenação