VinBR

AEDs III 27/06/2011

Mar 6th, 2012
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.44 KB | None | 0 0
  1. // O ultimo algoritimo visto foi o quick sort externo.
  2. // Agora veremos algoritimos de pesquisa, e estruturas de dados para memoria secundária.
  3.  
  4. CONCEITO:
  5. Acesso Sequencial Indexado é uma pesquisa de dados ordenados em um arranjo, porem voce adiciona a cada N números um indice.
  6. Cada indice fica armazenado em memória, juntamente com o menor número de seu sub-arranjo.
  7.  
  8. Ao pesquisar voce simplismente realiza uma pesquisa binária no indice em memória uma vez encontrada o sub-arranjo desejado, voce realisa outra pesuqisa binária nele.
  9.  
  10. HDs são formados por vários cilindros. Para se aproveitar isso deve manter também em memoria um indice dos cilindros, e distribuir o arranjo entre eles.
  11.  
  12. Essa estrutura não é boa para uso dinâmico, adições e exclusões são pouco eficientes.
  13.  
  14. Para adições é N-1 acessos a memória.
  15. E também é necessário mover os inteiros.
  16.  
  17. CONCEITO:
  18. Arvore B é uma arvore binária cuja chave é um arranjo ordenado de chaves.
  19.  
  20. Entre cada par de chaves de um nó, há um ponteiro que aponta para um outro nó com dados entre a chave a direita e à esquerda
  21. nos extremos direita e esquerda do arranjo também há um ponteiro que leva a um nó contendo chaves maiores ou menores respectivamente que todas as chaves deste nó.
  22. Note portanto que a arvore não é necessáriamente binária ela pode ter K filhos por nó, sendo k um número arbitrário do programador.
  23.  
  24. -------------------------------------------------------------------------------------------
  25.  
  26. Busca:
  27. É uma busca recursiva, voce encontra em cada nó o ponteiro que aponta para o nó com a chave mais próxima da sua chave, e então reinicia a recursão no novo nó.
  28. Até encontrar a chave ou não.
  29.  
  30. -------------------------------------------------------------------------------------------
  31.  
  32. Inserção:
  33. Melhor Caso:
  34. Encontre a pagina onde o número deve ser inserido,
  35. Se a pagina estiver com espaço sobrando, insira nela mesma e retorne.
  36.  
  37. Caso Médio:
  38. Caso contrário, divida o nó em 2 sem aumentar a profundidade da arvore, e insira no espaço vazio de um deles.
  39. Ou seja, crie um novo filho para o pai desse nó, e divida as chaves entre estes dois nós gemeos.
  40.  
  41. Agora que voce duplicou os nós, voce deve ter espaço para adicionar.
  42.  
  43. Pior Caso:
  44. Caso voce queira criar o irmão gemeo do seu nó, mas o pai desse nó já está com o limite de filhos, agora complica.
  45.  
  46. Faça então o irmão gemeo normalmente. porem após realizar a inserção, promova o número médio para o nó de cima ( que é o nó pai que estava lotado )
  47.  
  48. Como fazer agora para inserir esse cara no nó pai?
  49.  
  50. Bem insira de novo que nem voce fez antes, se o pai dele tiver lotado também repita o processo recursivamente.
  51.  
  52. Note que esse pai que sera duplicado, ele precisa ser duplicado porque tem N+1 filhos, divida bem esses filhos.
  53.  
  54. PS: Sempre que voce cria um novo nó, crie também um número ou arranjo de números para dividi-los, ou seja, pegue o máximo do à eskerda ou o minimo do à direita.
  55.  
  56. -------------------------------------------------------------------------------------------
  57.  
  58. Remoção:
  59.  
  60. Retira o registro assim que encontra-lo.
  61.  
  62. Melhor Caso:
  63. O nó tem mais que N/2 registros.
  64.  
  65. Caso médio folha:
  66. Se o nó for folha e não houver sobra de chaves:
  67. Veja os irmãos da direita e esquerda, se um deles estiver com sobra de chaves, pegue uma chave emprestada.
  68.  
  69. Caso médio não-folha:
  70. Se não tiver chave de sobra e
  71. Se tiver filhos tire emprestado um nó do filho.
  72. Se virar nó folha, puxe dos irmãos juntamente com os filhos associados.
  73. Se não tiver irmãos, puxe do nó pai uma chave, se o pai não tiver o suficiente, faça o mesmo processo de busca de chave para o pai, e assim por diante,
  74. Repare que não vale roubar chave dos filhos!
  75.  
  76. Se voce tiver tirando de um nó não folha encontre o sucessor imediato ou o predecessor imediato, ( ou seja o número de toda a arvore mais próximo do que voce vai tirar)
  77.  
  78. Necessáriamente esse cara agora é uma folha.
  79.  
  80. Vai roubando chaves recursivametne até chegar na raiz, se a raiz ficar sem chaves, funda os filhos dela, e faça deles a nova raiz, apagando a raiz antiga.
  81.  
  82. Nota: Isso é sempre uma arvore balanceada!
  83.  
  84. Quando voce sumir com uma raiz, pode ser preciso reordenar toda a arvore,
  85. ai voce pode precisar de puxar a chave de um filho decer com a de um pai, e assim recursivamente até voce conseguir uma coisa ordenada.
  86.  
  87.  
  88. --------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment