25
SEMINÁRIO DE SEMINÁRIO DE ALGORITMOS ALGORITMOS Daniel Mascarenhas Daniel Mascarenhas Alheiros Alheiros Ronald José da Silva Ronald José da Silva Santiago Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

Embed Size (px)

Citation preview

Page 1: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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 ““

Page 2: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald 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 ““

Page 3: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago Á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

Page 4: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

Á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.”

Page 5: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

Á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:

Page 6: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 7: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 8: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 9: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

Á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 =

Page 10: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

Á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 =

Page 11: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

Á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ó=

Page 12: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 13: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 14: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 15: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 16: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 17: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 18: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 19: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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.

Page 20: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 21: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 22: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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

Page 23: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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.

Page 24: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

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 “

Page 25: SEMINÁRIO DE ALGORITMOS Daniel Mascarenhas Alheiros Ronald José da Silva Santiago ÁRVORES E HEAPS ÁRVORES E HEAPS

FIMFIM