• Nenhum resultado encontrado

Análise de Algoritmos

N/A
N/A
Protected

Academic year: 2022

Share "Análise de Algoritmos"

Copied!
83
0
0

Texto

(1)

Análise de Algoritmos

(2)

• Arquivos contém mais registros do que a memória primária pode armazenar

• Acesso ao disco

▫ Acessar um registro é algumas ordens de grandeza maior do que o custo de processamento na memória primária

• Medida de complexidade

▫ Acesso a disco

www.nakamura.eti.br/eduardo Análise de Algoritmos 2

(3)

• Memórias secundárias

▫ Apenas um registro pode ser acessado em um dado momento (acesso seqüencial)

• Memórias primárias

▫ Acesso a qualquer registro de um arquivo a um custo uniforme (acesso direto)

www.nakamura.eti.br/eduardo Análise de Algoritmos 3

(4)

• Proposta

▫ Busca em memória secundária

• Origem

▫ Proposto em 1972 por Bayer e McCreight,

▫ Laboratório de Pesquisas Científicas da Boeing

▫ “B” de Bayer ou “B” de Boeing?

• Em 1979, o uso de árvores-B já era praticamente o padrão adotado em SGBDs

www.nakamura.eti.br/eduardo Análise de Algoritmos 4

(5)

• Acesso a disco é caro (lento)

• Até agora usamos pesquisa binária nos índices ordenados

▫ Se o índice é grande e não cabe em memória principal?

▫ Pesquisa binária exige muitos acessos a disco

• 16 itens podem requerer 4 acessos, 1.024 itens podem requerer até 10 acessos

▫ São números altos

www.nakamura.eti.br/eduardo Análise de Algoritmos 5

(6)

• O custo de manter em disco um índice ordenado de forma a permitir busca binária é proibitivo

• Inserção e remoção de registros deve ter apenas efeitos locais

▫ Não exija a reorganização total do índice

www.nakamura.eti.br/eduardo Análise de Algoritmos 6

(7)

• Árvores balanceadas

▫ Os nós de uma árvore B podem ter um número variável de nós filho (árvores n-árias)

▫ Cada nó pode ter vários registros (chaves), recebendo o nome de página

• Em uma árvore B de grau t:

▫ Página raiz: 1 e 2t registros

▫ Demais páginas

 Mínimo t registros e t + 1 descendentes

 Máximo 2t registros e 2t + 1 descendentes

▫ Páginas folhas: todas no mesmo nível

www.nakamura.eti.br/eduardo Análise de Algoritmos 7

(8)

• Características

▫ Os registros aparecem em ordem crescente da esquerda para a direita

▫ Os nós folha tem os seus campos ponteiro com valores nulos

▫ Extensão natural da árvore binária de pesquisa

www.nakamura.eti.br/eduardo Análise de Algoritmos 8

(9)

• Árvore B de ordem t = 2 com três níveis

www.nakamura.eti.br/eduardo Análise de Algoritmos 9

3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55

10 20 40 50

30

(10)

• Considerando X como um nó interno da árvore e n o número de chaves armazenadas em X

▫ as n chaves k1, k2...kn são armazenadas em ordem crescente;

▫ e X possui n+1 ponteiros f1, f2...fn+1 para seus filhos

www.nakamura.eti.br/eduardo Análise de Algoritmos 10

f1 k1 f2 k2 f3 k3 ... fn kn fn+1

(11)

• Todo nó x tem os seguintes campos

x.n – número de chaves no nó x

▫ As chaves em x estão em ordem crescente

x.chave[1]  x.chave[2]  ...  x.chave[n]

x.folha – booleano indicando se é folha

www.nakamura.eti.br/eduardo Análise de Algoritmos 11

f1 x.chave[1] f2 x.chave[2] ... fn x.chave[n] fn+1

(12)

• As chaves da subárvore apontada por f

i

estão no intervalo entre x.chave[i-1] e x.chave[i]

