Arvores

45
1 Estrutura de Dados I Árvores Prof. Eder Stone Fontoura Adaptação dos slides da Profa. Cristina Nunes

Transcript of Arvores

Page 1: Arvores

1

Estrutura de Dados I

Árvores

Prof. Eder Stone FontouraAdaptação dos slides da Profa. Cristina Nunes

Page 2: Arvores

2

Árvores São estruturas de dados que caracterizam uma relação de hierarquia

entre os dados um conjunto de dados é hierarquicamente subordinado a outro.

Diferente das listas, não são estruturas de dados lineares. Podem representar: sistemas de arquivos, interfaces gráficas com o usuário

(organização dos menus), organização das páginas de um site, organização hierárquica de cargos ou setores de um empresa, etc. Exemplo:

Presidente

DiretoriaFinanceira

Diretoria deMarketing

Diretoria De Vendas

Page 3: Arvores

3

Definição

A B

C

D

F

E

Normalmente é um conjunto finito T de um ou mais nodos tal que: existe um nodo denominado raiz da árvore; os demais nodos formam m ≥ 0 subconjuntos disjuntos t1, t2, ..., tm, onde cada um

desses subconjuntos é uma árvore. as árvores ti (1 ≤ i ≤ M) recebem a denominação de sub-árvore.

D = RaizC e E = sub-árvores

t1 t2

Page 4: Arvores

4

Definição Um mesmo nodo não aparece em mais de uma sub-árvore ao mesmo

tempo nunca teremos sub-árvores interligadas.

A

D

B C Não é árvore!!!

Page 5: Arvores

5

Definição Se X é um nó que antecede um nó Y, X é pai de Y ou Y é filho de X.

Nodos que possuem um mesmo pai são ditos irmãos A raiz é o único nodo que não possui pai

Raiz

G é pai de H

H é filho de G

A e B são irmãos

Page 6: Arvores

6

Terminologia Floresta: Se retirarmos o nodo raiz de uma árvore que contém sub-

árvores estaremos criando uma floresta. Os filhos da raiz original serãoas raizes das novas árvores.

A B

C

D

F

E

H

G

A B

C

F

E

H

G

Floresta

Page 7: Arvores

7

Terminologia Nó externo ou folha: nodos que não possuem filhos.

Nó interno ou galho: nodos que não são folhas e nem raiz.

A B

C

D

F

E

A B

C

D

F

E

Page 8: Arvores

8

Terminologia Grau de um Nodo: número de sub-árvores de um nodo.

Nível de um Nodo: número de linhas que liga o nó à raiz. Onível do nodo raiz é 0.

Grau = 1Grau = 2

Nível = 1 Nível = 1

Nível = 0

Nível = 2 Nível = 2 Nível = 2

A B

C

D

F

E

A B

C

D

F

E

Page 9: Arvores

9

Terminologia Altura da árvore: nível mais alto da árvore.

Árvore ordenada: quando existe uma ordem linear definida para os filhos de uma árvore.

Altura = 2

A B

C

D

F

E

Page 10: Arvores

10

Formas de Representação Por adjacência (ou contiguidade)

Armazenamento da árvore em um vetor. Cada posição por vetor pode, por exemplo, conter, além da

informação do nodo, referências aos nodos filhos.

Representação:

Ou guardar apenas a informação e o grau no nodo:

Índice onde está o nodo

Page 11: Arvores

11

Formas de Representação Registro fixo

Se o grau da árvore for baixo e/ou a variabilidade do grau entre os nodosfor pouca.

Problema: No caso de árvores “genéricas”, em que cada nodo pode ter uma quantidade de

sub-árvores diferentes, é necessário limitar o número máximo de sub-árvores que cada nodo deve conter.

Nodos de uma mesma árvore são todos do mesmo tipo.

A

B nulo C D

E F G H I

J

nulo nulo

nulo

nulonulonulo nulo nulonulo nulo nulo nulo nulo nulo nulo nulonulo

nulonulo nulo

Page 12: Arvores

12

Árvores Binárias Estruturas do tipo árvore, onde o grau de cada nodo é sempre

menor ou igual a 2. Caso especial de árvore em que nenhum nodo tem mais que

dois filhos. Existe um senso de posição: distingue-se entre uma sub-árvore

esquerda e uma sub-árvore direita.

A C

B

D

F

E

sub-árvore da esquerda sub-árvore da direita

Não é árvore binária

Page 13: Arvores

13

Propriedades O número máximo de nodos no K-ésimo nível de uma árvore

binária é 2k. Ex.: no nível 2 podemos ter no máximo 22 = 4 nodos.

