Arvores
-
Upload
darosajoseluiz -
Category
Documents
-
view
4.404 -
download
9
Transcript of Arvores
1
Estrutura de Dados I
Árvores
Prof. Eder Stone FontouraAdaptação dos slides da Profa. Cristina Nunes
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
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
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!!!
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
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
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
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
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
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
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
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
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
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.
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.
16
Árvores Genéricas -> Árvores Binárias
Redesenhando
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
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
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
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
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.
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?
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)
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
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.
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
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
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
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
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.
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
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.
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.
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.
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.
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.
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
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
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
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
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
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
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.
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
45
Árvore-B
50 70
25 30 55 60 80
Remover 80
50 70
25 30 55 60 8070
60