algorítmos e estrutura de dados iii

54
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação

Upload: arthur-faulkner

Post on 04-Jan-2016

31 views

Category:

Documents


1 download

DESCRIPTION

Algorítmos e estrutura de dados III. Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação. Árvores 2-3 Árvores B (B-Trees) Árvores B+. Árvores de busca com grau maior que 2. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Algorítmos e estrutura de dados III

Algorítmos e estrutura de dados III

Carlos Oberdan Rolim

Ciência da Computação

Sistemas de Informação

Page 2: Algorítmos e estrutura de dados III

Árvores 2-3

Árvores B (B-Trees)

Árvores B+

Page 3: Algorítmos e estrutura de dados III

Árvores de busca com grau maior que 2

Vimos que árvores de busca quando balanceadas, como as árvores AVL, permitem busca em tempo logarítmico.

No caso das árvores AVL, a busca se dá em tempo log2 (n) no pior caso.

Poderíamos tentar melhorar procurando fazer a busca em tempo logk (n), com k > 2.

Page 4: Algorítmos e estrutura de dados III

Árvores 2-3

Similar às árvores AVL, mas - Cada nó interno tem dois ou três filhos e - Todos os nós externos têm a mesma profundidade.

A

C

F

K M

H L O

G

P

T

R X

Q S V Z

Page 5: Algorítmos e estrutura de dados III

Inserção em árvores 2-3

Como nas árvores AVL, a inserção se dá numa folha. Se há espaço para acrescentar o novo elemento, ele entra aí.

Ex: Inserção do elemento G na árvore abaixo.

E

L P

I

T

V X

U W ZG

Page 6: Algorítmos e estrutura de dados III

Inserção em árvores 2-3

Se não há espaço para acrescentar o novo elemento, gera-se dois nós com os dois elementos extremos no nó, e promove-se o elemento central, para ser incluído no nível imediatamente superior.

E

L P

I

T

V X

U W ZGN

Page 7: Algorítmos e estrutura de dados III

Inserção em árvores 2-3

I N

T

V X

U W Z

Ex: Inserção do elemento N na árvore abaixo.

Como um nó não pode ter três elementos, são criados dois nós com um elemento cada, e o elemento do meio é promovido.

LE G P

Page 8: Algorítmos e estrutura de dados III

Inserção em árvores 2-3

Se não há espaço para acrescentar o nó promovido, procede-se da mesma forma que no overflow anterior, até eventualmente achar espaço suficiente ou chegar até a raiz.

I N

T

V X

U W Z

Ex: Inserção do elemento C na árvore abaixo.

LE G PC

Page 9: Algorítmos e estrutura de dados III

Inserção em árvores 2-3

Se não há espaço para acrescentar o nó promovido, procede-se da mesma forma que no overflow anterior, até eventualmente achar espaço suficiente ou chegar até a raiz.

N

T

V X

U W Z

Ex: Inserção do elemento C leva à promoção do elemento E.

LC P

E

G

I

Page 10: Algorítmos e estrutura de dados III

Inserção em árvores 2-3

I T

V X

U W Z

Ex: Inserção do elemento C leva à promoção do elemento E que por sua vez leva à promoção do elemento I.

C

E

G

N

L P

Page 11: Algorítmos e estrutura de dados III

Árvores B ou B-Tree

Note que a diferença crucial em termos de tempo de acesso entre a árvores binárias e as árvores 2-3 é que agora o acesso pode ser feito em tempo logarítmico, mas com base 3, o que é mais rápido.

Podemos pensar então numa forma de diminuir mais ainda o tempo de acesso, aumentando o número de elementos em cada nó.

Page 12: Algorítmos e estrutura de dados III

Árvores B

Árvores B são uma extensão da noção de árvores 2-3, onde cada nó que não é a raiz pode ter entre m e 2m chaves.

Esta estrutura normalmente é usada em memória externa.

Deve haver um compromisso entre o maior número de elementos por nó e a capacidade de acesso em disco, além de uma técnica de busca dentro do nó.

Page 13: Algorítmos e estrutura de dados III

Árvores B

É um tipo de árvore muito utilizada em banco de dados e sistema de arquivos.

Para inserir ou remover variáveis de um nó, o nó não poderá ultrapassar sua ordem e nem ser menor que sua ordem dividida por dois.

