• Nenhum resultado encontrado

4.4 Algoritmos

4.4.1 Fundamentos e Complexidade dos Algoritmos

As consultas aos k-vizinhos mais pr´oximos estendidas com condi¸c˜oes demandam encon- trar, dentre os k-conjuntos restritos pela condi¸c˜ao imposta e induzidos por dissimilaridade sobre a rela¸c˜ao de entrada, um conjunto que seja minimal. Entretanto, fazer a escolha das tuplas que comp˜oem a resposta a uma consulta ck-NN restrita por uma condi¸c˜ao

baseada em agrega¸c˜ao n˜ao ´e uma tarefa simples, pois nem sempre ´e trivial manter a lista de candidatos no decorrer do processamento das tuplas da rela¸c˜ao de entrada. As de- fini¸c˜oes 4.6, 4.10 e 4.12 estabelecem quais devem ser os resultados deck-NNq restritas por

condi¸c˜oes baseadas em agrega¸c˜ao considerando, respectivamente, a minimiza¸c˜ao da soma das distˆancias, a minimiza¸c˜ao da menor distˆancia e a minimiza¸c˜ao da maior distˆancia. Note-se que as ck-NNq restritas por condi¸c˜oes baseadas em agrega¸c˜ao por contagem,

por contagem de distintos, por m´ınimo ou por m´aximo podem escolher qualquer uma das op¸c˜oes de minimiza¸c˜ao, pois s˜ao indiferentes a esse fator. A partir dessas defini¸c˜oes ´e poss´ıvel definir algoritmos que respondam ack-NNq restritas por esses tipos de condi¸c˜oes,

conforme segue:

1. identifique os k-conjuntos induzidos por dissimilaridade sobre a rela¸c˜ao de entrada que satisfa¸cam a condi¸c˜ao apresentada;

2. retorne um desses conjuntos que seja minimal, considerando a op¸c˜ao de minimiza¸c˜ao escolhida.

Embora esta solu¸c˜ao retorne solu¸c˜oes exatas para as consultas, sua complexi- dade ´e muito alta. Dado que a cardinalidade da rela¸c˜ao de entrada ´e n, h´a Cn,k = n!/(k! · (n − k)!) combina¸c˜oes de k elementos poss´ıveis. Este ´e o n´umero de k-

conjuntos induzidos por dissimilaridade sobre a rela¸c˜ao de entrada. O teste da condi¸c˜ao baseada em agrega¸c˜ao sobre um k-conjunto induzido por dissimilaridade tem custo O(k). O custo de calcular a dissimilaridade total de um conjunto (Defini¸c˜ao 4.3), necess´ario para construir a resposta com base na minimiza¸c˜ao por soma das distˆancias, tamb´em ´e O(k). Da mesma forma, verificar se um k-conjunto ´e maior por menor/maior distˆancia que outro (defini¸c˜oes 4.9 e 4.11), necess´ario para as op¸c˜oes de minimiza¸c˜ao da menor distˆancia ou de minimiza¸c˜ao da maior distˆancia, tem um custo O(k). Portanto, a complexidade desses algoritmos ´e O(nk), considerando que, em geral, n ≫ k em consultas

ck-NN.

Contudo, para as consultasck-NN restritas por condi¸c˜oes baseadas em tupla, ´e poss´ıvel

encontrar uma solu¸c˜ao eficiente fazendo uma adapta¸c˜ao simples no algoritmo de execu¸c˜ao de consultas k-NN convencionais. Observe-se que a resposta de uma ck-NNq restrita

por uma condi¸c˜ao baseada em tupla pode ser dada por uma k-NNq convencional sobre as tuplas que satisfazem a condi¸c˜ao imposta. Desta forma, a adapta¸c˜ao proposta consiste em fazer uma verifica¸c˜ao dupla sobre as tuplas da rela¸c˜ao de entrada. A primeira verifica¸c˜ao testa se a tupla ´e candidata `a resposta de acordo com o crit´erio de distˆancia, isto ´e, se a tupla corrente ´e mais pr´oxima do elemento de referˆencia do que o k-´esimo elemento do conjunto resposta. Se a tupla for candidata `a resposta de acordo com o crit´erio de distˆancia, a segunda verifica¸c˜ao testa se a tupla satisfaz a condi¸c˜ao imposta. Caso afirmativo, o k-´esimo elemento ´e descartado do resultado, se for o caso, e a tupla corrente ´e inserida no resultado. Considerando-se que a verifica¸c˜ao da condi¸c˜ao baseada em tupla ´e realizada em tempo constante, a complexidade desse algoritmo, no pior caso, ´e:

• O(n), em termos de c´alculos de distˆancia; • O(k), em termos de consumo de mem´oria;

onde n ´e o tamanho da rela¸c˜ao de entrada e k o n´umero de vizinhos. Esta solu¸c˜ao ´e utilizada no Algoritmo 4.1 (Se¸c˜ao 4.4.2), desenvolvido neste trabalho para responder `a ck-NNq restritas por t-conds. Embora a ordem das verifica¸c˜oes seja irrelevante para

a resposta, optou-se por fazer a verifica¸c˜ao do crit´erio de distˆancia primeiro para tirar proveito da organiza¸c˜ao dos m´etodos de acesso m´etricos para reduzir o espa¸co de busca nas varia¸c˜oes do algoritmo implementadas sobre essas estruturas, descritas na Se¸c˜ao 4.4.4. Neste trabalho tamb´em foram desenvolvidas solu¸c˜oes eficientes para resolu¸c˜ao de

ck-NNq com condi¸c˜oes baseadas em agrega¸c˜ao por contagem, que possuem uma l´ogica

mais elaborada do que a l´ogica do algoritmo proposto para ck-NNq com condi¸c˜oes ba-

seadas em tupla, mas com complexidades semelhantes. Os algoritmos propostos para a execu¸c˜ao de ck-NNq com c-aconds ou com cd-aconds s˜ao apresentados na Se¸c˜ao 4.4.3.

Estes algoritmos utilizam uma estrutura de dados auxiliar para armazenar o resultado parcial da consulta e controlar o descarte de candidatos. A estrutura utilizada ´e uma combina¸c˜ao de trˆes listas de prioridade ordenadas segundo a distˆancia do elemento arma- zenado ao(s) elemento(s) de consulta:

satisfyList: cont´em os elementos do resultado que satisfazem a condi¸c˜ao de filtragem (tcond) da fun¸c˜ao de agrega¸c˜ao e est˜ao sendo contados para satisfazer a condi¸c˜ao baseada em agrega¸c˜ao definida na consulta;

notSatisfyList: cont´em os elementos que fazem parte do resultado, mas que n˜ao satis- fazem a condi¸c˜ao de filtragem;

resultList: cont´em todos os elementos do resultado, contados ou n˜ao na verifica¸c˜ao da condi¸c˜ao definida.

Esta organiza¸c˜ao permite realizar eficientemente o descarte de candidatos ao encontrar-se elementos mais pr´oximos ao(s) elemento(s) de consulta, que satisfazem ou n˜ao a condi¸c˜ao de filtragem, garantindo que ap´os o descarte o resultado parcial como um todo satisfa¸ca a condi¸c˜ao baseada em agrega¸c˜ao por contagem. Cada elemento armaze- nado ´e compartilhado entre duas listas de prioridade: a lista resultList, contendo todos os elementos, e a lista em que o elemento ´e categorizado (satisfyList ou notSatisfyList). Em algumas situa¸c˜oes, um elemento considerado para garantir a satisfa¸c˜ao da condi¸c˜ao indicada na consulta pode passar a n˜ao ser mais considerado para garantir a condi¸c˜ao. Nestes casos, o elemento pode ser descartado do resultado, ou ent˜ao mantido, caso seja pr´oximo o suficiente do(s) elemento(s) de consulta, mas agora como um elemento que n˜ao ´e considerado para satisfazer a condi¸c˜ao da consulta.

Observe-se que as consultasck-NN com condi¸c˜oes baseadas em agrega¸c˜ao por m´ınimo e

por m´aximo mais frequentes podem ser transformadas emck-NNq com condi¸c˜oes baseadas

as regras 4.14, 4.15, 4.16 e 4.17, apresentadas na Se¸c˜ao 4.3.4. Desta forma, essas con- sultas tamb´em podem ser resolvidas de forma eficiente, fazendo chamadas aos algoritmos propostos para ck-NN com condi¸c˜oes baseadas em tupla ou com condi¸c˜oes baseadas em

contagem.

As subse¸c˜oes a seguir apresentam os algoritmos desenvolvidos durante o projeto de doutoramento. Os algoritmos propostos consideram que cada dado complexo ´e armaze- nado em uma tabela contendo o(s) vetor(es) de caracter´ısticas e outros atributos descri- tivos a respeito do dado complexo. Por simplicidade, os algoritmos consideram que a consulta possui apenas um elemento de referˆencia.