O número máximo de nodos em uma árvore binária com altura K é 2K+1 - 1, para K ≥ 0.

Árvore completa: árvore de altura K com 2K+1 - 1 nodos.

A C

B

D

E G

F

Altura = 2Nodos = 7

Page 14: Arvores

14

Árvores Genéricas -> Árvores Binárias A transformação de uma árvore binária produz uma alteração

na estrutura física da mesma, o que pode provocar uma interpretação errônea da relação hierárquica existente na árvore original.

Para se interpretar corretamente a hierarquia de uma árvoretransformada em árvore binária, deve-se ter em mente atransformação havida. Assim, a sub-árvore da esquerda de umnó é o filho deste nó, enquanto que a sub-árvore da direita é oseu irmão.

A transformação de uma árvore em árvore binária oferece avantagem de não requerer conhecimento prévio da mesma,para fins de alocação encadeada. A desvantagem em relação àprimeira alternativa reside no fato de não se ter acesso diretode um nó pai para qualquer um dos filhos, já que para acessar oi-ésimo filho é necessário acessar os (i - 1) anteriores.

Page 15: Arvores

15

Árvores Genéricas -> Árvores Binárias Transformar uma árvore genérica em binária:

Etapa1: Conecta-se os nodos irmãos; Etapa2: Desconecta-se o nodo pai dos nodos filhos, exceto do 1º filho.

Page 16: Arvores

16

Árvores Genéricas -> Árvores Binárias

Redesenhando

Page 17: Arvores

17

Representação Nodos de uma árvore binária terão (no mínimo):

Informação referência para o nodo da esquerda referência para nodo da direita.

typedef struct nodo{ char info;nodo * esquerda;nodo * direita;

}nodo;

A

B

C

E D

GF

Page 18: Arvores

18

Ávore de busca binária (Árvore Ordenada) Uma árvore binária, cuja raiz armazena o elemento R, é

denominada árvore de busca binária se: todo elemento armazenado na sub-árvore esquerda é menor que R; todo elemento armazenado na sub-árvore direita é maior que R; as sub-árvores esquerda e direita também são árvores de busca

binária

A C

B

D

E G

F

Page 19: Arvores

19

Operações Básicas Criar a árvore Inserir nodos na árvore Pesquisar nodos na árvore Excluir nodos da árvore Determinar a altura da árvore Determinar o nível de um nodo Caminhar em uma árvore

Page 20: Arvores

20

Inserção Novos nodos inseridos entram sempre na condição de folhas

um nodo não pode entrar numa árvore e já “assumir” filhos. Para inserir um elemento C

Começamos pelo nodo raiz. Como C é menor que E, tomamos a sub-árvore da esquerda. Comparando com a nova raiz temos C > B e conclui-se que o elemento

deve ser armazenado na sub-árvore direita. O processo se repete até chegarmos a uma sub-árvore nula. Nesse momento, uma folha é alocada para armazenar o novo elemento e

entra como raiz da sub-árvore nula.

E

B F

A D G

C

E

B F

A D G

C

Inserindo C

Page 21: Arvores

21

Pesquisa Dado um elemento X a ser procurado entre os nodos da árvore, temos

quatro possibilidades a considerar: É uma árvore nula, portanto não há nada a fazer; A raiz armazena o elemento X; O valor de X é menor que aquele armazenado na raiz: deve-se prosseguir

com a busca na sub-árvore esquerda; O valor de X é maior ou igual que aquele armazenado na raiz: deve-se

prosseguir com a busca na sub-árvore direita.

Page 22: Arvores

22

Exercícios Implementar um programa para criar

árvores binárias de busca. Desenvolver as seguintes funções: Adicionar elementos Apresentar a informação de todos os

elementos O nó com a informação “x” encontra-se na

árvore? Nível do nó com a informação “x” “x” é um nó externo ou interno?

Page 23: Arvores

23

Caminhamentos Forma de percorrer a árvore.

Visitar cada nodo apenas uma vez. Tipos

Pré-fixado (ou pré-ordem) Central (ou em-ordem) Pós-fixado (ou pós-ordem)

Page 24: Arvores

24

Caminhamento Pré-fixado Passos:

Primeiro: Visita Raiz Segundo: Percorre sub-árvore da esquerda Terceiro: Percorre sub-árvore da direita

Ordem de visita nos nodos: 1, 2, 4, 5, 3, 6 e 7

Page 25: Arvores

25

Caminhamento Central Passos:

Primeiro: Percorre sub-árvore da esquerda Segundo: Visita Raiz Terceiro: Percorre sub-árvore da direita