Árvores B não precisam ser rebalanceadas como são freqüentemente as árvores de busca binária com Árvore AVL.

Page 14: Algorítmos e estrutura de dados III

Árvores B

Árvores B têm vantagens substanciais em relação a outros tipos de implementações quanto ao tempo de acesso e pesquisa aos nós.

O criador das árvores B, Rudolf Bayer, não definiu claramente de onde veio o B das árvores B.

Ao que parece, o B vem de balanceamento onde todos os nós da árvore estão em um mesmo nível.

Também é possível que o B tenha vindo de seu sobrenome Bayer, ou ainda do nome da empresa onde trabalhava Boeing, no Boeing Scientific Research Labs.

Page 15: Algorítmos e estrutura de dados III

Árvores B

Definições

Quando existem 2 ou mais nós, passam a ser chamadas de n-árias

Nesses casos, os nós são mais comumente chamados de páginas

Os registros de uma árvore B também são todos ordenados

Page 16: Algorítmos e estrutura de dados III

Árvores B

Supondo uma árvore B n-ária. Em um árvore B de ordem m temos:

Cada página contém:

Registros: no mínimo m e no máximo 2m registros , exceto a raiz, que pode conter entre 1 e 2m registros;

Descendentes: no mínimo m + 1 descendentes e no máximo 2m +1 descendentes

Todas as páginas folhas aparecem no mesmo nível

Page 17: Algorítmos e estrutura de dados III

Exemplo de uma árvore B

30

3 4 8 9 11 13 17

10 20

25 28

40 50

33 36 43 45 48 52 55

Exemplo de uma árvore B de ordem 2 com 3 níveis

Páginas

Page 18: Algorítmos e estrutura de dados III

Árvores B

Objetivo principal

Minimizar o número de acessos ao disco para recuperar um registro

25

10 20 30 40

2 5 7 8

13 14 15 18

22

24

26

27

28

32

35

38

41 42 45 46

Page 19: Algorítmos e estrutura de dados III

Declaração do TAD Árvores B

Definição da Estrutura

#define ORDEM 2 #define TAMANHO (ORDEM*2)-1

typedef struct Pagina *PonteiroPagina; typedef struct { int chave; PonteiroPagina p; } item;

