15.07.2013 Views

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

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

facilmente seleccionados para cálculo, o que é conseguido através <strong>de</strong> uma proprieda<strong>de</strong> que mantém em<br />

cada nó da árvore a referência do seu nó pai.<br />

noRaiz {D 1,D 2,...,D n}<br />

listaNos {}<br />

initMMSTree()<br />

listaFilhos {}<br />

genFilhos(noRaiz)<br />

genFilhos(ListaDimensões noPai)<br />

pai noPai<br />

i n<br />

para cada D i em noPai<br />

noFilho noPai excluindo D i<br />

se(not noFilho listaNos)<br />

listaNos listaNos noFilho<br />

listaFilhos listaFilhos noFilho<br />

genFilhos(noFilho)<br />

i i-1<br />

Figura 25 <strong>–</strong> Pseudocódigo correspon<strong>de</strong>nte à criação da MMST<br />

Para implementar esta optimização, é necessário recorrer a um mecanismo básico <strong>de</strong> <strong>de</strong>scoberta <strong>de</strong><br />

caminho (path finding) que permita assinalar quais os nós da árvore que é necessário calcular por forma<br />

a conseguir obter um <strong>de</strong>terminado agregado. Para este efeito, os nós são marcados <strong>de</strong>s<strong>de</strong> o nó<br />

objectivo (calculate = true) até à raiz. Para agilizar o varrimento da árvore, cada nó mantém uma<br />

referência para o nó pai imediatamente acima na árvore, à excepção do nó raiz em que o valor da<br />

proprieda<strong>de</strong> father é nulo.Um exemplo da utilida<strong>de</strong> <strong>de</strong>sta implementação po<strong>de</strong> ser facilmente<br />

concretizado, tendo em conta a MMST da figura 26. Segundo o algoritmo original, para calcular o valor<br />

<strong>de</strong> ALL é necessário calcular um total <strong>de</strong> quinze agregados antes <strong>de</strong> obter o valor <strong>de</strong> ALL, ou seja, é<br />

necessário calcular o valor dos agregados correspon<strong>de</strong>ntes a cada um dos nós da árvore. Utilizando<br />

sub-treeing, o valor do agregado ALL po<strong>de</strong> ser obtido calculando apenas quatro agregados uma vez que<br />

apenas é obrigatório calcular o valor correspon<strong>de</strong>nte aos nós ALL, A (father(ALL) = A), AB<br />

(father(A) = AB) e ABC (father(AB) = ABC).<br />

49

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!