Ordem de visita nos nodos: 4, 2, 5, 1, 6, 3 e 7.

Page 26: Arvores

26

Caminhamento Pós-ordem Passos

Primeiro: Percorre sub-árvore da esquerda Segundo: Percorre sub-árvore da direita Terceiro: Visita Raiz

Ordem de visita nos nodos: 4, 5, 2, 6, 7, 3 e 1

Page 27: Arvores

27

PRÉ: - * + a b c / d - e fCENTRAL: (expressão original) a + b * c - d / e - fPÓS: (notação polonesa) a b + c * d e f - / -

B

-

* /

+ C D -

A E F

Exemplo

Page 28: Arvores

28

Alternativas de Árvores Binárias Aspecto fundamental do estudo de árvores de busca:

o custo de acesso a uma informação desejada. Alternativas:

Árvore balanceada Árvore-B

Page 29: Arvores

29

Árvore Balanceada Idéia: manter os ramos da árvore sempre "no mesmo nível".

custo para manipular uma informação na árvore se mantém semelhante tanto para os ramos à esquerda quanto para os ramos à direita.

As suas sub-árvores à esquerda e à direita possuem a mesma altura.

Quando uma árvore cresce muito para um dos lados ela é dita degenerada (ou desbalanceada).

Árvore balanceada Árvore degenerada

Page 30: Arvores

30

Árvore Balanceada O processo de balanceamento pode se tornar muito pesado

quando a árvore contém muitos nós e várias inserções são feitas. Em 1962, dois matemáticos russos (Adelson Velskii e Landis)

introduziram um conceito menos rigoroso de árvores balanceadas. Uma árvore é considerada balanceada quando, para cada nó n, as

alturas das sub-árvores à esquerda e à direita diferem no máximo de 1.

A esta diferença chamamos de "fator de balanceamento de n” (FatBal(n)).

Este algoritmo é conhecido como árvore AVL.

Page 31: Arvores

31

Árvore Balanceada Características

Diferença da altura da sub-árvore esquerda e direita é no máximo 1 Se um nodo raiz não satisfaz a condição de altura, então ele é

considerado desbalanceado. Exemplo

Árvore AVL Árvore desbalanceada

Altura(100) = Altura(SD) – Altura(SE) Altura(100) = 2 – 1 = 1

Altura(150) = Altura(SD) – Altura(SE) Altura(150) = 2 – 0 = 2

Page 32: Arvores

32

Árvore Balanceada Balanceamento

Processo que busca a distribuição equilibrada dos nodos de modo a otimizar a operação de consulta, isto é, minimizar o número médio de comparações necessárias para localizar uma chave.

É desejável que as chaves mais solicitadas estejam próximas à raiz.

Uma árvore é completamente balanceada se a distância média dos nodos até a raiz for mínima.

Page 33: Arvores

33

Árvore-B São árvores balanceadas projetadas para trabalhar com

dispositivos de armazenamento secundário como discos magnéticos por exemplo.

Visam otimizar as operações de entrada e saída nos dispositivos. O tempo de acesso às informações em um disco é prejudicado

principalmente pelo tempo de posicionamento do braço de leitura. Uma vez que o braço esteja posicionado no local correto, a leitura

pode ser feita de forma bastante rápida. Diferente das árvores binárias, cada nó em uma árvore B pode

ter muitos filhos o grau de um nó pode ser muito grande.

Page 34: Arvores

34

Árvore-B Definição

Uma árvore B de ordem d é uma árvore com as seguintescaracterísticas: A raiz tem no mínimo uma chave e dois filhos; Uma folha tem no mínimo d chaves e não tem filhos; Todos os outros nós têm no mínimo d chaves e d+1 filhos; Todos os nós têm, no máximo, 2d chaves e 2d+1 filhos.

A ordem d indica a quantidade máxima e mínima de chavesdentro dos nodos.

Page 35: Arvores

35

Árvore-B Estrutura

Os nodos são compostos por chaves, ponteiros e informações. Para cada chave está associada somente uma informação. Pode-se ter informações adicionais que facilitam a manipulação

dos nodos Ex.: um campo para guardar o endereço do nodo pai e o número de

chaves ativas dentro dos nodos Existe um ponteiro externo que aponta para raiz, indicando o início

da árvore.

Page 36: Arvores

36

Árvore-B Exemplo

Árvore B de ordem 2 (d = 2) O nodo raiz pode conter no mínimo 1 chave e 2 apontadores e no

máximo 4 chaves com 5 apontadores. Os nodos internos poderão conter no mínimo 2 chaves com 3