typedef struct { int m; // numero de itens na pagina PonteiroPagina p0; item e[TAMANHO]; } Pagina;

Page 20: Algorítmos e estrutura de dados III

Declaração do TAD Árvores B

Definição das operações. Algumas das operações que podem ser feitas em árvores B são:

Inicializa

Pesquisa

Insere

Retira

Page 21: Algorítmos e estrutura de dados III

Pesquisa em Árvore B

30

3 4 8 9 11 13 17

10 20

25 28

40 50

33 36 42 45 48 52 55

Procedimento para pesquisa do número 13

Page 22: Algorítmos e estrutura de dados III

Pesquisa em Árvore B

30

3 4 8 9 11 13 17

10 20

25 28

40 50

33 36 42 45 48 52 55

Procedimento para pesquisa do número 55

Page 23: Algorítmos e estrutura de dados III

Inserção

Primeiro, é preciso localizar a página apropriada em que o novo registro deve ser inserido

Duas possibilidades:

Caso 1: o registro encontra seu lugar em uma página com menos de 2m registros. Nesse caso, o processo de inserção fica limitado àquela página

Caso 2:O registro precisa ser inserido em uma página já cheia (com 2m registros). Nesse caso, o processo de inserção pode levar à criação de uma nova página.

Page 24: Algorítmos e estrutura de dados III

Inserção de Registros

40

3 4 8 41 43

Caso 1: o registro encontra seu lugar em uma página com menos de 2m registros

Ordem 2

9

Registro 9

Registro 45

Registro 50

45 50

Page 25: Algorítmos e estrutura de dados III

Inserção de Registros

40

3 4 8 9 41 43 45 50

Caso 2: O registro precisa ser inserido em uma página já cheia (com 2m registros), e a página pai tem menos que 2m registros e 2m+1 páginas

Ordem: 2

Registro 20

20

40

3 4 8 9 20 41 43 45 50

3 4 8 9 20

40

41 43 45 509 20

8 40

3 4 41 43 45 50

Page 26: Algorítmos e estrutura de dados III

Caso 2: O registro precisa ser inserido em uma página já cheia (com 2m registros), e a página pai já tem 2m registros e 2m+1 páginas

Ordem: 2

Inserção de Registros

Registro 22

9 13 15 18

8 20 28 40

1 3 4 7 30 33 35 3721 23 25 26 41 43 45 50

9 13 15 18

8 20 28 40

1 3 4 7 30 33 35 3721 22 23 25 26 41 43 45 50

22

Page 27: Algorítmos e estrutura de dados III

9 13 15 18

8 20 23 28 40

1 3 4 7 30 33 35 3721 22 41 43 45 5025 26

28 40

9 13 15 181 3 4 7 21 22 30 33 35 37 41 43 45 5025 26

8 20

23

Page 28: Algorítmos e estrutura de dados III

Remoção

Primeiro, é preciso localizar a página apropriada do registro a ser excluído

Duas possibilidades:

Caso 1: quando o registro se encontra em uma página folha.

1.1: A folha possui mais que m registros

1.2: A folha possui apenas m registro e o irmão possui m+1 registros

1.3: A folha e seus irmãos possuem apenas m registros

Caso 2: quando o registro não se encontra em uma folha. Nesse caso, o registro a ser retirado deve ser primeiro substituído por um outro para depois ser excluído.

Em ambos os casos deve-se verificar se a retirada não afeta as propriedades básicas de uma árvore B

Page 29: Algorítmos e estrutura de dados III

Remoção de RegistrosCaso 1.1: quando o registro se encontra em uma página folha e a folha possui mais que m registros

Ordem 2 Registros 7, 13, 15, 33, 37, 41 e 43

Retirada simples do elemento da folha

28 40

9 13 15 181 3 4 7 21 22 30 33 35 37 41 43 45 5025 26

8 20

23

Page 30: Algorítmos e estrutura de dados III

Remoção de Registros

Caso 1.2: quando o registro se encontra em uma página folha, a folha possui m registros (mínimo possível) e o irmão possui m+1 registros

Ordem 2

A chave k do pai que separa os irmãos pode ser incluída no nó X e a última ou primeira chave do irmão (última se o irmão for da esquerda e primeira se o irmão for da direita) pode ser inserida no pai no lugar de k.

28 40

9 181 3 4 21 22 30 35 45 5025 26

8 20

23 Registro 9

28 40

8 181 3 21 22 30 35 45 5025 26

4 20

23

Page 31: Algorítmos e estrutura de dados III

Remoção de Registros

Caso 1.2: quando o registro se encontra em uma página folha, a folha possui m registro (mínimo possível) e o irmão possui m+1 registros

Ordem 2

28 40

9 181 3 4 20 21 22 30 35 45 5025 26

8 19

23 Registro 18

28 40

8 191 3 4 21 22 30 35 45 5025 26

8 20

23

Page 32: Algorítmos e estrutura de dados III

Remoção de Registros

Caso 1.3: quando o registro se encontra em uma página folha, a folha e seus irmãos possuem m registros (mínimo possível). Se sub-dividem em dois casos:

• Caso 1.3.1: O pai pode emprestar registros

•Caso 1.3.2: O pai não pode emprestar registros

Page 33: Algorítmos e estrutura de dados III

Remoção de RegistrosCaso 1.3.1: quando o registro se encontra em uma página folha, a folha e seus irmãos possuem m registros (mínimo possível) e o pai pode emprestar

Ordem 2

Registro 6

Se os dois irmãos de X contiverem exatamente m registros (ocupação mínima), nenhum registro poderá ser emprestado. Neste caso, o nó X e um de seus irmãos (à esquerda ou direita) são concatenados em um único nó, que também contém a chave separadora do pai.

23

28 40

6 81 3 21 22 30 35 45 5025 26

4 10 20

13 18

1 3 4 8 45 5025 26

28 40

21 22 30 35

10 20

23

13 18

Page 34: Algorítmos e estrutura de dados III

Remoção de RegistrosCaso 1.3.1: quando o registro se encontra em uma página folha, a folha e seus irmãos possuem m registros (mínimo possível) e o pai pode emprestar

Ordem 2

Registro 8

23

28 40

6 81 3 21 22 30 35 45 5025 26

4 10 20

13 18

1 3 45 5025 26

28 40

21 22 30 35

4 20

23

6 10 13 18

Page 35: Algorítmos e estrutura de dados III

Remoção de RegistrosCaso 1.3.1: quando o registro se encontra em uma página folha, a folha e seus irmãos possuem m registros (mínimo possível) e o pai pode emprestar

Ordem 2

Registro 22

23

28 40

6 81 3 21 22 30 35 45 5025 26

4 10 20

13 18

13 18 20 211 3 45 5025 26

28 40

30 35

4 10

23

6 8

Page 36: Algorítmos e estrutura de dados III

Remoção de RegistrosCaso 1.3.2: quando o registro se encontra em uma página folha, a folha e seus irmãos possuem m registros (mínimo possível) e o pai não pode emprestar

Ordem 2

Registro 13

4 8 45 5025 26

28 40

21 22 30 35

10 20

23

13 18

Se os dois irmãos de X e o pai contiverem exatamente m registros (ocupação mínima), também nenhum registro poderá ser emprestado. Neste caso, o nó X e um de seus irmãos são concatenados em um único nó que também contém a chave separadora do pai, e o procedimento é feito recursivamente até que as páginas contenham a quantidade mínima de registros.

Page 37: Algorítmos e estrutura de dados III

Remoção de Registros

4 8 45 5025 26

28 40

21 22 30 35

10 20

23

13 18

45 5025 26

28 40

21 22 30 35

20

23

4 8 10 18

21 22 30 35 45 5025 26

20 23 28 40

4 8 10 18

Page 38: Algorítmos e estrutura de dados III

Remoção de RegistrosOutro exemplo: Árvore B de ordem 1

02

05

10

07

01 03 06 09

15

20

35

13 16 30 40

Registro 3

01 02

05

10

07

06 09

15

20

35

13 16 30 40

Page 39: Algorítmos e estrutura de dados III

Remoção de Registros

01 02

05

10

07

06 09

15

20

35

13 16 30 40

01 02

05 07

10

06 09

15

20

35

13 16 30 40

01 02

05 07

10 20

06 09

15 35

13 16 30 40

Page 40: Algorítmos e estrutura de dados III

Remoção

Caso 2: quando o registro não se encontra em uma folha.

Mesmo procedimento de remoção em árvores binárias ou AVL

Substituição pelo registro mais à direita da sub-árvore à esquerda;

Substituição pelo registro mais à esquerda da sub-árvore à direita;

Caso 2.1: a sub-árvore vizinha possui registros para emprestar

Caso 2.2: a sub-árvore vizinha não possui registros para emprestar

Page 41: Algorítmos e estrutura de dados III

Remoção de Registros

Registro 20

Caso 2.1: a sub-árvore vizinha possui registros para emprestar

OU

4 8 10 18 21 22 23 30 35 45 5025 26

20 24 28 40

4 8 10 21 22 23 30 35 45 5025 26

18 24 28 40

4 8 10 18 22 23 30 35 45 5025 26

21 24 28 40

Page 42: Algorítmos e estrutura de dados III

Remoção de Registros

Caso 2: quando o registro não se encontra em uma folha.

Possui dois casos:

Caso 2.2.1: O irmão possui registros para emprestar

Caso 2.2.2: O irmão não possui registros para emprestar

Page 43: Algorítmos e estrutura de dados III

Remoção de Registros

Registro 20

Caso 2.2.1: a sub-árvore vizinha NÃO possui registros para emprestar e o irmão possui registros para emprestar

Concatena-se o filho à esquerda e à direita do registro excluído; o registro mais à esquerda (ou mais à direita) do irmão é promovido para a raiz e o registro à esquerda (ou à direita) da raiz é inserido na página que teve o registro excluído; o filho à esquerda (ou o filho à direita) do registro que foi emprestado passa a ser o filho à direita (ou à esquerda) do nó para onde ele foi deslocado;

23

28 37 40

6 181 3 21 22 30 35 45 5025 26

4 20

38 39

23

28 37 40

6 18 21 221 3 30 35 45 5025 26

4

38 39

Page 44: Algorítmos e estrutura de dados III

Remoção de Registros

23

28 37 40

6 18 21 221 3 30 35 45 5025 26

4

38 39

28

37 40

6 18 21 221 3 30 35 45 5025 26

4 23

38 39

Page 45: Algorítmos e estrutura de dados III

Remoção de Registros

Registro 40

Caso 2.2.1: a sub-árvore vizinha NÃO possui registros para emprestar e o irmão possui registros para emprestar

28

37 40

6 181 3 26 27 38 39 45 5030 32

4 20 25

22 23

28

37

6 181 3 26 27 38 39 45 5030 32

4 20 25

22 23

Page 46: Algorítmos e estrutura de dados III

Remoção de Registros

28

37

6 181 3 26 27 38 39 45 5030 32

4 20 25

22 23

25

28 37

6 181 3 26 27 38 39 45 5030 32

4 20

22 23

Page 47: Algorítmos e estrutura de dados III

Remoção de Registros

Registro 23

Caso 2.2.2: a sub-árvore vizinha NÃO possui registros para emprestar e o irmão também NÃO possui registros para emprestar

6 18

28

37 40

1 3 30 35 45 5025 26

4 23

6 18 25 26

28

37 40

1 3 30 35 45 50

4

Concatena-se os registros filhos à esquerda e à direita do registro excluído; em seguida, concatena-se os registros da página excluída, do seu irmão e do seu pai

6 18 25 26

4 28 37 40

1 3 30 35 45 50

Page 48: Algorítmos e estrutura de dados III

Considerações finais

Inserção: Mais veloz se comparado à tabelas de hash, por sua capacidade de se ajustar e balancear a cada inserção, isto significa menores colisões, e consequentemente menos laços para encontrar uma posição livre.

No caso de precisar expandir, a duplicação é feita somente na folha, e nos nós correspondentes se necessário, o que garante menor espaço vazio alocado e menos ocupação em disco, ao contrário do hash que duplica a tabela por inteiro.

Page 49: Algorítmos e estrutura de dados III

Considerações finais

Exclusão: No caso de uma exclusão, Arvores B são capazes de evitar grandes fragmentações, pois se ajustam e balanceiam também nesse momento.

Já em tabelas de hash, quando há exclusão de uma chave, o espaço alocado para esta fica vazio, porém ainda alocado. Maior fragmentação significa menor desempenho.

Page 50: Algorítmos e estrutura de dados III

Considerações finais

Busca: Árvores B são tão boas e velozes quanto tabelas de hash numa busca por igualdade, porém são muito superiores em velocidade e desempenho em buscas do tipo range.

A superioridade da Árvore B, se baseia na chave primária, onde a busca começa pela raiz e é direcionada aos nós e filhos de acordo com a chave procurada, isto torna mais objetivo e direto o resultado final. Porém, se comparado a Árvore B+, sua performance pode cair um pouco em uma busca linear.

Page 51: Algorítmos e estrutura de dados III

Árvores B+

São árvores B que contém dados somente nos nós folhas e existe uma ligação entre os irmãos folhas adjacentes para facilitar a busca

Uma árvore B+ é uma variação da árvore B.

Representa a ordenação de dados de uma maneira que permita uma inserção e remoção eficiente de elementos.

É um índice dinâmico de multi-níveis com ligações máximas e mínimas no número de chaves em cada nodo.

Page 52: Algorítmos e estrutura de dados III

Árvores B+

Os sistemas de arquivos NTFS para o Microsoft Windows, o sistema de arquivos ReiserFS para Unix, o XFS para IRIX e Linux, e o JFS2 para AIX, OS/2 e Linux, usam este tipo de árvore.

Numa árvore-B+, contrastando com uma árvore-B, todos dos dados são gravados nas folhas.

Os nodos internos contêm apenas chaves e apontadores da árvore.

Todas as folhas estão no mesmo nível mais baixo.

Os nodos das folhas também estão ligados entre si como uma lista para efetuar consultas facilmente.

Page 53: Algorítmos e estrutura de dados III

Arvores B+

O número máximo de apontadores num registro é chamado de ordem da árvore B+.

O número mínimo de chaves por registro é metade do número máximo de chaves. Por exemplo:

Se a ordem de uma árvore B+ for n+1, cada nodo (exceto o da raiz) deverá ter entre (n+1)/2 e n chaves.

Se n for um número primo, o número mínimo de chaves pode ser (n+1)/2 ou (n-1)/2, mas terá de ser o mesmo em toda a árvore.

Page 54: Algorítmos e estrutura de dados III

Árvores B+

Um exemplo simples de uma árvore B+ ligando as chaves 1-7 aos valores de dados d1-d7.

Notar a lista ligada (em vermelho) permitindo uma atualização ordenada rápida.