ISCTE – ESCOLA DE GESTÃO - Universidade Técnica de Lisboa
ISCTE – ESCOLA DE GESTÃO - Universidade Técnica de Lisboa
ISCTE – ESCOLA DE GESTÃO - Universidade Técnica de Lisboa
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Seguidamente, é feita uma or<strong>de</strong>nação com base no sub-grafo gerado e é obtido um conjunto <strong>de</strong><br />
sequências <strong>de</strong> agregados a serem computadas em sequência (pipeline).<br />
Este algoritmo concilia as optimizações partilha da or<strong>de</strong>nação (share-sort), uma vez que os dados são<br />
or<strong>de</strong>nados numa <strong>de</strong>terminada or<strong>de</strong>m que permita computar todos os agregados que partilham um<br />
prefixo, e pais mais pequenos (smallest parents), uma vez que os agregados são sempre calculados a<br />
partir <strong>de</strong> outros agregados <strong>de</strong> menor dimensão já calculados. Além disso, emprega ainda as<br />
optimizações resultados em cache (cache-results) e amortização <strong>de</strong> varrimentos (amortize-scans) para<br />
reduzir o número <strong>de</strong> acessos ao disco, pois adopta uma política <strong>de</strong> cálculo em pipeline.<br />
2.4.1.2 PipeHash<br />
O algoritmo PipeSort trabalha igualmente sobre a malha <strong>de</strong> procura e começa por escolher, para cada<br />
agregado, o seu pre<strong>de</strong>cessor <strong>de</strong> menor dimensão, obtendo assim a árvore <strong>de</strong> custo mínimo. Porém, os<br />
recursos normalmente disponíveis continuam a não ser suficientes para computar todos os agregados<br />
<strong>de</strong>ssa árvore, pelo que é necessário <strong>de</strong>cidir quais serão computados em conjunto, quando reservar<br />
memória para diferentes tabelas <strong>de</strong> dispersão e que atributos serão usados para dividir os dados<br />
[Agrawal1996].<br />
O algoritmo começa por seleccionar para, cada agregado, o agregado-pai com menor dimensão total<br />
estimada. No final, obtém uma árvore <strong>de</strong> cobertura mínima (minimum spanning tree), em que cada nó<br />
representa um agregado e cada arco que une o nó A ao nó B indica que A é o menor pai <strong>de</strong> B. A figura<br />
abaixo apresenta a árvore <strong>de</strong> cobertura mínima para a malha <strong>de</strong> procura apresentada na figura 7.<br />
Figura 10 - Árvore <strong>de</strong> cobertura mínima para a malha <strong>de</strong> procura apresentada na figura 7 [Agrawal1996]<br />
Na maioria dos casos, a memória disponível não será suficiente para calcular todos os agregados da<br />
árvore, pelo que é necessário dividir a árvore assim obtida. A árvore é dividida <strong>de</strong> tal forma que cada<br />
uma das sub-árvores obtidas possa ser calculada com uma única passagem do agregado na raiz da<br />
árvore original. Este é um problema NP-completo, o que obriga a escolher uma aproximação à solução;<br />
26