16_arvore b.pdf

17
1 1 Árvores B Prof. Cláudio Campelo, PhD Departamento de Sistemas & Computação / UFCG Estrutura de Dados e Algoritmos Introdução 2 Rudolf Bayer, Binary B-Trees for Virtual Memory, ACM-SIGFIDET Workshop 1971, San Diego, California, Session 5B, p. 219-235 Motivação Custo alto de acesso a memória secundária A leitura de uma página (nó) é cara em I/O Solução Aumentou o número de chaves em cada nó (página)

Upload: olavo-brito

Post on 12-Apr-2016

278 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 16_Arvore B.pdf

1

1

Árvores B

Prof. Cláudio Campelo, PhD

Departamento de Sistemas & Computação / UFCG

Estrutura de Dados e Algoritmos

Introdução

2

� Rudolf Bayer, Binary B-Trees for Virtual Memory, ACM-SIGFIDET Workshop 1971, San Diego, California, Session 5B, p. 219-235

� Motivação� Custo alto de acesso a memória

secundária� A leitura de uma página (nó) é cara em

I/O

� Solução� Aumentou o número de chaves em cada

nó (página)

Page 2: 16_Arvore B.pdf

2

Ideia

3

Árvore B

4

� Características� Ela é uma árvore balanceada� Todas as folhas estão no último nível� Possui um número máximo de filhos que cada nó pode

ter (ordem)� Nó de uma árvore B são chamados de páginas

(guardam mais de 1 elemento)

Page 3: 16_Arvore B.pdf

3

Árvore B

5

� Propriedades (árvore B de ordem m)� Cada nó tem no máximo m filhos� Cada nó interno (diferente de raiz e de folha) tem no

mínimo m/2 filhos� A raiz tem pelo menos 2 filhos se não for folha.� Todas as folhas estão no mesmo nível e não têm filhos� Um nó interno com k filhos possui k-1 elementos.� Os elementos de cada nó estão ordenados e servem

como separadores dos filhos.

Árvore B

6

� Propriedades (árvore B de ordem m)� Cada nó tem no máximo m filhos� Cada nó interno (diferente de raiz e de folha) tem no

mínimo m/2 filhos� A raiz tem pelo menos 2 filhos se não for folha.� Todas as folhas estão no mesmo nível e nao tem filhos� Um nó interno com k filhos possui k-1 elementos.� Os elementos de cada nó estão ordenados e servem

como separadores dos filhos.

Page 4: 16_Arvore B.pdf

4

Exemplo (ordem 3)

7

Nó com mais de uma chave,

ordenada

balanceada

5 10

3 4 6 8 11 13 14

12

17

15

raiz

Estrutura de um nó

8

public class BNode<T extends Comparable<T>> {

}}

Page 5: 16_Arvore B.pdf

5

Estrutura de um nó

9

public class BNode<T extends Comparable<T>> {

LinkedList<T> elements;LinkedList<BNode<T>> children;BNode<T> parent;int maxKeys;int maxChildren;

public BNode(int order){this.maxChildren = order;this.maxKeys = order - 1;this.elements = new LinkedList<T>();this.children = new LinkedList<BNode<T>>();

}}

Estrutura de um nó

10