www.nakamura.eti.br/eduardo Análise de Algoritmos 12

x.chave[i-1] fi x.chave[i] ...

... 2 6 ...

... 3 4 5 ...

(13)

• Toda folha tem a mesma profundidade

▫ Altura h da árvore

www.nakamura.eti.br/eduardo Análise de Algoritmos 13

3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55

10 20 40 50

30

(14)

• Limites (em função do grau t  2)

▫ Raiz: 1 e 2t chaves

▫ Demais nós

 Mínimo t chaves e t+1 filhos

 Máximo 2t chaves e 2t +1 filhos

• A árvore mais simples tem t = 2

▫ Cada nó pode ter 2, 3 ou 4 filhos

▫ Árvore 2-3-4

• Na prática t é muito maior

www.nakamura.eti.br/eduardo Análise de Algoritmos 14

(15)

• Altura h da árvore B

h  logt ( (n+1)/2 )

www.nakamura.eti.br/eduardo Análise de Algoritmos 15

(16)

B-TREE-SEARCH(x,k) 1: i  1;

2: while i  x.n and k > x.chave[i] do 3: i  i + 1;

4: end while

5: if i  x.n and k = x.chave[i] then

6: return (x,i); // nó e a posição dentro dele 7: end if

8: if x.folha = true then 9: return NIL;

10: else

11: DISK-READ(x.f[i]); // lê os filhos em f[i]

12: return B-TREE-SEARCH(x.f[i],k);

13: end if

www.nakamura.eti.br/eduardo Análise de Algoritmos 16

(17)

B-TREE-CREATE(T)

1: x  ALOCATE-NODE();

2: x.folha  true;

3: x.n  0;

4: DISK-WRITE(x);

5: T.raiz  x;

www.nakamura.eti.br/eduardo Análise de Algoritmos 17

(18)

www.nakamura.eti.br/eduardo Análise de Algoritmos 18

3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55

10 20 40 50

30 17

(19)

www.nakamura.eti.br/eduardo Análise de Algoritmos 19

3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55

10 20 40 50

30 17

(20)

www.nakamura.eti.br/eduardo Análise de Algoritmos 20

3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55

10 20 40 50

30 17

(21)

www.nakamura.eti.br/eduardo Análise de Algoritmos 21

3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55

10 20 40 50

30

17

(22)

www.nakamura.eti.br/eduardo Análise de Algoritmos 22

3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55

10 20 40 50

30

17

(23)

www.nakamura.eti.br/eduardo Análise de Algoritmos 23

3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55

10 20 40 50

30

17

(24)

B-TREE-CREATE(T)

1: x  ALOCATE-NODE();

2: x.folha  true;

3: x.n  0;

4: DISK-WRITE(x);

5: T.raiz  x;

www.nakamura.eti.br/eduardo Análise de Algoritmos 24

(25)

• A inserção nas árvores B são relativamente mais complicadas

▫ Precisamos inserir a nova chave no nó correto da árvore, sem violar suas propriedades

• Como proceder se o nó estiver cheio?

www.nakamura.eti.br/eduardo Análise de Algoritmos 25

(26)

• Como proceder se o nó estiver cheio?

▫ Separar (split) o nó ao redor do elemento mediano,

▫ Criar 2 novos nós que não violam as definições da árvore

▫ O elemento mediano é promovido, passando a fazer parte do nó pai

▫ A inserção é feita em um único percurso na árvore, a partir da raiz até uma das folhas

www.nakamura.eti.br/eduardo Análise de Algoritmos 26

(27)

• Localizar o nó folha X onde o novo elemento deve ser inserido

• Se o nó X estiver cheio, realizar uma subdivisão de nós

▫ Passar o elemento mediano de X para seu pai

▫ Dividir X em dois novos nós com t - 1 elementos

▫ Inserir a nova chave

• Se o pai de X também estiver cheio

