seminÁrio de algoritmos daniel mascarenhas alheiros ronald josé da silva santiago Árvores e heaps...
TRANSCRIPT
SEMINÁRIO DE SEMINÁRIO DE ALGORITMOSALGORITMOS
Daniel Mascarenhas AlheirosDaniel Mascarenhas Alheiros
Ronald José da Silva SantiagoRonald José da Silva Santiago
“ “ ÁRVORES E HEAPSÁRVORES E HEAPS ““
IntroduçãoIntrodução
• Linearidade de Filas e PilhasLinearidade de Filas e Pilhas• Árvores (definição e Árvores (definição e propriedades)propriedades)• HeapsHeaps• Operações em HeapsOperações em Heaps• ConclusãoConclusão
“ “ ÁRVORES E HEAPS ÁRVORES E HEAPS ““
Comentário sobre Filas e Comentário sobre Filas e PilhasPilhas
São Estruturas Abstratas de São Estruturas Abstratas de dados ou seja, implementam dados ou seja, implementam uma gama de operações pré-uma gama de operações pré-definidas.definidas.
PushPush PopPop
ÁRVORESÁRVORES
““São estruturas de dados onde São estruturas de dados onde existe uma hierarquia, o que exige existe uma hierarquia, o que exige uma maior elaboração estrutural em uma maior elaboração estrutural em relação às listas, filas e pilhas.”relação às listas, filas e pilhas.”
ÁRVORESÁRVORESDEFINIÇÕESDEFINIÇÕES
1. Nó ou 1. Nó ou VérticeVértice
2. Aresta2. Aresta
3. Raiz3. Raiz
4. Folha4. Folha
5. Pai5. Pai
6. Filho6. Filho
7. Descendente7. Descendente
8. Altura8. Altura
9. Grau9. Grau
Exemplo:Exemplo:
Exemplo:Exemplo:
DEFINIÇÕESDEFINIÇÕES
1. Nó ou 1. Nó ou VérticeVértice
2. Aresta2. Aresta
3. Raiz3. Raiz
4. Folha4. Folha
5. Pai5. Pai
6. Filho6. Filho
7. Descendente7. Descendente
8. Altura8. Altura
9. Grau9. Grau
ÁRVORESÁRVORES
Exemplo:Exemplo:
ÁRVORESÁRVORESDEFINIÇÕESDEFINIÇÕES
1. Nó ou 1. Nó ou VérticeVértice
2. Aresta2. Aresta
3. Raiz3. Raiz
4. Folha4. Folha
5. Pai5. Pai
6. Filho6. Filho
7. Descendente7. Descendente
8. Altura8. Altura
9. Grau9. Grau
As árvores não têm As árvores não têm ciclos, isto é, existe ciclos, isto é, existe apenas um único apenas um único caminho entre dois caminho entre dois nós quaisquer nós quaisquer contidos nelas.contidos nelas.
aa
bb
cc
dd
ÁRVORESÁRVORES
ÁRVORESÁRVORESFormas de Representação:Formas de Representação:
1. Implícita: Utiliza arrays (vetores);1. Implícita: Utiliza arrays (vetores);
aa
bb cc
dd ee ff gg
hh ii
aa bb cc dd ee ff gg hh iiA = A =
ÁRVORESÁRVORESFormas de Representação:Formas de Representação:
1. Implícita: Utiliza arrays (vetores);1. Implícita: Utiliza arrays (vetores);
aa bb cc dd ee ff gg hh ii
O primeiro termo do array é a raiz da O primeiro termo do array é a raiz da árvore, o segundo é o seu filho à esquerda e o árvore, o segundo é o seu filho à esquerda e o terceiro, o seu filho à direita, e assim terceiro, o seu filho à direita, e assim sucessivamente. Podemos então perceber uma sucessivamente. Podemos então perceber uma fórmula genérica para encontrar os filhos de um fórmula genérica para encontrar os filhos de um elemento: os filhos de A[i] são A[2i] e A[2i+1].elemento: os filhos de A[i] são A[2i] e A[2i+1].
A = A =
ÁRVORESÁRVORESFormas de Representação:Formas de Representação:
2. Explícita: Utiliza os nós como registros com um 2. Explícita: Utiliza os nós como registros com um campo de dados e dois campos de apontadores.campo de dados e dois campos de apontadores.
AA
BB CC
DD EE FF GG
HH II
dadodadoLL RR
nó=nó=
HEAPSHEAPSSão árvores binárias cujas chaves São árvores binárias cujas chaves
obedecem à seguinte propriedade:obedecem à seguinte propriedade:
“ “ A chave de todo nó é maior ou igual às A chave de todo nó é maior ou igual às chaves dos seus descendentes.chaves dos seus descendentes. ” ”
99
88 66
77 55 33 11
44 22
HEAPSHEAPSTêm grande utilidade na implementação Têm grande utilidade na implementação
de filas de prioridade, que são tipos de filas de prioridade, que são tipos abstratos de dados definidos por duas abstratos de dados definidos por duas operações: Insere(x) e Remove(r), onde r é operações: Insere(x) e Remove(r), onde r é sempre a raiz.sempre a raiz.
99
88 66
77 55 33 11
44 22
HEAPSHEAPSRemoçãoRemoção: :
1. Sempre na raiz, pois é o elemento de 1. Sempre na raiz, pois é o elemento de maior prioridade. E agora, o que fazer com o maior prioridade. E agora, o que fazer com o que resta do heap (dois heaps separados)?que resta do heap (dois heaps separados)?
88 66
77 55 33 11
44 22
??PassoPasso
11
HEAPSHEAPSRemoçãoRemoção: :
2. Neste ponto a raiz recebe o último 2. Neste ponto a raiz recebe o último elemento do que era o antigo heap.elemento do que era o antigo heap.
88 66
77 55 33 11
44
22
PassoPasso22
HEAPSHEAPSRemoçãoRemoção: :
3. Agora deve-se comparar a nova raiz 3. Agora deve-se comparar a nova raiz com seus filhos a fim de que se com seus filhos a fim de que se mantenha a Propriedade de Heap.mantenha a Propriedade de Heap.
88 66
77 55 33 11
44
22
PassoPasso33
HEAPSHEAPSRemoçãoRemoção: :
4. Como o filho à esquerda era o maior dos 4. Como o filho à esquerda era o maior dos filhos analisados (8 e 6) e também era maior filhos analisados (8 e 6) e também era maior que o seu antecessor (2), trocam-se as que o seu antecessor (2), trocam-se as posições.posições.
22 66
77 55 33 11
44
88
PassoPasso44
HEAPSHEAPSRemoçãoRemoção: :
5. Enquanto existirem antecessores 5. Enquanto existirem antecessores menores que os seus descendentes, menores que os seus descendentes, repete-se o Passo 4 (neste exemplo repete-se o Passo 4 (neste exemplo troca-se o 2 pelo 7, e depois o pelo 4).troca-se o 2 pelo 7, e depois o pelo 4).
77 66
44 55 33 11
22
88 PassoPasso44
HEAPSHEAPSRemoçãoRemoção (algoritmo implícito): (algoritmo implícito):
Algoritmo remoção (A, n);Algoritmo remoção (A, n);
EntradaEntrada: : AA um array de tamanho um array de tamanho nn representando um heap; representando um heap;
SaídaSaída:: MaxMax (o elemento máximo do heap); (o elemento máximo do heap);
inícioinício
se n=0 então imprima: “ O heap está vazio “se n=0 então imprima: “ O heap está vazio “
senãosenão
Max:=A[1];Max:=A[1];
A[1]:=A[n];A[1]:=A[n];
n:=n-1; pai:=1; filho:=2;n:=n-1; pai:=1; filho:=2;
enquanto filho <= n-1 façaenquanto filho <= n-1 faça
se A[filho] < A[filho+1] entao filho:=filho+1;se A[filho] < A[filho+1] entao filho:=filho+1;
se A[filho] > A[pai] entao troque A[pai] por A[filho];se A[filho] > A[pai] entao troque A[pai] por A[filho];
pai:=filho; filho:=2*filho;pai:=filho; filho:=2*filho;
senão filho:=n {para o laço}senão filho:=n {para o laço}
fim.fim.
HEAPSHEAPSInserçãoInserção: :
1. É sempre realizada após o último 1. É sempre realizada após o último elemento do heap.elemento do heap.
88
77 66
44 55 33 11
22 99
PassoPasso11
novo elementonovo elemento
HEAPSHEAPSInserçãoInserção: :
2. Verifica-se se o novo elemento está na posição correta, 2. Verifica-se se o novo elemento está na posição correta, isto é, se a árvore continua sendo um heap. Em caso isto é, se a árvore continua sendo um heap. Em caso negativo, troca-se ele pelo seu antecessor imediato (seu negativo, troca-se ele pelo seu antecessor imediato (seu pai).pai).
88
77 66
99 55 33 11
22 44
PassoPasso22
HEAPSHEAPSInserçãoInserção: :
3. Enquanto houver pais menores que 3. Enquanto houver pais menores que os filhos, troca-se as suas posições.os filhos, troca-se as suas posições.
99
88 66
77 55 33 11
22 44
PassoPasso22
HEAPSHEAPSInserçãoInserção (algoritmo implícito): (algoritmo implícito):
Algoritmo Inserção (A, n, x);Algoritmo Inserção (A, n, x);
EntradaEntrada: : AA um array com um array com nn termos (heap), termos (heap), xx um número (chave); um número (chave);
SaídaSaída: : AA (o novo heap), (o novo heap), nn (o novo tamanho do heap); (o novo tamanho do heap);
inícioinício
n:=n+1; {assumimos que não estouramos (n:=n+1; {assumimos que não estouramos (overflowoverflow) o array}) o array}
A[n]:=x; filho:=n;A[n]:=x; filho:=n;
pai:= n div 2; {a variável pai recebe o resultado inteiro da pai:= n div 2; {a variável pai recebe o resultado inteiro da divisão}divisão}
enquanto pai >= 1 façaenquanto pai >= 1 faça
se A[pai] < A[filho] entãose A[pai] < A[filho] então
troque A[pai] e A[filho]troque A[pai] e A[filho]
filho:=pai;filho:=pai;
pai:=pai div 2;pai:=pai div 2;
senão pai:=0; {para parar o laço}senão pai:=0; {para parar o laço}
fim.fim.
ConclusãoConclusão
• Filas e Pilhas (Facilidade X Limitação)Filas e Pilhas (Facilidade X Limitação)• ÁrvoresÁrvores
� Formas Implícita X ExplícitaFormas Implícita X Explícita• HeapsHeaps
� Utilizações X LimitaçõesUtilizações X Limitações
“ “ ÁRVORES E HEAPS “ÁRVORES E HEAPS “
FIMFIM