Documente Academic
Documente Profesional
Documente Cultură
Semestre 2017
SISTEMAS DISTRIBUDOS
Divani Barbosa
http://professoradivani.blogspot.com.br/
Aula 2
AULA 2
Reviso aula anterior
Vantagens e Desvantagens de uso das Classes Vetor e
VetorOrdenado
Fila de Prioridade
Algoritmo
Implementao em Java
HeapSort
Algoritmo
Implementao em Java
2
VANTAGENS
O que ganhamos ao usar vetores ordenados?
como no ordenados.
VANTAGENS
O que ganhamos ao usar vetores ordenados?
FILA DE PRIORIDADE
Estrutura de Armazenamento de Dados de Propsito Especial
FILA DE PRIORIDADE
Estrutura de Armazenamento de Dados de Propsito Especial
frente fim
500
6
43 109 320 500 632 841
frente fim
Classe N:
class No {
espao para armazenamento
public long item;
da informao
public No prox;
7
construtor
FILA DE PRIORIDADE
Ao contrrio do vetor, na estrutura de dados do tipo fila
(simplesmente encadeada) os itens so adicionados
dinamicamente, ou seja, conforme a necessidade do usurio
e da capacidade do sistema onde ela ser operada.
frente final
No No No No
Classe FilaPrior:
Campos Construtor
private No frente; public FilaPrior() {
private No fim; frente = null;
fim = null;
}
Mtodos
front: Retorna o item da frente.
end: Retorna o item do final.
empty: Retorna verdadeiro se fila vazia.
push: Insere itens de maneira ordenada na
fila. 9
class FilaPrior {
private No frente;
private No fim;
public FilaPrior() {
frente = null;
fim = null;
}
No atual = frente;
No anterior = null;
while (atual != null) { // caminha para a posio de inserir
if (atual.item > valor) break; Quando sair do lao while,
anterior = atual; atual ser a posio a ser
atual = atual.prox; inserido o item e anterior o
item anterior ao atual.
}
if (anterior == null) { // Se o No ser inserido no inicio
novo.prox = atual;
frente = novo;
}
else if (atual == null) { // Se o No ser inserido no fim
novo.prox = null;
anterior.prox = novo;
fim = novo;
}
else { // Se No ser inserido no meio
novo.prox = atual;
anterior.prox = novo; 12
}
}
Adicionando N na frente
if (anterior == null)
{
novo.prox = atual; anterior = null
frente = novo;
}
atual
novo frente fim
No No No No
13
N a ser ESTRUTURA
adicionado
Adicionando N na frente
if (anterior == null)
{
novo.prox = atual; anterior = null
frente = novo;
}
atual
novo frente fim
No No No No
14
ESTRUTURA
Adicionando N na frente
if (anterior == null)
{
novo.prox = atual; anterior = null
frente = novo;
}
frente
novo atual fim
No No No No
15
ESTRUTURA
Adicionando N no fim
if (atual == null) {
novo.prox = null; atual = null
anterior.prox = novo;
fim = novo;
}
anterior
frente fim novo
No No No No
16
ESTRUTURA N a ser
adicionado
Adicionando N no fim
if (atual == null) {
novo.prox = null; atual = null
anterior.prox = novo;
fim = novo;
}
anterior
frente fim novo
No No No No
ESTRUTURA
Adicionando N no fim
if (atual == null) {
novo.prox = null; atual = null
anterior.prox = novo;
fim = novo;
}
fim
frente anterior novo
No No No No
18
ESTRUTURA
19
atual
frente anterior N a ser fim
adicionado
No No No
ESTRUTURA
20
atual
frente anterior N a ser fim
adicionado
No No No
ESTRUTURA
21
atual
frente anterior N fim
adicionado
No No No
ESTRUTURA
Adicionando N no meio
else {
novo.prox = atual;
anterior.prox = novo;
}
22
atual
frente anterior novo fim
No No No No
ESTRUTURA
23
VANTAGENS
O que ganhamos ao usar fila de prioridade?
ATIVIDADES FIXAO
Escrever programas para resolver os projetos de programao
ajuda a solidificar sua compreenso do material e demonstra
como aplicar os conceitos da aula.
26
HEAPS
Estrutura de Armazenamento de Dados de Propsito Especial
27
Exemplo:
Fracamente ordenado:
Uma Heap fracamente ordenado em comparao a
uma arvore binria de busca (que usa algoritmo
simples).
Em uma Heap percorrer os Ns em ordem difcil
porque o principio de organizao (condio de Heap)
no to forte.
S se pode afirmar que em
todo caminho da raiz at a
folha os Ns esto
ordenados em ordem
descendente.
Como Heaps so
fracamente ordenados,
algumas operaes so 32
difceis ou impossveis.
Entretanto, a ordem
suficiente apenas para
permitir remoo rpida
do N mximo e insero
rpida de novos Ns. 33
Remoo
Remoo significa remover um N com a chave mxima.
Esse N sempre a raiz e ela esta no ndice 0 do vetor da
Heap, poranto remove-lo fcil.
1. Remova a raiz
2. Mova o ultimo N para raiz
vHeap[0] = vHeap[n-1];
n--;
3.a) 3.b)
Troca
pelo filho
maior
3.c) 3.d)
35
3.e)
36
ERRADO CORRETO
Insero
A insero usa passagem para cima, ao invs de para
baixo. Inicialmente o N a ser inserido colocado na
primeira posio aberta no final do vetor.
vHeap[n] = novo;
n++;
37
a) b)
N a ser
inserido
c) d)
38
e)
39
40
Classe N:
class No {
private int item; espao para
armazenamento da
public No(int v) { informao (chave)
item = v;
} Construtor insere itens
Classe Heap:
Campos Construtor
private No[] vHeap; public Heap(int v) {
private int tam_max; tam_max = v;
private int n; n = 0;
vHeap = new No[tam_max];
}
Mtodos
vazio: retorna verdadeiro se vazio.
cheio: retorna verdadeiro se cheio.
insere: insere itens.
remove: remove itens retornando-os.
MoveAcima e MoveAbaixo: move itens 42
class Heap {
private No[] vHeap;
private int tam_max;
private int n;
public Heap(int v) {
tam_max = v;
n = 0;
vHeap = new No[tam_max];
}
46
VANTAGENS
O que ganhamos ao usar heapsort?
ATIVIDADES FIXAO
Continuao...
49