▫ Repetir recursivamente a subdivisão para o pai de X

• Pior caso

▫ A altura da árvore B é aumentada para poder inserir o novo elemento

www.nakamura.eti.br/eduardo Análise de Algoritmos 27

(28)

www.nakamura.eti.br/eduardo Análise de Algoritmos 28

60?

(29)

www.nakamura.eti.br/eduardo Análise de Algoritmos 29

60

(30)

www.nakamura.eti.br/eduardo Análise de Algoritmos 30

60 40?

(31)

www.nakamura.eti.br/eduardo Análise de Algoritmos 31

40 60

(32)

www.nakamura.eti.br/eduardo Análise de Algoritmos 32

40 60 90, 70?

(33)

www.nakamura.eti.br/eduardo Análise de Algoritmos 33

40 60 70 90

(34)

www.nakamura.eti.br/eduardo Análise de Algoritmos 34

40 60 70 90 92?

(35)

www.nakamura.eti.br/eduardo Análise de Algoritmos 35

40, 60, 70, 90, 92

(36)

www.nakamura.eti.br/eduardo Análise de Algoritmos 36

40 60 90 92

70

(37)

www.nakamura.eti.br/eduardo Análise de Algoritmos 37

40 60 90 92

70 62,65?

(38)

www.nakamura.eti.br/eduardo Análise de Algoritmos 38

40 60 62 65 90 92

70

(39)

www.nakamura.eti.br/eduardo Análise de Algoritmos 39

40 60 62 65 90 92

70 45?

(40)

www.nakamura.eti.br/eduardo Análise de Algoritmos 40

40 45 90 92

60 70

62 65

(41)

www.nakamura.eti.br/eduardo Análise de Algoritmos 41

40 45 90 92

60 70 68,67?

62 65

(42)

www.nakamura.eti.br/eduardo Análise de Algoritmos 42

40 45 90 92

60 70

62 65 67 68

(43)

www.nakamura.eti.br/eduardo Análise de Algoritmos 43

40 45 90 92

60 70

62 65 67 68 69?

(44)

www.nakamura.eti.br/eduardo Análise de Algoritmos 44

40 45 90 92

60 67 70

62 65 68 69

(45)

www.nakamura.eti.br/eduardo Análise de Algoritmos 45

40 45 90 92

60 67 70

62 65 48,50?

68 69

(46)

www.nakamura.eti.br/eduardo Análise de Algoritmos 46

40 45 48 50 90 92

60 67 70

62 65 68 69

(47)

www.nakamura.eti.br/eduardo Análise de Algoritmos 47

40 45 48 50 90 92

60 67 70

62 65 68 69

55?

(48)

www.nakamura.eti.br/eduardo Análise de Algoritmos 48

50 55 90 92

48 60 67 70

62 65 68 69

40 45

(49)

www.nakamura.eti.br/eduardo Análise de Algoritmos 49

50 55 90 92

48 60 67 70

62 65 68 69

40 45

56,57?

(50)

www.nakamura.eti.br/eduardo Análise de Algoritmos 50

50 55 56 57 90 92

48 60 67 70

62 65 68 69

40 45

(51)

www.nakamura.eti.br/eduardo Análise de Algoritmos 51

50 55 56 57 90 92

48 60 67 70

62 65 68 69

40 45

58?

(52)

www.nakamura.eti.br/eduardo Análise de Algoritmos 52

48 60 67 70

90 92 62 65 68 69

40 45

58 56

57 58 50 55

(53)

www.nakamura.eti.br/eduardo Análise de Algoritmos 53

57 58 62 65 68 69 90 92

50 55 40 45

60

48 56 67 70

(54)

• A remoção de uma chave é análoga à inserção com alguns complicadores

▫ Uma chave pode ser removida de qualquer nó

▫ Precisamos garantir que ao removermos a chave as propriedades da árvore B não sejam violadas

www.nakamura.eti.br/eduardo Análise de Algoritmos 54

