A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Algorítmos e estrutura de dados III

Apresentações semelhantes


Apresentação em tema: "Algorítmos e estrutura de dados III"— Transcrição da apresentação:

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

2 Árvores 2-3 Árvores B (B-Trees) Árvores B+

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

4 Árvores 2-3 P G T C K M R X A F H L O Q S V Z
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. P G T C K M R X A F H L O Q S V Z

5 Inserção em árvores 2-3 Ex: Inserção do elemento G na árvore abaixo. T
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. T I V X E G L P U W Z

6 Inserção em árvores 2-3 T I V X E G L P U W Z N
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. T I V X E G L P U W Z N

7 Inserção em árvores 2-3 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. T I N V X P E G L U W Z

8 Inserção em árvores 2-3 Ex: Inserção do elemento C na árvore abaixo. T
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. Ex: Inserção do elemento C na árvore abaixo. T I N V X P E G L U W Z C

9 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. Ex: Inserção do elemento C leva à promoção do elemento E. I T E N V X G P C L U W Z

10 Inserção em árvores 2-3 Ex: Inserção do elemento C leva à promoção do elemento E que por sua vez leva à promoção do elemento I. I T E N L P V X G C U W Z

11 Á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ó.

12 Á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ó.

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

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

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

16 Supondo uma árvore B n-ária. Em um árvore B de ordem m temos:
Á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 m +1 descendentes Todas as páginas folhas aparecem no mesmo nível

17 Exemplo de uma árvore B Exemplo de uma árvore B de ordem 2 com 3 níveis 30 10 20 25 28 40 50 33 36 52 55 Páginas

18 Á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 22 24 26 27 28 41 42 45 46 13 14 15 18 32 35 38

19 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;

20 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

21 Pesquisa em Árvore B Procedimento para pesquisa do número 13 30
10 20 25 28 40 50 33 36 52 55

22 Pesquisa em Árvore B Procedimento para pesquisa do número 55 30
10 20 25 28 40 50 33 36 52 55

23 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.

24 Inserção de Registros 40 3 4 8 9 41 43 45 50 Registro 9 Registro 45
Caso 1: o registro encontra seu lugar em uma página com menos de 2m registros Ordem 2 Registro 9 40 Registro 45 Registro 50 3 4 8 9 41 43 45 50

25 Inserção de Registros 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 40 40 Registro 20 20 9 20 8 40 3 4 40

26 Inserção de Registros 22 8 20 28 40 Registro 22 1 3 4 7 9 13 15 18
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 Registro 22 22

27 21 22 25 26 23 8 20 28 40 25 26 21 22

28 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

29 Remoção de Registros Caso 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 23 8 20 28 40 21 22 25 26 Retirada simples do elemento da folha

30 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 23 Registro 9 8 20 28 40 1 3 4 9 18 21 22 25 26 30 35 45 50 28 40 8 18 1 3 21 22 30 35 45 50 25 26 4 20 23 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.

31 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 23 Registro 18 8 19 28 40 1 3 4 9 18 25 26 30 35 45 50 28 40 8 19 1 3 4 21 22 30 35 45 50 25 26 8 20 23

32 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

33 Remoção de Registros Caso 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 23 28 40 6 8 1 3 21 22 30 35 45 50 25 26 13 18 Registro 6 45 50 25 26 28 40 21 22 30 35 10 20 23 13 18 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.

34 Remoção de Registros Caso 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 23 28 40 6 8 1 3 21 22 30 35 45 50 25 26 13 18 Registro 8 1 3 45 50 25 26 28 40 21 22 30 35 4 20 23

35 Remoção de Registros Caso 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 23 28 40 6 8 1 3 21 22 30 35 45 50 25 26 13 18 Registro 22 1 3 45 50 25 26 28 40 30 35 4 10 23 6 8

36 Remoção de Registros Caso 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 50 25 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.

37 Remoção de Registros 4 8 45 50 25 26 28 40 21 22 30 35 10 20 23 13 18 45 50 25 26 28 40 21 22 30 35 20 23 45 50 21 22 30 35 25 26

38 Outro exemplo: Árvore B de ordem 1
Remoção de Registros Outro exemplo: Árvore B de ordem 1 Registro 3 02 05 10 07 01 03 06 09 15 20 35 13 16 30 40 05 10 07 06 09 15 20 35 13 16 30 40 01 02

39 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

40 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

41 Remoção de Registros OU 20 24 28 40 Registro 20 4 8 10 18 21 22 23
Caso 2.1: a sub-árvore vizinha possui registros para emprestar 30 35 45 50 25 26 Registro 20 22 23 30 35 45 50 25 26 OU 4 8 10 30 35 45 50 25 26

42 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

43 Remoção de Registros Caso 2.2.1: a sub-árvore vizinha NÃO possui registros para emprestar e o irmão possui registros para emprestar 23 6 18 1 3 21 22 30 35 45 50 25 26 4 20 38 39 Registro 20 23 1 3 30 35 45 50 25 26 4 38 39 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;

44 Remoção de Registros 23 1 3 30 35 45 50 25 26 4 38 39 28 37 40 1 3 30 35 45 50 25 26 4 23 38 39

45 Remoção de Registros 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 18 1 3 26 27 38 39 45 50 30 32 22 23 Registro 40 28 37 6 18 1 3 26 27 30 32 22 23

46 Remoção de Registros 28 37 6 18 1 3 26 27 30 32 22 23 25 28 37 6 18 1 3 26 27 30 32 4 20 22 23

47 Remoção de Registros 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 50 25 26 4 23 Registro 23 28 37 40 1 3 30 35 45 50 4 1 3 30 35 45 50 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

48 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.

49 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.

50 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.

51 Árvores B+ Uma árvore B+ é uma variação da árvore 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.

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

53 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.

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


Carregar ppt "Algorítmos e estrutura de dados III"

Apresentações semelhantes


Anúncios Google