Carregar apresentação
A apresentação está carregando. Por favor, espere
1
SEMINÁRIO DE ALGORITMOS
“ ÁRVORES E HEAPS “ Daniel Mascarenhas Alheiros Ronald José da Silva Santiago
2
“ ÁRVORES E HEAPS “ Introdução Linearidade de Filas e Pilhas
Árvores (definição e propriedades) Heaps Operações em Heaps Conclusão
3
Comentário sobre Filas e Pilhas
São Estruturas Abstratas de dados ou seja, implementam uma gama de operações pré-definidas. Push Pop
4
ÁRVORES “São estruturas de dados onde existe uma hierarquia, o que exige uma maior elaboração estrutural em relação às listas, filas e pilhas.”
5
ÁRVORES DEFINIÇÕES 1. Nó ou Vértice 2. Aresta Exemplo: 3. Raiz
4. Folha 5. Pai 6. Filho 7. Descendente 8. Altura 9. Grau Exemplo:
6
ÁRVORES DEFINIÇÕES 1. Nó ou Vértice 2. Aresta Exemplo: 3. Raiz
4. Folha 5. Pai 6. Filho 7. Descendente 8. Altura 9. Grau Exemplo:
7
ÁRVORES DEFINIÇÕES 1. Nó ou Vértice 2. Aresta Exemplo: 3. Raiz
4. Folha 5. Pai 6. Filho 7. Descendente 8. Altura 9. Grau Exemplo:
8
ÁRVORES As árvores não têm ciclos, isto é, existe apenas um único caminho entre dois nós quaisquer contidos nelas. a b c d
9
ÁRVORES Formas de Representação:
1. Implícita: Utiliza arrays (vetores); a b c g d e f h i a b c d e f g h i A =
10
ÁRVORES Formas de Representação:
1. Implícita: Utiliza arrays (vetores); A = a b c d e f g h i O primeiro termo do array é a raiz da árvore, o segundo é o seu filho à esquerda e o terceiro, o seu filho à direita, e assim sucessivamente. Podemos então perceber uma fórmula genérica para encontrar os filhos de um elemento: os filhos de A[i] são A[2i] e A[2i+1].
11
ÁRVORES dado L R nó= Formas de Representação:
2. Explícita: Utiliza os nós como registros com um campo de dados e dois campos de apontadores. A dado B C nó= L R D E F G H I
12
HEAPS São árvores binárias cujas chaves obedecem à seguinte propriedade: “ A chave de todo nó é maior ou igual às chaves dos seus descendentes. ” 9 8 6 7 5 3 1 4 2
13
HEAPS Têm grande utilidade na implementação de filas de prioridade, que são tipos abstratos de dados definidos por duas operações: Insere(x) e Remove(r), onde r é sempre a raiz. 9 8 6 7 5 3 1 4 2
14
HEAPS Remoção: 1. Sempre na raiz, pois é o elemento de maior prioridade. E agora, o que fazer com o que resta do heap (dois heaps separados)? ? Passo 1 8 6 7 5 3 1 4 2
15
HEAPS Remoção: 2. Neste ponto a raiz recebe o último elemento do que era o antigo heap. 2 Passo 2 8 6 7 5 3 1 4
16
HEAPS Remoção: 3. Agora deve-se comparar a nova raiz com seus filhos a fim de que se mantenha a Propriedade de Heap. 2 Passo 3 8 6 7 5 3 1 4
17
HEAPS Remoção: 4. Como o filho à esquerda era o maior dos filhos analisados (8 e 6) e também era maior que o seu antecessor (2), trocam-se as posições. 8 Passo 4 2 6 7 5 3 1 4
18
HEAPS Remoção: 5. Enquanto existirem antecessores menores que os seus descendentes, repete-se o Passo 4 (neste exemplo troca-se o 2 pelo 7, e depois o pelo 4). 8 Passo 4 7 6 4 5 3 1 2
19
HEAPS Remoção (algoritmo implícito): Algoritmo remoção (A, n);
Entrada: A um array de tamanho n representando um heap; Saída: Max (o elemento máximo do heap); início se n=0 então imprima: “ O heap está vazio “ senão Max:=A[1]; A[1]:=A[n]; n:=n-1; pai:=1; filho:=2; enquanto filho <= n-1 faça se A[filho] < A[filho+1] entao filho:=filho+1; se A[filho] > A[pai] entao troque A[pai] por A[filho]; pai:=filho; filho:=2*filho; senão filho:=n {para o laço} fim.
20
HEAPS Inserção: 1. É sempre realizada após o último elemento do heap.
8 Passo 1 7 6 4 5 3 1 novo elemento 2 9
21
HEAPS Inserção: 2. Verifica-se se o novo elemento está na posição correta, isto é, se a árvore continua sendo um heap. Em caso negativo, troca-se ele pelo seu antecessor imediato (seu pai). 8 Passo 2 7 6 9 5 3 1 2 4
22
HEAPS Inserção: 3. Enquanto houver pais menores que os filhos, troca-se as suas posições. 9 Passo 2 8 6 7 5 3 1 2 4
23
HEAPS Inserção (algoritmo implícito): Algoritmo Inserção (A, n, x);
Entrada: A um array com n termos (heap), x um número (chave); Saída: A (o novo heap), n (o novo tamanho do heap); início n:=n+1; {assumimos que não estouramos (overflow) o array} A[n]:=x; filho:=n; pai:= n div 2; {a variável pai recebe o resultado inteiro da divisão} enquanto pai >= 1 faça se A[pai] < A[filho] então troque A[pai] e A[filho] filho:=pai; pai:=pai div 2; senão pai:=0; {para parar o laço} fim.
24
“ ÁRVORES E HEAPS “ Conclusão Filas e Pilhas (Facilidade X Limitação)
Formas Implícita X Explícita Heaps Utilizações X Limitações
25
FIM
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.