(55)

• Na inserção tivemos de garantir que um nó não se tornasse grande demais na inserção

▫ Na remoção devemos garantir que ele não torne-se pequeno demais

▫ Deve sempre ter pelo menos t elementos

• Existem 6 casos possíveis para a remoção de uma chave de uma árvore B

www.nakamura.eti.br/eduardo Análise de Algoritmos 55

(56)

• A chave k está numa folha da árvore e a folha possui pelo menos t+1 chaves

• Procedimento

▫ Remover a chave da árvore

www.nakamura.eti.br/eduardo Análise de Algoritmos 56

(57)

www.nakamura.eti.br/eduardo Análise de Algoritmos 57

5 10

11 12 13 6 7 8

1 2 3

(58)

www.nakamura.eti.br/eduardo Análise de Algoritmos 58

5 10

11 12 13 6 7 8

1 2

(59)

• A chave k está em um nó interno x

• Procedimento

▫ Caso 2a: O filho y que precede k no nó x possui pelo menos t+1 chaves

 Encontre o predecessor k′ de k na sub-árvore com raiz em y

 Remova k′ do nó filho e substitua k por k′ no nó atual

▫ Caso 2b: O filho z que sucede k no nó x possui pelo menos t+1 chaves

 Encontre o sucessor k′ de k na sub-árvore com raiz em z

 Remova k′ do nó filho e substitua k por k′ no nó atual

www.nakamura.eti.br/eduardo Análise de Algoritmos 59

(60)

www.nakamura.eti.br/eduardo Análise de Algoritmos 60

5 10

11 12 13 6 7 8

1 2 3

(61)

www.nakamura.eti.br/eduardo Análise de Algoritmos 61

5 8

11 12 13 6 7

1 2 3

(62)

www.nakamura.eti.br/eduardo Análise de Algoritmos 62

5 10

11 12 13 6 7

1 2 3

(63)

www.nakamura.eti.br/eduardo Análise de Algoritmos 63

5 11

12 13 6 7

1 2 3

(64)

• A chave k está em um nó interno x

• Procedimento

▫ Caso 2c: Ambos y (filho antes de k) e z (filho depois de k) possuem somente t chaves

 Copiar todos os elementos de z em y

 Liberar a memória ocupada por z

 Remover o apontador em x

 Remover recursivamente k de x

www.nakamura.eti.br/eduardo Análise de Algoritmos 64

(65)

www.nakamura.eti.br/eduardo Análise de Algoritmos 65

5 10

11 12 13 6 7

1 2

(66)

www.nakamura.eti.br/eduardo Análise de Algoritmos 66

5 10

11 12 13 1 2 6 7

(67)

www.nakamura.eti.br/eduardo Análise de Algoritmos 67

5 10

11 12 13 1 2 6 7

(68)

www.nakamura.eti.br/eduardo Análise de Algoritmos 68

10

11 12 13 1 2 6 7

(69)

www.nakamura.eti.br/eduardo Análise de Algoritmos 69

10

11 12 13 1 2 6 7

(70)

• A chave k não está em um nó interno x, determine a raiz c

i

[x] da sub-árvore apropriada que contém k

▫ Se ci[x] tiver somente t chaves execute o procedimento abaixo

• Procedimento

▫ Caso 3a: Se ci[x] possui t chaves, mas tem um irmão adjascente com pelo menos t+1 chaves

 Copie uma chave extra para ci[x]

 Movendo uma chave de x para ci[x] e

 Movendo uma chave de um dos irmãos adjascentes a ci[x]

de volta para x e ajustando os apontadores

www.nakamura.eti.br/eduardo Análise de Algoritmos 70

(71)

www.nakamura.eti.br/eduardo Análise de Algoritmos 71

5 10

11 12 13 6 7

1 2 3 4

(72)

www.nakamura.eti.br/eduardo Análise de Algoritmos 72

5 10