public class BNode<T extends Comparable<T>> {public boolean equals(Object obj) {boolean resp = false;

return resp;}

Page 6: 16_Arvore B.pdf

6

Estrutura de um nó

11

public class BNode<T extends Comparable<T>> {public boolean equals(Object obj) {boolean resp = false;if(obj != null){

if(obj instanceof BNode){if(this.size() == ((BNode<T>)obj).size()){resp = true;int i = 0;while(i<this.size() && resp){

resp = resp && this.getElementAt(i).equals(((BNode<T>) obj).getElementAt(i));

i++;}

}}

}return resp;

}

Interface da árvore B

12

public interface BTree<T extends Comparable<T>> {

BNode<T> getRoot();boolean isEmpty();int height();BNodePosition<T> search(T element);void insert(T element);BNode<T> maximum(BNode<T> node);BNode<T> minimum(BNode<T> node);void remove(T element);int size();

}

Page 7: 16_Arvore B.pdf

7

Interface da árvore B

13

public interface BTree<T extends Comparable<T>> {

BNode<T> getRoot();boolean isEmpty();int height();BNodePosition<T> search(T element);void insert(T element);BNode<T> maximum(BNode<T> node);BNode<T> minimum(BNode<T> node);void remove(T element);int size();

}

O retorno é o nó contendo o elemento e a posição do

elemento nele (BNode, Position)

Pesquisa

14

public class BNodePosition<T extends Comparable<T>> {

BNode<T> node;int position;

public BNodePosition(BNode<T> node, int position) {this.node = node;this.position = position;

}

public BNodePosition() {}

}

Page 8: 16_Arvore B.pdf

8

Pesquisa

15

� A ideia é similar à pesquisa em BST� Diferença

� Um nó pode ter mais de uma chave� Dentro do nó fazemos uma pesquisa linear

� Procura se o elemento está no nó� Se não estiver, então procura na sub-árvore cujos

separadores são x1 e x2 tal que x1 < valor procurado < x2.� Podem acontecer variações:

� valor procurado < x1: valor procurado é menor que o menor elemento

� x2 < valor procurado: valor procurado é maior que maior elemento procurado

� O retorno é o nó contendo o elemento e a posição do elemento nele (BNode, Position)

Pesquisa (exemplo)

16

� Pesquisa do nó 8

5 10

3 4 6 8 11 13 14

12

17

15

raiz

Page 9: 16_Arvore B.pdf

9

Pesquisa (exemplo)

17

� Pesquise pelas chaves 14, 7, 17

5 10

3 4 6 8 11 13 14

12

17

15

Pesquisa

18

B-TREE-SEARCH(BNode x, K k)i ← 1while i ≤ x.size and k > x.keys[i]

i ← i + 1if i ≤ x.size and k = x.keys[i]

return (x, i)if x.leaf

return (null,null)return B-TREE-SEARCH(x.children[i], k)

Obs: assumir que indexação das listas é do tipo 1..n

Page 10: 16_Arvore B.pdf

10

Inserções

19

� Acontecem sempre nas folhas

� Algoritmo localiza a folha conveniente para fazer a inserção

� Se o nó folha não está cheio então o elemento será inserido nele em ordem

� Se o nó folha está cheio

� Faça o split (divisão) do nó. Um elemento vai subir.� Faça o promote (promoção) do elemento a subir na

árvore� Se o pai estiver cheio faz o split e promote no pai

Inserções

20

� Split� Escolha o elemento médio (mediana de separação) dos

elementos do nó (já considerando o novo elemento inserido)

� Valores menores que a mediana são colocados em um novo nó folha (esquerdo) e valores maiores são colocados em um outro novo nó folha (direito)

� A mediana é inserida como novo elemento do pai (isso pode causar um split no pai)

� Filhos da mediana contêm os demais elementos do antigo nó;

� Um split na raiz origina uma nova raiz.

Page 11: 16_Arvore B.pdf

11

Inserções (exemplo | m=3)

21

De 1 a 2 elementos.

Inserções (exemplo | m=4)

22

De 2 a 3 elementos.

Page 12: 16_Arvore B.pdf

12

Inserções (exemplo | m=4)

23

De 2 a 3 elementos.

Remoções

24

� É análoga à inserção, porém com alguns complicadores, visto que uma chave pode ser removida de qualquer nó.

� Assim como na inserção, precisamos garantir que, ao removermos a chave as propriedades da árvore-B não sejam violadas.

� Duas operações podem ser necessárias:� Concatenação;� Redistribuição.

Page 13: 16_Arvore B.pdf

13

Remoções

25

� Pontos a se considerar:� O elemento removido em um nó interno pode ser

separador de seus nós filhos. � Deletar um elemento pode deixar o nó com número de

elementos e filhos menor que o mínimo exigido.

� 2 Casos:� O elemento pertence a uma folha;� O elemento pertence a um nó interno;

Remoções (Nó Interno)

26

� Chave x não está em uma folha: � x é substituída por y:

� a menor chave em uma folha tal que y é maior que x (sucessor); ou

� a maior chave em uma folha tal que y é menor que x (predecessor);

Portanto, é suficiente fazer análise da remoção em uma folha!

(de qualquer forma, veremos ilustrações de remoções de nós internos)

Page 14: 16_Arvore B.pdf

14

Remoções (Elemento em uma folha)

27

� Remove o elemento do nó folha.� Se acontece underflow, verifique os irmãos e

transfira uma chave ou então faça a fusão do nócom um irmão.� Se a deleção acontece no filho da direita transfira o valor

máximo do filho da esquerda para o pai se nãoacontecer underflow no filho da esquerda (depois desça a penúltima chave do pai para o filho).

� O caso simétrico é análogo (com filho à esquerda);

� Se não for possível usar elementos de algum irmãoentão faça junção de irmãos usando valores do pai

Remoções (Elemento em uma folha)

28

� Não acontece underflow (ordem 5)

>>>>> Buscando 50 >>>>

50 removido!>>>>> Buscando 50 >>>>

De 2 a 4 elementos.

Page 15: 16_Arvore B.pdf

15

Remoções (Elemento em uma folha)

29

� Acontece underflow

>>>>>>>>> Redistribuição >>>>>>>>>

>>>>> Buscando 29 >>>>

29 removido!

Ordem 5 → De 2 a 4 elementos.

Remoções (Elemento em uma folha)

30

� Acontece underflow

Concatenação

>>>>>> Redistribuição >>>>>>

>>>>>>>>>>>> Buscando 22 >>>>>>>>>>>>

22 removido! >>>>>>> Buscando 47 >>>>>>

47 removido!

Ordem 5 → De 2 a 4 elementos.(nós internos)

Page 16: 16_Arvore B.pdf

16

Remoções (Elemento em uma folha)

31

� Acontece underflow

Concatenação

>>>>>>>>> Buscando 74 >>>>>>>>> 74 removido!

Ordem 5 → De 2 a 4 elementos.(nós internos)

Remoções (Elemento em um nó interno)

32

� Escolhe um novo separador (sucessor/predecessor – em uma folha)

� Ajusta o nó que teve o elemento removido, como visto anteriormente.

>>>> Substituído pelo sucessor (20) >>>>

>>> Removendo o 15 >>>

Ordem 5 → De 2 a 4 elementos.

>>> Concatenando >>>

Page 17: 16_Arvore B.pdf

17

Remoções (Elemento em um nó interno)

33

� Escolhe um novo separador (sucessor/predecessor – em uma folha)

� Ajusta o nó que teve o elemento removido, como visto anteriormente.

>>> Concatenando novamente >>>

Ordem 5 → De 2 a 4 elementos.

Referências

34

� Capítulo 19� 1a edição