apontadores e no máximo 4 chaves com 5 apontadores.

Page 37: Arvores

37

Árvore-B Principais Vantagens:

A utilização de memória é de no mínimo 50%. As operações realizadas sobre a árvore-B tem como conseqüência

uma ordenação natural das chaves. Ótima para operações do tipo:

recuperar um determinado número de registros a partir de uma chave ou encontrar sucessores e predecessores

Page 38: Arvores

38

Árvore-B As árvores-B diminuem e aumentam de uma única forma:

através da divisão de um nodo em dois irmãos ou através da união de dois irmãos em um único nodo.

O aumento ou diminuição da árvore são processos que sempre iniciam nos nodos folha e podem propagar-se até a raiz.

Operações: Pesquisa:

Análoga ao percurso em árvores binárias de busca. Numa pesquisa binária, os ramos da árvore tomados para um nodo

dependem da comparação entre a chave pesquisada e a chave armazenada no nodo.

Se a chave pesquisada é menor é tomado o braço esquerdo, se for maior o direito.

Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreebusca.htm

Page 39: Arvores

39

Árvore-B Inserção:

É feita uma pesquisa até a folha apropriada para ser feita a inserção. Existem 3 possibilidades:

se existir espaço na folha, o dado é simplesmente inserido; se não houver espaço no nodo, verifica-se no irmão adjacente se há

espaço. Se houver, toma-se a chave mais a direita do nodo a inserir e promove a "chave pai". A "chave pai" anterior é inserida no irmão adjacente. Desta forma, abre-se um espaço no nodo em que a chave deve ser inserida;

se não houver espaço no irmão adjacente, deve ocorrer a cisão do nodo em que a chave deve ser inserida . Neste caso, total de chaves em um nodo é dividido d, ficando assim as d menores chaves em um nodo e as dmaiores chaves em outro. A chave mais à esquerda das d maiores chaves é promovida a "chave pai" (é inserida no nodo pai) dos nodos criados na cisão. Deste modo é criado um espaço nas folhas para ocorrer a inserção. Se o nodo pai está cheio, o mesmo processo é aplicado para ele, e assim consecutivamente

Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreeinsercao.htm

Page 40: Arvores

40

G M P X

A C D E

J K

N O

R S T U

Y Z

V

A

Inclusão da Chave B

G M P X

C D E

J K

N O

R S T U

Y Z

V

ECB D

Page 41: Arvores

41

N W

Chavei–1[x]Chavei[x]

Chavei+1[x]..... .....

Inclusão da Chave O

W

T U V

N W

Chavei–1[x] Chavei[x]

P Q R S T U V

..... .....

P Q R T U VS

S

RQPO

N = 7

N = 4 N = 3

Page 42: Arvores

42

A D F H L N P

A1 A2 A3 A4 A5 A6 A7 A8

H

L N PA D F L N PH

A1 A2 A3 A4 A5 A6 A7 A8 A1 A2 A3 A4

Inclusão da Chave E

FE

A5

N = 7

N = 3N = 4

N = 1

Page 43: Arvores

43

Árvore-B Exclusão:

Pesquisa para localizar o nodo correto; Existem 2 possibilidades:

a chave a ser excluída está em um nodo folha simplesmente excluída;

a chave a ser excluída não está em um nodo folha uma chave adjacente é procurada e transferida para o local onde encontra-

se a chave a ser excluída. esta chave pode ser a primeira chave da folha mais à esquerda da sub-

árvore à direita ou a última chave da folha mais à direita da sub-árvore à esquerda.

a chave substituta é retirada de uma folha, o que nos leva a uma retirada em folha.

Page 44: Arvores

44

Árvore-B Verificar se a retirada "quebrou" a definição de árvore B:

caso a folha, após a retirada, tenha ficado com menos de d chaves: verificamos a ordem dos irmãos adjacentes.

se existir um irmão adjacente com mais de d chaves: é feita uma redistribuição. A chave mais a esquerda do irmão adjacente é promovida a "chave pai" e a

"chave pai" anterior é inserida no nodo em que a chave foi retirada(semelhante a inserção).

Se o irmão adjacente tem d chaves é feita uma concatenação. Juntar em um único nó as chaves dos irmãos adjacentes mais a "chave

pai", eliminado um nodo folha e uma chave (a "chave pai") do nodo pai. Dependendo do número de chaves do nodo pai, pode resultar em uma

nova redistribuição ou em uma nova concatenação.

Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreeremocao.htm

Page 45: Arvores

45

Árvore-B

50 70

25 30 55 60 80

Remover 80

50 70

25 30 55 60 8070

60