11 12 13 6

1 2 3 4

(73)

www.nakamura.eti.br/eduardo Análise de Algoritmos 73

10

11 12 13 6 5

1 2 3 4

(74)

www.nakamura.eti.br/eduardo Análise de Algoritmos 74

4 10

11 12 13 6 5

1 2 3

(75)

• A chave k não está em um nó interno x, determine a raiz c

i

[x] da sub-árvore apropriada que contém k

▫ Se ci[x] tiver somente t chaves execute o procedimento abaixo

• Procedimento

▫ Caso 3b: Se ci[x] e ambos os irmãos (esquerdo e direito) possuem t chaves

 Intercalar ci[x] com um único irmão (envolve mover uma

chave de x para baixo até o novo nó intercalado, afim de se tornar a chave mediana para esse nó

www.nakamura.eti.br/eduardo Análise de Algoritmos 75

(76)

www.nakamura.eti.br/eduardo Análise de Algoritmos 76

5 10

11 12 6 7

1 2

(77)

www.nakamura.eti.br/eduardo Análise de Algoritmos 77

5 10

11 12 6

1 2

(78)

www.nakamura.eti.br/eduardo Análise de Algoritmos 78

5 10

11 12 6

1 2

(79)

www.nakamura.eti.br/eduardo Análise de Algoritmos 79

5

11 12 6 10

1 2

(80)

www.nakamura.eti.br/eduardo Análise de Algoritmos 80

5

6 10 11 12 1 2

(81)

www.nakamura.eti.br/eduardo Análise de Algoritmos 81

5

6 10 11 12 1 2

(82)

• Verifique os algoritmos de inserção e remoção para

árvore B (capítulo 18 do livro texto

1

). Faça uma análise de complexidade dos dois algoritmos

• Mostre os resultados da inserção das chaves F, S, Q, K, C, L, H, T, V, W, M, R, N, P, A, B, X, Y, D, Z, E.

Inicialmente a árvore estará vazia

• Para a árvore criada acima, mostre o resultado da remoção para A, W, M, B, C, D

www.nakamura.eti.br/eduardo Análise de Algoritmos 82

1Thomas H. Cormen, Charles E.Leiserson, Ronald L. Rivest & Clifford Stein. “Algoritmos: Teoria e Prática” (Tradução da 2ª edição americana).

(83)

• Applet animado

▫ http://slady.net/java/bt/view.php

www.nakamura.eti.br/eduardo Análise de Algoritmos 83

Referências

Documentos relacionados

c) Pressione a softkey Armazenar; em seguida, gire o botão Entrada para destacar PNG e aperte o botão Entrada para selecionar esse como o tipo de arquivo;.. d) Pressione

Ter pouco efeito sobre a resistência da corda é um dos critérios mais importantes dentre todos os critérios de seleção de um nó para trabalho em altura e resgate.. Um bom

Dj, Som e Luz, Jogos Musicais, Espetáculo de Fumo Rasteiro, Máquinas de Sparkles para Baile e Bolo.. Dj, Som e Luz, Jogos Musicais, Espetáculo de

a) É uma árvore em que todo nó interno contém um registro e, para cada nó, a seguinte propriedade é verdadeira: todos os registros com chaves menores estão

O Licitante que, convocado dentro do prazo de validade de sua proposta, não assinar o contrato ou ata de registro de preços, deixar de entregar documentação

O esquema acima descrito classifica um vetor de variáveis meteorológicas considerando-o como um conjunto de eventos discretos (o valor de cada variável sendo o evento)

Os jogos nos ajudam a definir o profissional mais adequado para o perfil do cargo, de forma mais rápida e eficaz, uma vez que, nos permite visualizar seu desempenho em

DESPESAS COM FORNECIMENTO DE AGUA E SERVICOS DE ESGOTO PARA ATENDIMENTO DO PODER JUDICIARIO, REFERENTE AO EXERCICIO DE