Inclusão de Consultas por Similaridade em SGBDs: Teoria e Prática

Tamanho: px
Começar a partir da página:

Download "Inclusão de Consultas por Similaridade em SGBDs: Teoria e Prática"

Transcrição

1 Minicurso 2 Inclusão de Consultas por Similaridade em SGBDs: Teoria e Prática Daniel dos Santos Kaster 1 and Caetano Traina Junior 2 1 Departamento de Computação (DC) Universidade Estadual de Londrina (UEL) {dskaster@uel.br} 2 Instituto de Ciências Matemáticas e de Computação (ICMC) Universidade de São Paulo (USP) {caetano@icmc.usp.br} Abstract The amount of complex data (images, videos, temporal series and others) is growing fast. Complex data are suitable to be retrieved by similarity, which means to define queries according to a given similarity criterion. Existing DBMSs do not support similarity queries, demanding implementing new resources to be employed in applications over complex data. This chapter presents the main similarity queries found in the literature, as well as the most widely used algorithms and indexing structures to execute them, and case studies of implementing support for the inclusion of similarity queries in off-the-shelf DBMSs. Resumo A quantidade de dados complexos (imagens, vídeos, séries temporais e outros) tem crescido rapidamente. Dados complexos são adequados para serem recuperados por similaridade, o que significa definir consultas de acordo com um dado critério de similaridade. Os SGBDs existentes não possuem suporte a consultas por similaridade, demandando a implementação de novos recursos para que possam ser usados em aplicações sobre dados complexos. Este capítulo apresenta as principais consultas por similaridade encontradas na literatura, bem como os algoritmos e estruturas de indexação mais difundidos para sua execução, e estudos de caso de implementação de recursos para a inclusão de consultas por similaridade em SGBDs de mercado. 31

2 1.1. Introdução Dados complexos, tais como imagens, vídeos, séries temporais e outros, trazem uma demanda inerente por recursos de recuperação de dados que os Sistemas de Gerenciamento de Bancos de Dados (SGBDs) tradicionalmente não provêm. Isto se deve, principalmente, ao fato de que a maioria dos domínios de dados complexos não definem uma relação de ordem total entre elementos. Assim, os operadores de comparação relacionais ( <,, > e ) não podem ser usados e os operadores = e são praticamente inúteis. Para dados complexos é mais natural realizar consultas por similaridade, definindo relações de similaridade entre pares de elementos, que consideram as características particulares de cada domínio de aplicação. Estas consultas retornam os elementos do conjunto de dados que atendem a certos critérios de similaridade em relação a um ou mais elementos de referência, também chamados elementos de consulta. A maioria das alternativas desenvolvidas incluir suporte à consultas por similaridade em SGBDs são fracamente acopladas ao motor dos gerenciadores, o que limita o aproveitamento dos recursos oferecidos nativamente pelos SGBDs. Uma alternativa mais eficiente consiste em embutir as funcionalidades necessárias à recuperação por similaridade em um subsistema especializado acessível ao processador de consultas do SGBD. Este subsistema especializado capacita o SGBD a executar consultas por similaridade integradas às demais operações fornecidas. Outra alternativa consiste em estender a linguagem SQL para incluir operações por similaridade e implementar mecanismos que suportem as extensões propostas. Este capítulo introduz o conceito de avaliação de similaridade entre dados complexos (Seção 1.2) e apresenta os principais tipos de consultas por similaridade (Seção 1.3), suas representações algébricas (Seção 1.4) e os algoritmos e estruturas de indexação mais difundidos para executá-las (Seção 1.5). Apresenta, também, aspectos de implementação para o desenvolvimento e uso de índices para dados complexos (Seção 1.6) e estudos de caso de inclusão de consultas por similaridade em SGBDs (seções 1.7 e 1.8). Na conclusão do capítulo (Seção 1.9) são apresentados alguns tópicos de pesquisa em aberto na área Avaliação de Similaridade A avaliação de similaridade compreende uma sequência de tarefas computacionais que resultam em um valor que quantifica o quão similares dois dados complexos são. Dados complexos em geral podem ser modelados por meio de conjuntos de atributos que sumarizam o seu conteúdo. Esses conjuntos de atributos são denominados na literatura como vetores de características. A similaridade entre dois vetores de características é calculada por meio de uma função matemática. Em geral, a avaliação de similaridade utiliza funções de distância, que calculam a dissimilaridade entre dois vetores de características. Ou seja, quanto menor a distância, maior a similaridade entre os objetos comparados, sendo que uma distância igual a zero significa identidade ou total similaridade. Existe uma grande variedade de distâncias relatadas na literatura [Wilson and Martinez, 1997], sendo que as mais utilizadas são as funções da família Minkowski (L p ). Há autores que defendem a idéia de que a mente humana define um espaço de similaridade, onde os conceitos são organizados segundo suas relações de similari- 32

3 dade [Gauker, 2007]. Seguindo esta idéia, cada par S,δ, onde S é um domínio definido por um vetor de características e δ é uma função de distância definida sobre este domínio, é definido como uma instância do espaço de similaridade e o conjunto de todas instâncias de espaço de similaridade possíveis formam uma abstração do espaço de similaridade humano [Barioni et al., 2011]. Nesta abstração do espaço de similaridade, a captura da interpretação humana é modelada pela escolha de uma instância do espaço de similaridade que defina da maneira mais próxima possível à interpretação do usuário. Esta instância ideal é referenciada na literatura como espaço (de similaridade) semântico [He et al., 2002]. Há inúmeras áreas de pesquisa e técnicas envolvidas no processo de aproximação do espaço de similaridade semântico, como mostra a Figura 1.1. Esta ilustração não tem o intuito de ser exaustiva, mas de incluir os conceitos mais comuns em torno da avaliação de similaridade. Uma instância do espaço de similaridade é formada por um domínio definido por um vetor de características (após todos os procedimentos de pré-processamento, extração e pós-processamento) e uma função de distância (definida pela função de cálculo e por todos os valores de parâmetros utilizados). Portanto, qualquer modificação realizada em um destes componentes gera uma nova instância do espaço de similaridade. Transformação de Características Distância Realimentação de Relevância Métodos Algébricos e Estatísticos Processamento de Sinais Metad Figura 1.1. Espaço de similaridade e técnicas envolvidas na definição de sua semântica. A Figura 1.1 destaca que alguns conceitos afetam diretamente os componentes de uma instância do espaço de similaridade. A extração de características é o passo elementar de processamento de dados complexos e multimídia para definir o componente vetor de características, pois para muitos desses tipos de dados, a sua representação original é limitada para descrever o seu conteúdo. Por exemplo, imagens são normalmente representadas por seus padrões de cor, textura e forma, cujas características podem ser extraídas da imagem como um todo (escopo global) ou de regiões segmentadas da imagem (escopo local) [Datta et al., 2008]. O processo de seleção de características consiste em obter um subconjunto do vetor de características original, incluindo as características que são relevantes para discriminar os objetos. Em geral, os métodos de seleção de ca- 33

4 racterísticas são fortemente baseados em estatística e em algoritmos de aprendizado de máquina [Guyon and Elisseeff, 2003, Yuan et al., 2011]. A transformação de características tem por objetivo criar novas dimensões no espaço de características, combinando e transformando as dimensões definidas pelas características originais. Os métodos de transformação mais utilizados são a análise de componentes principais (Principal Component Analysis PCA) e a análise discriminante linear (Linear Discriminant Analysis LDA) [Blanken et al., 2007]. Todas essas tarefas constroem ou modificam o vetor de características, definindo o domínio do conjunto de dados. De forma semelhante, a função de distância pode ser modificada aplicando-se técnicas de ponderação, visando produzir instâncias do espaço de similaridade que sejam mais próximas da expectativa do usuário. A ponderação de características atribui um peso específico para cada dimensão do vetor de características, para destacar ou reduzir a influência de cada uma delas de forma a aprimorar a qualidade da avaliação de similaridade [Lee and Street, 2002]. A ponderação de distâncias parciais é aplicada quando um dado complexo é representado por vários vetores de características distintos e a avaliação de dissimilaridade agrega as dissimilaridades parciais entre pares de vetores de características em uma dissimilaridade global, visando encontrar pesos para as distâncias parciais de forma que nenhuma delas seja subestimada ou superestimada na avaliação global de similaridade [Barrios and Bustos, 2011, Bueno et al., 2009]. A figura também mostra que em um nível mais alto estão as informações externas, técnicas e algoritmos que são utilizados para para definir como serão implementados os conceitos que afetam diretamente os componentes de uma instância do espaço de similaridade (extração, seleção e transformação de características e ponderação de distâncias). Neste nível encontram-se algoritmos de processamento de dados complexos, técnicas de descoberta de conhecimento, realimentação de relevância, aprendizado de máquina e outros Consultas por Similaridade Os SGBDs oferecem recursos eficazes para realizar buscas sobre os dados usando relações de igualdade e de ordem total existentes nos dados armazenados (tais como números e textos curtos). Porém, para dados multimídia e outros dados complexos, as buscas por igualdade ou por ordem não se aplicam, ou simplesmente, são de pouca serventia. Para esses tipos de dados é mais relevante fazer uso de consultas por similaridade, que consistem em procurar por elementos em um conjunto que, segundo algum critério de similaridade, sejam mais parecidos ou mais distintos com/de um determinado elemento. Existem dois tipos básicos de consultas por similaridade: a consulta por abrangência e a consulta aos k-vizinhos mais próximos [Böhm et al., 2001], definidas a seguir. Consulta por abrangência (Range query Rq): retorna todos os elementos dissimilares de um elemento de consulta até no máximo um certo limiar. Formalmente, seja S um domínio de dados, S S um conjunto de elementos, s q S um elemento de consulta, δ uma função de distância definida sobre elementos de S e ξ um limiar de dissimilaridade, uma Rq retorna os elementos s i S tais que δ(s q,s i ) ξ. Existem duas variações básicas para a consulta por abrangência: a consulta pontual e a consulta por abrangência reversa. A consulta pontual (Point query Pq) é uma consulta por abrangência com ξ = 0, cujo objetivo é identificar se o elemento de consulta está armazenado no banco de dados. A consulta por abrangência reversa 34

5 (Reversed Range query Rq 1 ), é uma busca por abrangência que procura pelos elementos fora da área de abrangência, isto é, a resposta é formada pelos elementos s i S tal que δ(s q,s i ) > ξ. Consulta aos k-vizinhos mais próximos (k-nearest Neighbors query k-nnq): retorna os k elementos mais similares ao elemento de consulta s q, isto é, os k elementos s i S com menor valor para δ(s i,s q ). Se houver dois ou mais elementos situados à mesma distância do elemento de referência, que podem ser escolhidos como o k-ésimo vizinho mais próximo, pode-se escolher um desses elementos arbitrariamente ou pode-se selecionar todos os elementos empatados com o k-ésimo, retornando mais do que k elementos. Uma variação desta consulta é a consulta aos k-vizinhos mais distantes (k-farthest Neighbors query k-fnq), que retorna os k elementos mais dissimilares ao elemento de consulta, de acordo com a função de distância indicada. A Figura 1.2(a) mostra uma representação visual de uma Rq, onde os elementos de S localizados na bola centrada em s q e com raio ξ compõem a resposta para a consulta, e a Figura 1.2(b) mostra a representação de uma k-nnq, com k = 4 (na figura, s q não pertence ao conjunto de dados S) 1. s q s 4 s 1 s 3 s q s 2 (a) Figura 1.2. Representação da consulta por abrangência (a) e da consulta aos k-vizinhos mais próximos, com k = 4 (b). (b) Uma extensão às consultas por abrangência e aos k-vizinhos mais próximos são as consultas em que há mais de um elemento de consulta. Neste caso, há algumas interpretações possíveis para a busca: retorne os elementos mais próximos ou que estejam no raio de abrangência de algum dos elementos de consulta; retorne os elementos mais próximos ou que estejam no raio de abrangência de todos os elementos de consulta; ou retorne os elementos mais próximos ou que estejam no raio de abrangência segundo uma função que agrega todos os elementos de consulta. 1 Neste texto, sem perda de generalidade, as figuras que apresentam elementos no espaço são apresentadas no espaço R 2 e usando a distância Euclideana (L 2 ) para facilitar o entendimento. 35

6 A primeira alternativa corresponde a uma união de várias buscas por similaridade sobre o conjunto de entrada, uma para cada elemento de consulta, e a segunda alternativa corresponde a uma interseção dessas buscas. A terceira opção, por outro lado, referese às consultas por similaridade agregada, cujo objetivo é avaliar a similaridade de cada elemento armazenado com relação a todos os elementos de consulta, segundo uma função aplicada sobre estas similaridades [Papadias et al., 2005]. Neste capítulo, esta função é denominada função agregadora de distâncias ( ). Por exemplo, Razente et al. [2008] definem uma família de funções agregadoras de distâncias para responder a consultas por similaridade agregada. Dado um domínio S, um conjunto de elementos S S, um elemento s S, um conjunto de elementos de consulta Q S, essa família de funções agregadoras de distâncias é dada por: d g (s,q) = g (δ(s,s q ) g w q ) (1) s q Q onde δ é uma função de distância definida sobre S, cada w q é um peso correspondente a cada elemento de consulta s q e g R é o fator de agregação (grip factor), sendo que diferentes valores para g levam a interpretações distintas sobre como a agregação é realizada. A noção de função agregadora de distâncias permite definir as consultas a seguir. Consulta por abrangência agregada (Aggregated Range query ARq): dado um conjunto S S, um conjunto de elementos de consulta Q S, Q 1, uma função de distância δ definida sobre S, uma função agregadora de distâncias δ e um limiar de dissimilaridade ξ, a consulta ARq retorna os elementos cujo valor da função seja menor ou igual a ξ. Variações da consulta por abrangência agregada são a consulta pontual agregada (Aggregated Point query APq) e a consulta por abrangência reversa agregada (Aggregated Reversed Range query ARq 1 ). Consulta aos k-vizinhos mais próximos agregados (Aggregated k-nearest Neighbor query k-annq): dado um conjunto S S, um conjunto de elementos de consulta Q S, Q 1, uma função de distância δ definida sobre S, uma função agregadora de distâncias δ e um inteiro k 1, a consulta k-annq retorna os k elementos mais similares aos elementos em Q, de acordo com a função. Uma variação é a consulta aos k-vizinhos mais distantes agregados (Aggregated k-farthest Neighbor query k-afnq). Outra categoria de consultas por similaridade são as junções por similaridade [Böhm and Krebs, 2002], que atuam sobre dois conjuntos de dados complexos e são apresentadas a seguir. Junção por abrangência (Range join Rq ): dados dois conjuntos R S e S S, uma função de distância δ definida sobre S e um limiar de abrangência ξ, esta consulta recupera os pares de elementos r i R e s j S distantes no máximo ξ entre si. Junção pelos k-vizinhos mais próximos (k-nn join knn ): dados dois conjuntos R S e S S, uma função de distância δ definida sobre S e um número inteiro 36

7 k 1, esta consulta retorna os pares de elementos r i R e s j S de maneira que cada elemento de R apareça no resultado concatenado com cada um dos seus k-vizinhos mais próximos em S. Observe-se que a esta operação não é comutativa, ou seja, R 1 knn R 2 R 2 knn R 1. Junção dos k-pares de vizinhos mais próximos (k-closest Neighbor join kcn ): dados dois conjuntos R S e S S, uma função de distância δ sobre S e um número inteiro k 1, esta consulta retorna os k pares de elementos r i R e s i S mais próximos entre si. A Figura 1.3 ilustra esses três tipos de junção por similaridade. Nessa figura, os círculos pretos representam elementos do conjunto R e os de cor cinza representam elementos do conjunto S. (a) (b) (c) Figura 1.3. Operações de junção por similaridade. (a) Junção por abrangência. (b) Junção pelos k-vizinhos mais próximos, com k = 2. (c) Junção dos k-pares de vizinhos mais próximos, com k = Representação Algébrica de Consultas por Similaridade Visto que dados complexos demandam um tratamento adequado em termos de representação e otimização de consultas, algumas abordagens algébricas para consultas por similaridade têm sido propostas na literatura. Os trabalhos voltados a incluir a noção de similaridade no modelo relacional concentram-se em três linhas principais. A primeira linha entende a noção de similaridade como imprecisão, ou grau de pertinência a um conjunto, e define a estrutura da álgebra utilizando conceitos da lógica nebulosa (fuzzy) [Penzo, 2005]. A segunda linha procura estender o modelo relacional através da introdução do conceito de relações ordenadas (ranked relations), cujas tuplas são classificadas segundo um critério de ranking definido pelo usuário [Belohlávek and Vychodil, 2010, Li et al., 2005]. A terceira linha de trabalhos visando incluir similaridade no modelo relacional considera apenas acrescentar operadores por similaridade à álgebra relacional, sem modificar a estrutura das relações[barioni et al., 2011, Ferreira et al., 2009, Silva et al., 2009, Traina Jr. et al., 2006]. Esta seção apresenta as definições das consultas por similaridade seguindo as definições do modelo relacional enriquecido com operadores por similaridade. A notação utilizada neste capítulo é derivada dos trabalhos de Barioni et al. [2011] e Ferreira et al. [2009]. 37

8 Seleções por Similaridade As consultas por abrangência, aos vizinhos mais próximos e por similaridade agregada têm o comportamento semelhante ao da seleção relacional. Isto é, essas consultas retornam os elementos de um conjunto de entrada, que podem ser tuplas de uma relação, que satisfazem um determinado critério de similaridade, que pode ser definido por um predicado de seleção. Estas operações são classificadas como seleções por similaridade e são denotadas por dois operadores de consulta, ˆσ e σ, utilizados, respectivamente, para representar consultas por similaridade por abrangência (Rq, ARq e variações) e por vizinhança (k-nnq, k-annq e variações). A expressão condicional aceita pelos operadores de consulta ˆσ e σ tem a forma S j θ Q, onde S j é um atributo da relação de entrada, cujo domínio é um domínio de dados complexos S, θ é um operador por similaridade e Q S é um conjunto de elementos de consulta. O operador por similaridade para o operador de consulta ˆσ tem a forma Rq[δ,,ξ ], onde δ é uma função de distância, é uma função agregadora de distâncias δ e ξ é o limiar de dissimilaridade. Se deseja-se representar uma consulta por abrangência não agregada, omite-se a função agregadora de distâncias e Q tem que ser um conjunto unitário, podendo ser denotado na expressão condicional como {s q } ou, simplesmente, s q. Desta forma, as expressões a seguir mostram como são representadas (a) uma consulta por abrangência e (b) uma consulta por abrangência agregada: a) ˆσ S j Rq[δ,ξ ] s q (R) b) ˆσ S j Rq[δ,,ξ ] Q(R) produzindo, respectivamente, uma relação R a que contém as tuplas t i R tais que δ(t i.s j,s q ) ξ, e uma relação R b que contém as tuplas t m R tais que (t m.s j,q) ξ, onde t i.s j e t m.s j são os valores do atributo S j nas tuplas t i e t m. As consultas pontuais (agregadas) são representadas de forma semelhante, mas com ξ = 0, e as consultas por abrangência reversa (agregada) também, mas usando o operador por similaridade Rq 1. O operador por similaridade para o operador de consulta σ tem a forma knn[δ,,k], onde δ é uma função de distância, é uma função agregadora de distâncias δ e k 1 é o número de vizinhos 2. Se deseja-se representar consultas aos vizinhos mais próximos/distantes não agregados, omite-se e Q tem que ser unitário. As expressões a seguir representam: (a) uma consulta aos k-vizinhos mais próximos e (b) uma consulta aos k-vizinhos mais próximos agregados: a) σ S j knn[δ,k] s q (R) b) σ S j knn[δ,,k] Q(R) produzindo, respectivamente, uma relação R a que contém as tuplas t i R que são os vizinhos mais próximos de s q de acordo com o valor de δ(t i.s j,s q ) e uma relação R b que contém as tuplas t m R que são os vizinhos mais próximos de Q de acordo com (t m.s j,q). As consultas aos k-vizinhos mais distantes (agregados) são representadas de forma semelhante, mas utilizando o operador por similaridade kfn. 2 Uma extensão a esse operador por similaridade que aceita uma condição adicional à busca foi proposta em [Kaster, 2012]. Este operador estendido, denominado de operador de consulta aos k-vizinhos mais próximos estendida com condições (condition-extended k-nn query c k-nnq) possui um poder de expressividade maior que o operador knn, permitindo representar novas variações de consultas por similaridade. 38

9 Junções por Similaridade As junções por similaridade são representadas por operadores de consulta estendidos, ˆ e, cujas condições de junção são baseadas em operadores por similaridade. As junções por abrangência ( Rq ), pelos k-vizinhos mais próximos ( knn ) e dos k-pares de vizinhos mais próximos ( kcn ) utilizam, respectivamente, os operadores Rq, knn e kcn na condição de junção. Sejam R 1 e R 2 duas relações, sendo que S i e S j são atributos de um mesmo domínio de dados complexos S e pertencem, respectivamente, a R 1 e R 2, e seja δ uma função de distância definida sobre S. As junções por similaridade são representadas algebricamente conforme segue: a) R 1 ˆ Si Rq[δ,ξ ] S j R 2 b) R 1 Si knn[δ,k] S j R 2 c) R 1 Si kcn[δ,k] S j R 2 sendo (a) uma Rq, (b) uma knn e (c) uma kcn. Estas consultas produzem relações cujas tuplas são a concatenação das tuplas t m R 1 e t n R 2 que satisfazem o critério indicado pelo respectivo operador por similaridade usado na condição de junção Algoritmos para Consultas por Similaridade em Métodos de Acesso Métricos Um aspecto fundamental dos algoritmos para consultas por similaridade está relacionado à utilização de um Método de Acesso (MA) apropriado. A maioria dos SGBDs fornecem estruturas de indexação para dados tradicionais, como variantes da B-Tree e estruturas de hashing. Contudo, essas estruturas não são adequadas para a execução de consultas por similaridade. As subseções a seguir apresentam os principais tipos de MA usados para consultas por similaridade e os algoritmos para resolver as consultas Rq e k-nnq sobre árvores métricas, que são os MAs que têm se mostrado mais eficientes para a indexação de dados complexos. A Slim-tree [Traina Jr. et al., 2002] será usada como exemplo para a descrição dos algoritmos Métodos de Acesso para Consultas por Similaridade Os Métodos de Acesso Espaciais (MAEs), também conhecidos como Métodos de Acesso Multidimensionais, foram propostos para indexar dados espaciais. Exemplos representativos de MAEs são a k-d-b-tree [Robinson, 1981] e a R-tree [Guttman, 1984] e suas variantes, tais como a R*-tree [Beckmann et al., 1990]. Alguns SGBDs comerciais já implementam variantes da R-tree, tais como o Oracle Database, o IBM Informix Dynamic Server e o PostgreSQL, utilizado-a majoritariamente em aplicações de geoprocessamento. MAEs também podem ser utilizados para indexar outros tipos de dados complexos, tais como dados multimídia [Böhm et al., 2001]. Neste caso, um vetor de características com e atributos é visto como um ponto no espaço e-dimensional definido pelas características e as consultas são agilizadas através da aplicação de propriedades geométricas na construção do MAE e na delimitação da área de consulta. Contudo, quando as assinaturas dos elementos multimídia têm muitas características, os MAEs passam a não ser eficientes. Eles degradam rapidamente com o aumento da dimensionalidade dos dados, tornando-se inviáveis para dimensionalidades maiores que uma dezena. Para dados de alta dimensionalidade ou adimensionais (sem dimensão fixa) foram propostos os Métodos de Acesso Métricos (MAMs). A abordagem dos MAMs assume 39

10 que os objetos estão em um espaço métrico, importando apenas as suas relações de similaridade. Um espaço métrico é formalmente definido como um par M = S,δ, onde S é um domínio de dados e δ é uma métrica, isto é, uma função δ : S S R + que expressa a distância entre elementos de S e que satisfaz as seguintes propriedades, para quaisquer s 1,s 2,s 3 S: (i) identidade: δ(s 1,s 1 ) = 0; (ii) simetria: δ(s 1,s 2 ) = δ(s 2,s 1 ); (iii) não negatividade: 0 < δ(s 1,s 2 ) < se s 1 s 2 ; e (iv) desigualdade triangular: δ(s 1,s 3 ) δ(s 1,s 2 ) + δ(s 2,s 3 ). As distâncias da família Minkowski, com p 1 são métricas, portanto espaços vetoriais utilizando qualquer uma destas distâncias formam espaços métricos. Outros exemplos de métricas são a distância de Mahalanobis [Mahalanobis, 1936] e a distância Canberra [Kokare et al., 2003]. Os MAMs podem ser utilizados para indexar praticamente qualquer tipo de dado, sendo necessária e suficiente a definição de uma métrica adequada. Vários trabalhos têm apresentado propostas de MAMs na literatura, incluindo estruturas estáticas e dinâmicas. Dentre os MAMs estáticos, que são aqueles que não podem sofrer novas atualizações/remoções sem degenerar as estruturas criadas, pode-se citar a VP-tree (Vantage Point tree) [Yianilos, 1993] e a MVP-tree (Multi-Vantage Point tree) [Bozkaya and Özsoyoglu, 1997]. O primeiro MAM dinâmico desenvolvido foi a M-tree [Ciaccia et al., 1997], que pode ser visto como uma adaptação do MAE R-tree para indexar dados em domínios métricos. A M-tree é uma árvore balanceada com crescimento bottom-up e com dois tipos de nós (internos e folha), que permite a inserção de elementos a qualquer momento, mantendo-se sempre balanceada, sem a necessidade de reorganizações periódicas. A Slim-tree [Traina Jr. et al., 2002] é uma evolução da M-tree, que traz como melhorias a avaliação e minimização do grau de sobreposição entre seus nós e um novo algoritmo de split, baseado na árvore de cobertura minimal (Minimal Spanning Tree MST). Outros exemplos de MAMs dinâmicos são a DBM-tree (Density-Based Metric tree) [Vieira et al., 2006] e os índices da família Omni [Traina Jr. et al., 2007] Estrutura da Slim-tree Para facilitar o entendimento dos algoritmos, a estrutura da Slim-tree será descrita resumidamente. Em uma Slim-tree, os elementos são agrupados em disco em páginas de tamanho fixo, cada página correspondendo a um nó da árvore. Os elementos são armazenados nas folhas, organizados em uma estrutura hierárquica que utiliza um elemento representante como centro de uma região de cobertura dos elementos de uma subárvore, delimitada por um raio máximo de cobertura. Para reduzir os cálculos de distância durante as buscas, as distâncias entre cada elemento de um nó e o seu respectivo representante são calculadas no momento da inserção e armazenadas na árvore. Existem dois tipos de nós na Slim-tree, os nós internos (index-nodes) e os nós folha (leaf-nodes). A estrutura de um leaf-node, onde são armazenados todos os elementos, é a seguinte: leaf-node [vetor de OId i,d(s i,s rep ),s i ] onde OId i é o identificador do elemento s i e d(s i,s rep ) é a distância entre o elemento s i e s rep, que é o representante desse nó. A estrutura de um index-node, é a seguinte: index-node [vetor de s i,r i,d(s i,s rep ),Ptr(T si ),#Ent(Ptr(T si )) ] 40

11 onde s i armazena o elemento representante da subárvore apontada por Ptr(T si ), r i é o raio de cobertura do nó (distância entre o representante e o elemento mais distante ao representante nesse nó), d(s i,s rep ) é a distância entre s i e o representante desse nó, e #Ent(Ptr(T si )) armazena o número de entradas da subárvore apontada por Ptr(T si ). A Figura 1.4 ilustra a disposição de uma Slim-tree com capacidade máxima de 3 elementos por nó. Os círculos brancos representam nós folha, e os de cor cinza nós índice. Os elementos representantes de cada nó são mostrados em preto, e os demais elementos indexados em cor cinza. s 13 s 14 s 6 s 11 s 12 s 15 s 8 s 9 s 10 s 7 s 1 s 17 s 5 s 16 s 2 s 3 s 4 s 1 s 8 s 4 s 1 s 2 s 8 s 13 s 4 s 11 s 1 s 6 s 7 s 2 s 16 s 17 s 8 s 10 s 9 s 13 s 15 s 14 s 4 s 3 s 5 s 11 s 12 Figura 1.4. Representação visual de uma Slim-tree e sua estrutura lógica. A capacidade máxima dos nós é igual a Algoritmo para Consulta por Abrangência Os algoritmos de consulta em estruturas hierárquicas em geral utilizam a estratégia branch-and-bound, onde a busca começa pela raiz da estrutura, e em cada passo utilizamse propriedades do domínio de dados em questão para determinar quais nós devem ser examinados e quais podem ser descartados. Para dados imersos em um espaço métrico, a desigualdade triangular é a principal propriedade utilizada. Na Slim-tree, ao visitar nós índice, a desigualdade triangular permite descartar subárvores inteiras se não houver sobreposição entre a região de consulta (bola centrada no elemento de consulta s q com raio ξ ) e a região de cobertura da subárvore (bola centrada no elemento representativo do nó i e o raio de cobertura r i ), como ilustra a Figura 1.5. Isto é, a subárvore enraizada no elemento s i pode ser descartada sem a necessidade calcular-se a distância entre s i e s q se a expressão (a) a seguir for válida, ou pode ser descartada após calcular-se δ(s q,s i ) se a expressão (b) for válida: a) δ(s q,s rep ) δ(s rep,s i ) > ξ + r i b) δ(s q,s i ) > ξ + r i onde ξ é o limiar de dissimilaridade da consulta. Ressalte-se que os valores δ(s rep,s i ) não 41

12 são calculados durante as buscas, pois foram armazenados na estrutura na inserção dos elementos. A desigualdade triangular também permite descartar elementos em nós folha sem calcular a sua distância ao elemento de consulta se a condição a seguir for satisfeita: δ(s q,s rep ) δ(s rep,s i ) > ξ R rep R + (s, s ) rep 1 1 s rep R 1 s 1 R 2 s 2 R + (s, s ) rep 2 2 s q Figura 1.5. Descarte de subárvores na Slim-tree. Ambas subárvores enraizadas em s 1 e s 2 podem ser podadas na busca, porém apenas s 1 é descartado sem a necessidade de se calcular sua distância ao elemento de consulta s q. O Algoritmo 1.1 apresenta a função de busca por abrangência na Slim-tree. Ao acessar um nó índice, o algoritmo procura descartar subárvores usando a propriedade de desigualdade triangular (linhas 5 e 7), visitando recursivamente as subárvores não descartadas (linha 8). Ao acessar um nó folha, o algoritmo primeiro tenta descartar elementos sem calcular a distância ao elemento de consulta e, em seguida, após calcular a distância (linhas 11 e 13). Os elementos não descartados fazem parte da resposta à consulta e são incluídos no resultado (linha 14) Algoritmo para Consulta aos k-vizinhos Mais Próximos Ao contrário do que ocorre na Rq, na k-nnq não existe um raio de consulta definido a princípio. Os algoritmos iniciam com um raio infinito, que é reduzido gradativamente durante o percurso da estrutura à medida que são encontrados elementos mais próximos ao elemento de consulta. Desta forma, a ordem de visitação dos nós pode interferir consideravelmente no desempenho do algoritmo. Os principais algoritmos para execução de consultas k-nn em métodos de acesso hierárquicos são os seguintes. Depth-First k-nn: percorre recursivamente a estrutura utilizando uma busca em profundidade para construir a resposta. Best-First k-nn [Roussopoulos et al., 1995]: define a ordem de visitação dos nós em uma k-nnq com base na distância mínima entre o elemento de consulta e as regiões cobertas pelos nós a serem visitados. A cada passo do algoritmo, o nó com a menor distância mínima é visitado, pois a subárvore enraizada neste elemento tem 42

13 Algoritmo 1.1: Consulta por abrangência na Slim-tree Entrada: Nó a ser visitado (node), elemento de consulta (s q ) e raio de abrangência (ξ ) Saída: Elementos cuja distância de s q seja menor ou igual a ξ início result ; se node é um nó índice então para cada s i em node faça se δ(s q,s rep ) δ(s rep,s i ) ξ + r i então distance δ(s q,s i ); se distance ξ + r i então retorna rangequery(ptr(t si ),s q,ξ ); senão para cada s i em node faça se δ(s q,s rep ) δ(s rep,s i ) ξ então distance δ(s q,s i ); se distance ξ então result.add (s i, distance); fim retorna result; a maior probabilidade de conter elementos mais próximos ao elemento de consulta dentre as subárvores não visitadas. Incremental k-nn [Hjaltason and Samet, 1999]: utiliza uma fila de prioridade global, contendo os nós a serem processados e também a resposta para a consulta (elementos), e define heurísticas que garantem que os k elementos mais próximos estão sempre no início da fila. Assim, para obter-se o k + 1-ésimo elemento não é necessário reiniciar a busca, bastando continuar percorrendo a fila de prioridade a partir do passo anterior, o que torna o algoritmo muito eficiente em termos de acessos a disco e cálculos de distância. O problema dessa técnica é o custo de gerenciamento da fila de prioridade, que tende a ser muito elevado, degenerando o seu desempenho. Uma outra estratégia de aprimoramento consiste em estimar um raio inicial para a k-nnq, de tal forma que a capacidade de poda do algoritmo seja potencializada. Por exemplo, Vieira et al. [2007] propuseram utilizar a dimensão de correlação fractal (D 2 ) do conjunto de dados para realizar essa estimativa, obtendo desempenho consideravelmente superior com relação à inicialização do raio dinâmico com. Finalmente, existem várias abordagens que utilizam heurísticas para responder a consultas aproximadas aos vizinhos mais próximos, tais como os trabalhos baseados na técnica LSH (Locality Sensitive Hashing) [Pan and Manocha, 2011]. O Algoritmo 1.2 apresenta a implementação do Best-First k-nn sobre a Slim-tree. Na Slim-tree, a distância mínima entre um elemento de consulta s q e uma subárvore T si, cuja abrangência é uma bola centrada em s i com raio r i, é dada por: mindist(s q,t si ) = max{δ(s q,s i ) r i,0} (2) 43

14 Algoritmo 1.2: Consulta aos k-vizinhos mais próximos na Slim-tree Entrada: Nó raiz (rootnode), elemento de consulta (s q ) e número de vizinhos (k) Saída: Os k-vizinhos mais próximos a s q 1 início 2 result ; 3 priorqueue ; 4 priorqueue.add(rootnode, ); 5 result.setmaxdistance( ); 6 enquanto priorqueue faça 7 node priorqueue.removemin(); 8 se node é um nó índice então 9 para cada s i em node faça 10 se δ(s q,s rep ) δ(s rep,s i ) result.getmaxdistance()+r i então 11 mindistance mindist(s q,t si ); 12 se mindistance result.getmaxdistance() então 13 priorqueue.add(ptr(t si ), mindistance); 14 minmaxdistance minmaxdist(s q,t si ); 15 se minmaxdistance < result.getmaxdistance() então 16 result.add(null, minmaxdistance); 17 se result.getnumelements() > k então 18 result.removelast(); 19 remova todas as entradas de priorqueue tais que 20 mindist(s q,t si ) > result.getmaxdistance(); senão /* node é um nó folha */ para cada s i em node faça se δ(s q,s rep ) δ(s rep,s i ) result.getmaxdistance() então distance δ(s q,s i ); se distance result.getmaxdistance() então result.add(s i, distance); se result.getnumelements() > k então result.removelast(); remova todas as entradas de priorqueue tais que mindist(s q,t si ) > result.getmaxdistance(); fim retorna result; uma vez que nenhum elemento em T si pode estar a uma distância de s q menor que δ(s q,s i ) r i. Esse valor é usado para organizar a fila de prioridade (priorqueue) do algoritmo, que é inicializada com o nó raiz (linha 4). O algoritmo usa também a estrutura de dados result para armazenar os vizinhos mais próximos encontrados e a sua distância do elemento de consulta. A distância entre s q e o k-ésimo elemento corrente é obtida por meio da função getmaxdistance() da estrutura result, que faz o papel do raio de busca dinâmico, que é inicializado como (linha 5). Enquanto houver elementos na fila de prioridade, o elemento com distância mínima estimada é retirado (linhas 6-7). Se o nó corrente é um nó índice, cada elemento do nó é avaliado e o algoritmo tenta podar a subárvore respectiva usando a desigualdade triangular (linhas 8-10). Se a subárvore não puder ser podada, o algoritmo calcula a distância mínima entre o elemento de consulta e 44

15 a subárvore T si, o que implica em calcular δ(s q,s i ), e verifica novamente se a subárvore pode ser descartada, com base neste valor (linhas 11-12). Caso a poda não seja possível, a subárvore é inserida na fila de prioridade, com base no valor mindist(s q,t si ), para ser processada posteriormente (linha 13). Em seguida, o algoritmo calcula a menor distância máxima entre s q e T si (linha 14), cujo valor é dado por: minmaxdist(s q,t si ) = δ(s q,s i ) + r i (3) que é um limite superior utilizado para ajustar o raio dinâmico de consulta enquanto o processo ainda está visitando nós índice, pois garantidamente existe um elemento s j na subárvore T si tal que δ(s j,s q ) minmaxdist(s q,t si ). Se esse valor for menor que a distância máxima do resultado atual, o algoritmo faz uma inserção nula com distância igual ao limite superior minmaxdist(s q,t si ) (linhas 15-16). Se esta inserção fizer com que o resultado tenha mais do que k elementos, o algoritmo remove o último elemento, atualizando o raio dinâmico, e remove as entradas da fila de prioridade cujas distâncias forem maiores que o novo raio de consulta, pois estas subárvores podem ser seguramente podadas neste momento (linhas 17-20). Ao acessar um nó folha, o algoritmo primeiro tenta descartar elementos sem calcular a distância ao elemento de consulta e, em seguida, após calcular a distância (linhas 23-25). Os elementos não descartados fazem parte da resposta à consulta e são incluídos no resultado (linha 26). Novamente, caso esta inserção faça com que o resultado extrapole k elementos, o algoritmo remove o último elemento e também as entradas da fila de prioridade cujas distâncias são maiores que o novo raio de consulta (linhas 27-30) Desenvolvimento e Uso de Índices com a Biblioteca Arboretum Esta seção introduz os fundamentos para o desenvolvimento e uso de índices para dados complexos em uma biblioteca de métodos de acesso. Existem várias bibliotecas de métodos de acesso, dentre as quais a Arboretum é uma opção muito interessante. A Arboretum 3 é uma biblioteca C++ de código aberto, desenvolvida pelo Grupo de Bases de Dados e Imagens do Instituto de Ciências Matemáticas e de Computação da USP (GBDI- ICMC-USP). A Arboretum implementa um conjunto de estruturas e mecanismos para o desenvolvimento de métodos de acesso. Ela é organizada em 3 camadas, como mostra a Figura 1.6. A Camada de Usuário define as classes que definem os objetos das aplicações e as classes que implementam os comparadores entre objetos. A Camada de Estruturas contém as estruturas de indexação e estruturas auxiliares e a Camada de Armazenamento contém gerenciadores de páginas e seus componentes, que provêm funções para o gerenciamento de acesso paginado a disco ou a memória. Existem várias estruturas de indexação implementadas na Arboretum, sendo a maioria delas Métodos de Acesso Métricos (MAMs). Para utilizar uma estrutura existente, é necessário definir uma classe para representar os objetos a serem armazenados. A serialização é um conceito fundamental da Arboretum, para permitir o armazenamento de objetos em disco. Desta forma, as classes de objetos devem respeitar a interface stobject, que define os seguintes métodos:

16 Usuário Objetos Comparadores Estruturas Estruturas de indexação Armazenamento Gerenciadores de página Figura 1.6. Arquitetura da biblioteca Arboretum. virtual stobject * Clone(); virtual const stbyte * Serialize(); virtual stsize GetSerializedSize(); virtual void Unserialize(const stbyte * serializedobj, stsize serializedobjsize); onde o método Clone retorna uma cópia do objeto, o método Serialize retorna uma sequência de bytes com o objeto serializado, o método GetSerializedSize retorna o tamanho serializado do objeto e o método Unserialize reconstrói um objeto a partir de seu formato serializado 4. Também é preciso definir um comparador para a classe de objeto criada. No caso de MAMs, o comparador é uma função de distância, que deve implementar a interface stmetricevaluator, que define o seguinte método: virtual stdistance GetDistance(stObject * obj1, stobject * obj2) que retorna a distância entre os dois objetos fornecidos. A Arboretum utiliza templates C++ para parametrizar os tipos de dados manipulados pelas estruturas. Por exemplo, para instanciar um MAM na Arboretum, o tipo de objeto e o comparador devem ser fornecidos como parâmetros de template. Desta forma, o MAM não precisa conhecer detalhes da implementação do tipo de objeto ou do comparador, podendo ser parametrizado para indexar tipos de objetos específicos que atendam às necessidades das aplicações alvo, apenas acessando a interface das classes informadas como parâmetros. Para ilustrar o processo de instanciação, suponha-se que é desejado indexar histogramas normalizados de cores de imagens em uma Slim-tree organizada pela distância Manhattan (L 1 ). Um histograma normalizado de cores pode ser armazenado em um vetor de números reais. A Arboretum possui a classe ByteOIDArrayObject, que implementa um vetor serializável segundo a interface stobject, cujo tipo de cada posição do vetor é parametrizável. A Arboretum também implementa a função L 1 na classe stmanhattanmetricevaluator, que calcula a distância entre dois vetores de características e também é parametrizada com o tipo de cada posição dos vetores. Com estes requisitos, a parametrização da Slim-tree pode ser feita através das definições de tipos a seguir: 4 Os tipos stbyte, stsize e stdistance são redefinições de tipos básicos de dados estabelecidas na Arboretum e correspondem, respectivamente, aos tipos byte, inteiro sem sinal e real de dupla precisão. 46

17 typedef ByteOIDArrayObject<float> THistogram; typedef stmanhatanmetricevaluator<float> TManhattanFloat; typedef stslimtree<thistogram, TManhattanFloat> myslimtree; Além da definição dos parâmetros da Camada de Usuário, as estruturas de indexação dependem da Camada de Armazenamento para realizar a persistência das estruturas. Entre outras coisas, a Camada de Armazenamento define 2 classes básicas: stpage e stpagemanager. A classe stpage implementa uma página de dados, armazenando um conjunto contíguo de bytes, cujo significado não importa para esta classe. A classe stpagemanager define a interface que os gerenciadores de página devem implementar para armazenar e recuperar páginas de disco ou de memória requisitadas pelas estruturas de indexação. Por exemplo, o código a seguir instancia um gerenciador de páginas para disco e uma Slim-tree parametrizada pelo tipo myslimtree: stpagemanager * pagemanager = new stdiskpagemanager("slim.idx",8192); myslimtree * slimtree = new myslimtree(pagemanager); onde os dois parâmetros fornecidos na instanciação do gerenciador de páginas são, respectivamente, o nome do arquivo de dados a ser utilizado e o tamanho de página (em bytes), e o parâmetro da Slim-tree é o gerenciador de páginas a ser usado pela estrutura. Cada estrutura de dados possui seus métodos próprios de consulta e manipulação dos elementos indexados. As consultas por similaridade retornam conjuntos de resultados segundo a interface stresult, que define as operações de manipulação dos resultados e é parametrizada com o tipo de objeto armazenado pela estrutura. O resultado é formado por pares objeto, distância, que armazenam o elemento retornado e sua distância ao(s) elemento(s) de consulta, ou triplas objeto1, objeto2, distância, no caso de junções por similaridade. Por exemplo, o código a seguir executa sobre a Slim-tree criada uma consulta k-nn, tendo center como elemento de referência e k = 10, percorre o conjunto de resultados e, ao final, destrói o resultado: stresult<thistogram> * result; result = slim->nearestquery(center, 10); stresult<thistogram>::titepairs it = result->beginpairs(); while (it!= result->endpairs()) { THistogram * histogram = (THistogram *)(*it)->getobject(); stdistance distance = (stdistance)(*it)->getdistance(); // utilize o objeto e a distância recuperados it++; } delete result; onde o tipo stresult<thistogram>::titepairs é um iterador da classe parametrizada stresult, que permite acessar os pares objeto, distância do resultado. A arquitetura modular da Arboretum favorece a implementação de novas estruturas de indexação. Um índice é definido em uma classe principal e um conjunto de classes auxiliares. Uma classe auxiliar bastante comum é aquela que define o nó (ou bucket) da estrutura sobre uma página stpage. Esta classe é a que implementa a lógica do conteúdo das páginas, que são tratadas apenas como sequências de bytes pelos gerenciadores de páginas. As demais classes auxiliares dependem de cada estrutura, mas a biblioteca provê um variedade de classes auxiliares, o que permite reduzir o esforço de implementação e ajuda a manter a homogeneidade das interfaces de acesso às estruturas desenvolvidas. 47

18 1.7. Inclusão de Consultas por Similaridade no SGBD Oracle Esta seção apresenta a implementação de um módulo para consultas por similaridade sobre o SGBD Oracle, utilizando as interfaces da arquitetura extensível do Oracle (Oracle Extensible Architecture Framework). O módulo FMI-SiR 5 (user-defined Features, Metrics and Indexes for Similarity Retrieval) [Kaster et al., 2010] é um módulo de SGBD que provê operadores, extratores de características, funções de distância e métodos de acesso para responder eficientemente a consultas por similaridade integradas às demais operações de busca disponibilizadas pelo SGBD. Além de suportar aplicações que demandam manipulação eficiente de dados complexos, a abordagem adotada pelo FMI-SiR facilita a integração de resultados de pesquisa a um SGBD do mercado. A implementação do FMI-SiR sobre o Oracle é denominada FMI-SiR O, que é descrita nesta seção. Existe ainda uma extensão a esse módulo, denominada Medical FMI-SiR (MedFMI-SiR) [Kaster et al., 2011a], que aborda a recuperação de imagens médicas combinando características visuais e metadados DICOM A Arquitetura do FMI-SiR O O FMI-SiR O é acoplado ao SGBD Oracle através das interfaces da arquitetura extensível do Oracle. Desta forma, ele é controlado pelo processador de consultas do SGBD e integrado às demais funcionalidades do SGBD, permitindo executar eficientemente consultas combinando condições baseadas em similaridade e condições baseadas em critérios convencionais. Todas as informações sobre os dados complexos podem ser armazenadas no banco de dados de forma integrada, incluindo metadados, vetores de características descrevendo os seus conteúdos e os dados binários em si. As aplicações cliente utilizam as funcionalidades do FMI-SiR O acessando diretamente a interface do SGBD, sem a necessidade de bibliotecas adicionais. Isto permite que aplicações desenvolvidas em qualquer linguagem sejam capazes de recuperar dados complexos por similaridade através de uma conexão simples com o SGBD. Assim, múltiplas aplicações podem fazer uso compartilhado de um repositório centralizado de dados complexos, com integridade e segurança reforçadas e com funcionalidades de recuperação por similaridade. O FMI-SiR O é implementado como uma biblioteca compartilhada dinâmica em C/C++, composta por um conjunto de funções para extração de características, funções de distância e funções de gerenciamento de índices para dados complexos. As funções de distância e os métodos de acesso são providos pela biblioteca Arboretum. Os extratores de características também são organizados em bibliotecas portáveis, o que facilita a inclusão de novos extratores. As operações de busca por similaridade são disponibilizadas por novos operadores incorporados pelo FMI-SiR à linguagem SQL, que permitem a representação de operações por similaridade em sentenças SELECT padrão. Com o FMI-SiR O, as principais etapas de um processo de recuperação por similaridade são atendidas. A Tabela 1.1 resume as funcionalidades implementadas no FMI-SiR O, relacionando-as com as tarefas de recuperação por similaridade diretamente suportadas. Para explicar a implementação do FMI-SiR O, será utilizado um exemplo que considera a existência de uma tabela chamada image_table, contendo um identificador id, um atributo image contendo uma imagem digital (dado complexo) e um atributo

19 image_sign, do tipo BLOB, para armazenar o vetor de características utilizado para descrever o conteúdo da imagem, que é utilizado nas consultas por similaridade. Tarefa Extração de características Cálculo de similaridade Indexação das características Funcionalidade Funções generatesignature e readsignaturefromfile UDFs <distance_name>_distance Novos tipos de índice Slim_<distance_name> e operadores para execução indexada <distance_name>_dist e <distance_name>_knn Tabela 1.1. Funcionalidades do FMI-SiR O para suporte à recuperação por similaridade Extração de Características A primeira tarefa necessária à recuperação de dados complexos por similaridade é geração de vetores de características descrevendo o conteúdo do dado complexo armazenado. O dado complexo em si pode ser carregado e gerenciado pelo SGBD utilizando funções de manipulação de BLOBs. Isto permite que procedimentos eficientes de carga de grandes volumes de dados providos pelo SGBD sejam utilizados. A extração de características é embutida em funções do SGBD. No FMI-SiR O, a extração é feita por meio da função SQL generatesignature, que invoca extratores de características implementados em C++ na biblioteca compartilhada. A função generatesignature tem a forma: generatesignature(complexdata BLOB, signature BLOB, extractor VARCHAR, parameters VARCHAR) onde o parâmetro complexdata recebe o dado complexo de entrada, signature é o BLOB que irá armazenar o vetor de características gerado, extractor é o nome do extrator desejado e parameters é uma string contendo os parâmetros passados para o extrator de características. Esta função pode ser invocada em sentenças SQL, como exemplificado a seguir: FOR c IN (SELECT image, image_sign FROM image_table FOR UPDATE) LOOP generatesignature(c.image, c.image_sign, Histogram, 256 ); END LOOP; onde c é um cursor iterando sobre as tuplas da relação image_table, c.image e c.image_sign são os atributos da tupla corrente do cursor que armazenam, respectivamente, a imagem de entrada e o vetor de características gerado, Histogram indica que está sendo solicitado a extração do histograma de cores da imagem de entrada e o parâmetro 256 é o número desejado de bins do histograma. Observe-se que o vetor de características é um parâmetro de saída, portanto, é necessário acessar este atributo utilizando um bloqueio exclusivo, expresso no exemplo pela cláusula FOR UPDATE. A extração de características também pode ser implementada em ferramentas executadas externamente ao SGBD. Neste caso, basta carregar os vetores de características gerados por essas ferramentas no banco de dados. No FMI-SiR O esta tarefa é realizada por uma função SQL, denominada readsignaturefromfile, que tem a forma: 49

3 Plano de Execução de Consultas

3 Plano de Execução de Consultas Sumário 1 Introdução ao Processamento de Consultas 2 Otimização de Consultas 3 Plano de Execução de Consultas 4 Introdução a Transações 5 Recuperação de Falhas 6 Controle de Concorrência 7 Fundamentos

Leia mais

Banco de Dados Espaciais

Banco de Dados Espaciais Banco de Dados Espaciais Disciplina BD Não Convencionais Prof. Ricardo Rodrigues Ciferri São Carlos, 20 de Agosto de 2010 Sumário Tipos de Dados Espaciais Representação dos Dados Processamento de Consultas

Leia mais

4 Testes e experimentos realizados 4.1. Implementação e banco de dados

4 Testes e experimentos realizados 4.1. Implementação e banco de dados 32 4 Testes e experimentos realizados 4.1. Implementação e banco de dados Devido à própria natureza dos sites de redes sociais, é normal que a maior parte deles possua uma grande quantidade de usuários

Leia mais

Introdução. descrever os tipos de interfaces e linguagens oferecidas por um SGBD. mostrar o ambiente de programas dos SGBD s

Introdução. descrever os tipos de interfaces e linguagens oferecidas por um SGBD. mostrar o ambiente de programas dos SGBD s Introdução Contribuição do Capítulo 2: discutir modelos de dados definir conceitos de esquemas e instâncias descrever os tipos de interfaces e linguagens oferecidas por um SGBD mostrar o ambiente de programas

Leia mais

Processamento da Consulta. Processamento da Consulta

Processamento da Consulta. Processamento da Consulta Processamento da Consulta Equipe 05 Adriano Vasconcelos Denise Glaucia Jose Maria Marcigleicy Processamento da Consulta Refere-se ao conjunto de atividades envolvidas na extra de dados de um banco de dados.

Leia mais

Dados Espaciais e Indexação

Dados Espaciais e Indexação Dados Espaciais e Indexação Cristina Dutra de Aguiar Ciferri Arthur Emanuel de O. Carosia 1 Tipos de Dados Espaciais Ponto: menor unidade possível para representar um objeto espacial. Linha: seqüência

Leia mais

Banco de Dados. Perspectiva Histórica dos Bancos de Dados. Prof. Walteno Martins Parreira Jr

Banco de Dados. Perspectiva Histórica dos Bancos de Dados. Prof. Walteno Martins Parreira Jr Banco de Dados Perspectiva Histórica dos Bancos de Dados Prof. Walteno Martins Parreira Jr www.waltenomartins.com.br waltenomartins@yahoo.com 2015 Histórico Antes dos computadores, as informações eram

Leia mais

O Modelo e a Álgebra Relacional

O Modelo e a Álgebra Relacional O Modelo e a Álgebra Relacional O Modelo Relacional Modelo de dados, que se baseia no princípio em que todos os dados estão guardados em tabelas Baseado em lógica de predicados e na teoria de conjuntos.

Leia mais

Sistema de Informação Geográfica

Sistema de Informação Geográfica Sistema de Informação Geográfica Curso de Sistemas de Informação Karla Donato Fook karladf@ifma.edu.br DESU / DAI 2016 Arquiteturas SIG 2 1 Tipos de Implementação 3 Tipos de Implementação Em geral, um

Leia mais

Aula 2 BD Introdução. Profa. Elaine Faria UFU

Aula 2 BD Introdução. Profa. Elaine Faria UFU Aula 2 BD Introdução Profa. Elaine Faria UFU - 2017 Motivação A quantidade de informação disponível está crescendo exponencialmente Os dados e as informações tem um papel importante para as organizações

Leia mais

Sistemas de Banco de Dados

Sistemas de Banco de Dados Sistemas de Banco de Dados Fundamentos em Bancos de Dados Relacionais Wladmir Cardoso Brandão www.wladmirbrandao.com Departamento de Ciência da Computação (DCC) Instituto de Ciências Exatas e Informática

Leia mais

Hashing: conceitos. Hashing

Hashing: conceitos. Hashing Hashing: conceitos hashing é uma técnica conhecida como espalhamento, mapeamento ou randomização que tenta distribuir dados em posições aleatórias de uma tabela (array) associa cada objeto (de um determinado

Leia mais

Arquivos invertidos 39

Arquivos invertidos 39 Arquivos invertidos 39 Arquivos invertidos É um mecanismo que utiliza palavras para indexar uma coleção de documentos a fim de facilitar a busca e a recuperação Estruturas de um arquivo invertido Vocabulário

Leia mais

PROJETO DE PROGRAMAS. Projeto de Programas PPR0001

PROJETO DE PROGRAMAS. Projeto de Programas PPR0001 PROJETO DE PROGRAMAS Projeto de Programas PPR0001 Desenvolvimento de Software 2 3 Desenvolvimento de Software Análise de Requisitos Distinguir e dividir o sistema em componentes: Analisar os componentes

Leia mais

GBC053 Gerenciamento de Banco de Dados. Plano de Curso e Introdução. Ilmério Reis da Silva UFU/FACOM/BCC

GBC053 Gerenciamento de Banco de Dados. Plano de Curso e Introdução. Ilmério Reis da Silva  UFU/FACOM/BCC GBC053 Gerenciamento de Banco de Dados Plano de Curso e Introdução Ilmério Reis da Silva ilmerio@ufu.br www.facom.ufu.br/~ilmerio/gbd UFU/FACOM/BCC Plano de Curso Ementa Arquitetura de um Sistema de Gerenciamento

Leia mais

Introdução. O que é um Banco de Dados (BD)?

Introdução. O que é um Banco de Dados (BD)? O que é um Banco de Dados (BD)? É uma coleção de dados relacionados e armazenados em algum dispositivo Associações aleatórias de dados não podem ser chamadas de base de dados Conceito de dados Valor de

Leia mais

Índices. 1. Introdução. Universidade Federal de Pelotas Departamento de Informática Bacharelado em Ciência da Computação Banco de Dados I

Índices. 1. Introdução. Universidade Federal de Pelotas Departamento de Informática Bacharelado em Ciência da Computação Banco de Dados I Universidade Federal de Pelotas Departamento de Informática Bacharelado em Ciência da Computação Banco de Dados I Prof. Paulo Ferreira Atividade para Sala de Aula: 25/11/2008 1. Introdução Índices Os índices

Leia mais

Modelos de Dados Temporais

Modelos de Dados Temporais CMP 151 Modelos de Dados Temporais Roteiro! Conceitos de representação temporal! Modelos de dados temporais! Linguagens de consulta temporais " Bancos de dados temporais " Implementação de BDs temporais

Leia mais

Interpolação polinomial: Polinômio de Lagrange

Interpolação polinomial: Polinômio de Lagrange Interpolação polinomial: Polinômio de Lagrange Marina Andretta ICMC-USP 09 de maio de 2012 Baseado no livro Análise Numérica, de R. L. Burden e J. D. Faires. Marina Andretta (ICMC-USP) sme0500 - cálculo

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Linguagens de Programação: sintaxe e semântica de linguagens de programação e conceitos de linguagens interpretadas e compiladas Engenharia da Computação Professor: Críston Pereira

Leia mais

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca ÁRVORES SUMÁRIO Fundamentos Árvores Binárias Árvores Binárias de Busca 2 ÁRVORES Utilizadas em muitas aplicações Modelam uma hierarquia entre elementos árvore genealógica Diagrama hierárquico de uma organização

Leia mais

RECONHECIMENTO FACIAL UTILIZANDO EIGENFACES

RECONHECIMENTO FACIAL UTILIZANDO EIGENFACES Universidade Federal do Rio de Janeiro Instituto Alberto Luiz Coimbra de Pós-Graduação e Pesquisa de Engenharia Programa de Engenharia de Sistemas e Computação Rio de Janeiro, RJ Brasil RECONHECIMENTO

Leia mais

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa Ordenação Externa Ordenação Externa Estrutura de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação

Leia mais

Organização de Arquivos

Organização de Arquivos Construção de Sistemas de Gerência de Bancos de Dados DI PUC-Rio Prof: Sérgio Lifschitz Organização de Arquivos Organização de Arquivos Tipos básicos de arquivos: heap files (entry sequenced files) sorted

Leia mais

Gerência do Sistema de Arquivos. Adão de Melo Neto

Gerência do Sistema de Arquivos. Adão de Melo Neto Gerência do Sistema de Arquivos Adão de Melo Neto 1 Gerência do Sistema de Arquivos Organização de arquivos Operações de E/S Estrutura de diretórios Gerência de espaço livre Gerência de alocação de espaços

Leia mais

indexação e hashing Construção de Índices e Funções Hash Diego Gomes Tomé - MSc. Informática Orientador: Prof. Dr. Eduardo Almeida October 13, 2016

indexação e hashing Construção de Índices e Funções Hash Diego Gomes Tomé - MSc. Informática Orientador: Prof. Dr. Eduardo Almeida October 13, 2016 indexação e hashing Construção de Índices e Funções Hash Diego Gomes Tomé - MSc. Informática Orientador: Prof. Dr. Eduardo Almeida October 13, 2016 Universidade Federal do Paraná indexação e hashing Índices

Leia mais

Matrizes esparsas: definição

Matrizes esparsas: definição Matrizes esparsas: definição o objetivo é mostrar os métodos de armazenamento e manipulação de matrizes esparsas esparsidade de uma matriz é a relação entre o número de elementos nulos de uma matriz e

Leia mais

Uso de Índices na Otimização e Processamento de Consultas. Otimização e Processamento de Consultas. Otimização e Processamento de Consultas

Uso de Índices na Otimização e Processamento de Consultas. Otimização e Processamento de Consultas. Otimização e Processamento de Consultas usuário processador de E/S gerador de respostas Uso de Índices na Otimização e Processamento de Consultas Profa. Dra. Cristina Dutra de Aguiar Ciferri analisador controle de autorização verificador de

Leia mais

Segundo trabalho prático de implementação Sistema de reserva de assentos

Segundo trabalho prático de implementação Sistema de reserva de assentos Segundo trabalho prático de implementação Sistema de reserva de assentos 1. Descrição do problema Computação Concorrente (MAB-117) 2016/2 Prof. Silvana Rossetto 1 DCC/IM/UFRJ 17 de novembro de 2016 Um

Leia mais

Sistemas especialistas Fuzzy

Sistemas especialistas Fuzzy Sistemas Fuzzy Sistemas especialistas Fuzzy Especialistas Senso comum para resolver problemas Impreciso, inconsistente, incompleto, vago Embora o transformador esteja um pouco carregado, pode-se usá-lo

Leia mais

Lista de Exercícios. Av. Trabalhador São-carlense, 400. centro. São Carlos - SP cep Brasil.

Lista de Exercícios. Av. Trabalhador São-carlense, 400. centro. São Carlos - SP cep Brasil. Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Ciências de Computação Disciplina de Organização de Arquivos Profa. Dra. Cristina Dutra de Aguiar Ciferri Lista

Leia mais

P R O J E T O: C A R N A V A L. 2. Informações Básicas sobre o Sistema a ser Desenvolvido

P R O J E T O: C A R N A V A L. 2. Informações Básicas sobre o Sistema a ser Desenvolvido Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Ciências de Computação Disciplina de Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri P R O J E T

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

Computadores e Programação (DCC/UFRJ)

Computadores e Programação (DCC/UFRJ) Computadores e Programação (DCC/UFRJ) Aula 3: 1 2 3 Abstrações do Sistema Operacional Memória virtual Abstração que dá a cada processo a ilusão de que ele possui uso exclusivo da memória principal Todo

Leia mais

2.1. Construção da Pista

2.1. Construção da Pista 2 Malha de Controle Para que se possa controlar um dado sistema é necessário observar e medir suas variáveis de saída para determinar o sinal de controle, que deve ser aplicado ao sistema a cada instante.

Leia mais

Linguagens Regulares. Prof. Daniel Oliveira

Linguagens Regulares. Prof. Daniel Oliveira Linguagens Regulares Prof. Daniel Oliveira Linguagens Regulares Linguagens Regulares ou Tipo 3 Hierarquia de Chomsky Linguagens Regulares Aborda-se os seguintes formalismos: Autômatos Finitos Expressões

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Program João Manuel R. S. Tavares Sumário 1. Ciclo de desenvolvimento de um programa; 2. Descrição de algoritmos; 3. Desenvolvimento modular de programas; 4. Estruturas de controlo de um programa.

Leia mais

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

ÁRVORE BINÁRIA DE BUSCA TDA-ABB ÁRVORE BINÁRIA DE BUSCA TDA-ABB Conceitos Gerais sobre Árvores Uma árvore é uma estrutura hierárquica dividida em níveis, que ou está vazia, ou contém elementos chamados nós; Diferentemente da árvore natural,

Leia mais

Universidade Federal de Mato Grosso do Sul. Implementação de um Sistema Simplificado de Memória Cache

Universidade Federal de Mato Grosso do Sul. Implementação de um Sistema Simplificado de Memória Cache Universidade ederal de Mato Grosso do Sul acom - aculdade de Computação Linguagem de Programação Orientada a Objetos Prof. Me. Liana Duenha Implementação de um Sistema Simplificado de Memória Cache O objetivo

Leia mais

Análise Sintática de Frases utilizando Gramáticas Livres de Contexto Probabilísticas

Análise Sintática de Frases utilizando Gramáticas Livres de Contexto Probabilísticas Universidade de São Paulo Mestrado em Ciência da Computação Instituto de Matemática e Estatística Disciplina MAC5725 Lingüística Computacional Análise Sintática de Frases utilizando Gramáticas Livres de

Leia mais

Banco de Dados. Introdução. Profa. Flávia Cristina Bernardini

Banco de Dados. Introdução. Profa. Flávia Cristina Bernardini Banco de Dados Introdução Profa. Flávia Cristina Bernardini * Slides Baseados no material elaborado pelos professores Eduardo R. Hruschka, Cristina D. A. Ciferri e Elaine Parros Machado Motivação Operações

Leia mais

SSC643 -Avaliação de Desempenho de Sistemas Computacionais Sarita Mazzini Bruschi

SSC643 -Avaliação de Desempenho de Sistemas Computacionais Sarita Mazzini Bruschi Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação SSC643 -Avaliação de Desempenho de Sistemas Computacionais Sarita Mazzini Bruschi Material

Leia mais

Acesso Sequencial Indexado

Acesso Sequencial Indexado Acesso Sequencial Indexado Utiliza o princípio da pesquisa seqüencial cada registro é lido seqüencialmente até encontrar uma chave maior ou igual a chave de pesquisa. Providências necessárias para aumentar

Leia mais

Compiladores. Introdução à Compiladores

Compiladores. Introdução à Compiladores Compiladores Introdução à Compiladores Cristiano Lehrer, M.Sc. Introdução (1/2) O meio mais eficaz de comunicação entre pessoas é a linguagem (língua ou idioma). Na programação de computadores, uma linguagem

Leia mais

5COP096 TeoriadaComputação

5COP096 TeoriadaComputação Sylvio 1 Barbon Jr barbon@uel.br 5COP096 TeoriadaComputação Aula 13 Prof. Dr. Sylvio Barbon Junior Sumário - Problemas NP-Completo Algoritmos Não-deterministas; Classes NP-Completo e NP-Dificil; Teorema

Leia mais

4 Detecção de Silhueta

4 Detecção de Silhueta 4 Detecção de Silhueta No decorrer deste capítulo é proposto um modelo de detecção da silhueta da mão capaz de lidar com os erros da segmentação e ruídos na sua morfologia. Num primeiro passo são considerados

Leia mais

Otimizando o operador de junção por similaridade no FMI-SIR

Otimizando o operador de junção por similaridade no FMI-SIR Otimizando o operador de junção por similaridade no FMI-SIR Guilherme Queiroz Vasconcelos 1, Daniel dos Santos Kaster 1 1 Departamento de Computação Universidade Estadual de Londrina (UEL) Caixa Postal

Leia mais

Universidade Federal de São Carlos - UFSCar Departamento de Computação - DC Programa de Pós-Graduação em Ciência da Computação - PPGCC

Universidade Federal de São Carlos - UFSCar Departamento de Computação - DC Programa de Pós-Graduação em Ciência da Computação - PPGCC Universidade Federal de São Carlos - UFSCar Departamento de Computação - DC Programa de Pós-Graduação em Ciência da Computação - PPGCC Revisão da R*-tree Aluno:Marcos Henrique de Paula Prof: Dr. Ricardo

Leia mais

Gerência de Projetos e Qualidade de Software. Prof. Walter Gima

Gerência de Projetos e Qualidade de Software. Prof. Walter Gima Gerência de Projetos e Qualidade de Software Prof. Walter Gima 1 Plano de Ensino e Aprendizagem 2 3 Objetivos CONTEÚDO Se preparar para o inicio de um projeto Acompanhamento projeto Controles Métricas

Leia mais

3 Redes Neurais Artificiais

3 Redes Neurais Artificiais 3 Redes Neurais Artificiais 3.1. Introdução A capacidade de implementar computacionalmente versões simplificadas de neurônios biológicos deu origem a uma subespecialidade da inteligência artificial, conhecida

Leia mais

3 Trabalhos relacionados

3 Trabalhos relacionados 3 Trabalhos relacionados Adaptação e implantação dinâmicas são requisitos de aplicações em diversos domínios. Diversas abordagens são capazes de promover adaptação e implantação em tempo de execução. Alguns

Leia mais

Métodos de Ordenação Parte 3

Métodos de Ordenação Parte 3 Estrutura de Dados II Métodos de Ordenação Parte 3 Prof a Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Material baseado nos materiais do Prof. Robson Lins Classificação em Memória Primária

Leia mais

Administração de. José Antônio da Cunha CEFET-RN

Administração de. José Antônio da Cunha CEFET-RN Administração de Banco de Dados José Antônio da Cunha CEFET-RN O Otimizador de um Sistema de Gerenciamento de Banco de Dados Relacionais (SGBDR) é responsável por analisar uma consulta SQL e escolher qual

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Aula 6 Gerenciamento de Memória Prof. Galvez Considerações Gerais Multiprogramação implica em manter-se vários processos em memória Memória necessita ser alocada de

Leia mais

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Medida do Tempo de Execução de um Programa Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Medida do Tempo de Execução de um Programa O projeto de algoritmos é fortemente influenciado pelo estudo

Leia mais

5 Usando as Representações de Design Rationale

5 Usando as Representações de Design Rationale 5 Usando as Representações de Design Rationale Como mencionamos anteriormente, representar design rationale em uma linguagem formal usando o modelo formal dos artefatos nos permite atribuir semântica ao

Leia mais

Estruturas de Dados I

Estruturas de Dados I Estruturas de Dados I Rodrigo Porfírio da Silva Sacchi rodrigosacchi@ufgd.edu.br 3410-2075 Aula 6: Listas Encadeadas e Alocação Dinâmica Listas Encadeadas e Alocação Dinâmica Alocação Seqüencial versus

Leia mais

Linguagem de Maquina II. Visão Geral

Linguagem de Maquina II. Visão Geral Linguagem de Maquina II Visão Geral Revisão A linguagem de máquina é composta de seqüências binárias (1's e 0's) São interpretadas como instruções pelo hardware A linguagem de montagem e a linguagem de

Leia mais

SSC643 -Avaliação de Desempenho de Sistemas Computacionais -

SSC643 -Avaliação de Desempenho de Sistemas Computacionais - Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação SSC643 -Avaliação de Desempenho de Sistemas Computacionais - Aula 2 Sarita Mazzini Bruschi

Leia mais

Linguagens de Programação. Marco A L Barbosa

Linguagens de Programação. Marco A L Barbosa Expressões e sentença de atribuição Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

Leia mais

Engenharia de Software II

Engenharia de Software II Engenharia de Software II Aula 6 http://www.ic.uff.br/~bianca/engsoft2/ Aula 6-10/05/2006 1 Ementa Processos de desenvolvimento de software Estratégias e técnicas de teste de software (Caps. 13 e 14 do

Leia mais

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados

Leia mais

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados

Leia mais

Memória Virtual. Ciclo 4 AT2. Prof. Hermes Senger

Memória Virtual. Ciclo 4 AT2. Prof. Hermes Senger Memória Virtual Ciclo 4 AT2 Prof. Hermes Senger Nota O presente material foi elaborado com base no material didático do livro Sistemas Operacionais, 3ª edição, de H.M.Deitel, P.J. Deitel, D.R. Choffnes,

Leia mais

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização.

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização. UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Sistemas de Computação 2016.2 Profa.: Simone Martins Lista 1 1. Um programa P foi compilado com um compilador

Leia mais

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão Projeto e Análise de Algoritmos NP Completude Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br Universidade Federal de Alfenas versão da aula: 0.4 Introdução Problemas intratáveis ou difíceis são comuns

Leia mais

Conceitos relativos a Banco de Dados & Modelos de Informação de Banco de Dados. Introdução

Conceitos relativos a Banco de Dados & Modelos de Informação de Banco de Dados. Introdução Conceitos relativos a Banco de Dados & Modelos de Informação de Banco de Dados Prof. Anderson Henriques Introdução A quantidade de informação relevante para a tomada de decisões nas organizações é muito

Leia mais

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Tópicos Introdução Conceito de balanceamento Árvores

Leia mais

Pontifícia Universidade Católica do Rio de Janeiro. Departamento de Informática. Fundamentos de Computação Gráfica

Pontifícia Universidade Católica do Rio de Janeiro. Departamento de Informática. Fundamentos de Computação Gráfica 1. Imagens sísmicas Pontifícia Universidade Católica do Rio de Janeiro Departamento de Informática Fundamentos de Computação Gráfica Aluno: Stelmo Magalhães Barros Netto Relatório do trabalho Imagens Sísmicas

Leia mais

Programação: Vetores

Programação: Vetores Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia

Leia mais

Fundamentos de Teste de Software

Fundamentos de Teste de Software Núcleo de Excelência em Testes de Sistemas Fundamentos de Teste de Software Módulo 2- Teste Estático e Teste Dinâmico Aula 5 Técnicas de Especificação SUMÁRIO INTRODUÇÃO... 3 TÉCNICAS PARA PROJETO DE CASOS

Leia mais

MATA60 BANCO DE DADOS Aula 3- Modelo de Entidades e Relacionamentos. Prof. Daniela Barreiro Claro

MATA60 BANCO DE DADOS Aula 3- Modelo de Entidades e Relacionamentos. Prof. Daniela Barreiro Claro MATA60 BANCO DE DADOS Aula 3- Modelo de Entidades e Relacionamentos Prof. Daniela Barreiro Claro Agenda Modelo de Dados MER 2 de X; X=37 Modelo de Dados O Modelo de Dados é a principal ferramenta que fornece

Leia mais

Banco de Dados Geográficos

Banco de Dados Geográficos Banco de Dados Geográficos Valéria Gonçalves Soares Professora DIMAp/UFRN Conteúdo Bancos de Dados Geográficos 1. Conceitos e Definições Características Gerais 2. Modelos de Dados Geográficos Modelos de

Leia mais

Resumo. Como um agente busca de seqüência de ações para alcançar seus objetivos.

Resumo. Como um agente busca de seqüência de ações para alcançar seus objetivos. Resumo Inteligência Artificial Russel e Norvig Capítulos 3,4 e 5 Prof. MsC Ly Freitas UEG Resolução de problemas por meio de busca Como um agente busca de seqüência de ações para alcançar seus objetivos.

Leia mais

étodos uméricos ZEROS DE FUNÇÕES Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA

étodos uméricos ZEROS DE FUNÇÕES Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA étodos uméricos ZEROS DE FUNÇÕES Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA UNIVERSIDADE DE JOÃO DEL-REI PRÓ-REITORIA DE PESQUISA CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA

Leia mais

Capítulo 11 Sistemas de Arquivos

Capítulo 11 Sistemas de Arquivos Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo Sistemas de s Introdução O armazenamento e a recuperação de informações

Leia mais

SBC - Sistemas Baseados em Conhecimento

SBC - Sistemas Baseados em Conhecimento Siglas, Símbolos, Abreviaturas DW - Data Warehouse KDD Knowledge Discovery in Database MD Mineração de Dados OLAP - On-line analytical processing SBC - Sistemas Baseados em Conhecimento 1. INTRODUÇÃO O

Leia mais

Algoritmos geométricos

Algoritmos geométricos Algoritmos geométricos introdução a conceitos básicos de geometria computacional que serão abordados de forma mais avançada na disciplina Computação Gráfica disciplina de computação gráfica arquitetura

Leia mais

Listas Lineares Ordenadas

Listas Lineares Ordenadas Listas Lineares Ordenadas Algoritmos e Estruturas de Dados I Nesta apresentação será apresentado o ADT lista linear ordenada Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre

Leia mais

Aula 10 Gerenciamento de Memória

Aula 10 Gerenciamento de Memória Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Aula 10 Gerenciamento de Memória Capítulo9 PLT página159 2 1 Gerenciamento de

Leia mais

Modelos. Banco de dados. Professor: Jarbas Araújo CENTRO EDUCACIONAL RADIER.

Modelos. Banco de dados. Professor: Jarbas Araújo CENTRO EDUCACIONAL RADIER. Modelos Banco de dados Professor: Jarbas Araújo professorjarbasaraujo@gmail.com CENTRO EDUCACIONAL RADIER Projeto de banco de dados Todo bom sistema de banco de dados deve apresentar um projeto, que visa

Leia mais

Informática. Banco de Dados Relacional. Professor Julio Alves.

Informática. Banco de Dados Relacional. Professor Julio Alves. Informática Banco de Dados Relacional Professor Julio Alves www.acasadoconcurseiro.com.br Informática 1. BANCOS DE DADOS RELACIONAL Um BD relacional possui apenas um tipo de construção, a tabela. Uma

Leia mais

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Tópicos Introdução Árvore digital Árvore digital binária

Leia mais

Livro texto: Capítulo 1

Livro texto: Capítulo 1 Livro texto: Capítulo 1 Bancos de dados (BD) No decorrer do dia, a maioria de nós se depara com atividades que envolvem alguma interação com os BD s banco reservas em um hotel compra de passagens aéreas

Leia mais

Sistemas Baseados em Conhecimento

Sistemas Baseados em Conhecimento Sistemas Baseados em Conhecimento Profa. Josiane M. P. Ferreira Baseado no capítulo 2 do livro Sistemas Inteligentes Fundamentos de Aplicações, organizadção: Solange Oliveira Rezende, ed. Manole, 2005.

Leia mais

Banco de Dados. Professor: Marcelo Machado Cunha IFS Campus Aracaju

Banco de Dados. Professor: Marcelo Machado Cunha IFS Campus Aracaju Banco de Dados Professor: Marcelo Machado Cunha IFS Campus Aracaju Definição Banco de Dados Conjunto de dados interrelacionados que objetivam atender as necessidades de um conjunto de usuários. Inglês:

Leia mais

Conceitos de Sistemas de Banco de Dados INE 5323

Conceitos de Sistemas de Banco de Dados INE 5323 Conceitos de Sistemas de Banco de Dados INE 5323 Prof. Mario Dantas Introdução Por quê Sistemas de Banco de Dados Visão dos Dados Modelos de Dados Linguagem de Definição de Dados (DDL) Linguagem de Manipulação

Leia mais

BANCO DE DADOS. Araújo Lima. Jan / Araújo

BANCO DE DADOS. Araújo Lima. Jan / Araújo BANCO DE DADOS Lima Jan / 2017 1 Índice 1.Introdução a Sistemas de Banco de Dados Evolução dos Sistemas de Informação Conceitos de Bancos de Dados Usuários de Banco de Dados Banco de Dados X Linguagens

Leia mais

BCC Introdu c ao ` a Programa c ao Portugol Guillermo C amara-ch avez UFOP 1/35

BCC Introdu c ao ` a Programa c ao Portugol Guillermo C amara-ch avez UFOP 1/35 BCC 201 - Introdução à Programação Portugol Guillermo Cámara-Chávez UFOP 1/35 Introdução I Lógica A lógica é usada no dia a dia das pessoas que trabalham com computação para solucionar problemas de forma

Leia mais

FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CAPÍTULO 5. Cristina Boeres

FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CAPÍTULO 5. Cristina Boeres FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CAPÍTULO 5 Cristina Boeres Introdução! Diferença de velocidade entre Processador e MP O processador executa uma operação rapidamente e fica em

Leia mais

2 Reconhecimento Facial

2 Reconhecimento Facial 2 Reconhecimento Facial Em termos gerais, o reconhecimento facial é o processo pelo qual se mede o grau de similaridade entre duas imagens faciais com o proposito de identificar a um indivíduo ou de verificar

Leia mais

Aulas 10 e 11 / 18 e 20 de abril

Aulas 10 e 11 / 18 e 20 de abril 1 Conjuntos Aulas 10 e 11 / 18 e 20 de abril Um conjunto é uma coleção de objetos. Estes objetos são chamados de elementos do conjunto. A única restrição é que em geral um mesmo elemento não pode contar

Leia mais

Indexação de dados espaciais R-Tree. CCO229 Bancos de dados Espaciais e Biológicos Prof. Ricardo Rodrigues Ciferri Debora Marrach

Indexação de dados espaciais R-Tree. CCO229 Bancos de dados Espaciais e Biológicos Prof. Ricardo Rodrigues Ciferri Debora Marrach CCO229 Bancos de dados Espaciais e Biológicos Prof. Ricardo Rodrigues Ciferri Debora Marrach Introdução É o método de acesso espacial mais referenciado na literatura É o mais importante dentre os métodos

Leia mais

Lição 4 Fundamentos da programação

Lição 4 Fundamentos da programação Lição 4 Fundamentos da programação Introdução à Programação I 1 Objetivos Ao final desta lição, o estudante será capaz de: Identificar as partes básicas de um programa em Java Reconhecer as diferenças

Leia mais

Introdução a Teste de Software

Introdução a Teste de Software Universidade Católica de Pelotas Tecnólogo em Análise e Desenvolvimento de Sistemas Disciplina de Qualidade de Software Introdução a Teste de Software Prof. Luthiano Venecian 1 Conceitos Teste de software

Leia mais

Princípios da Engenharia de Software aula 03

Princípios da Engenharia de Software aula 03 Princípios da Engenharia de Software aula 03 Prof.: José Honorato Ferreira Nunes Material cedido por: Prof.: Franklin M. Correia Na aula anterior... Modelos de processos de software: Evolucionário Tipos

Leia mais

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; Tudo no mundo real pode ser representado por meio do conceito de "objeto": uma planta, uma mesa, uma pessoa, um sentimento,

Leia mais

4 Extração direta das PELs

4 Extração direta das PELs 4 Extração direta das PELs A detecção de arestas em imagens está relacionada à extração de feições, sendo uma ferramenta fundamental em processamento de imagens e visão computacional. Essa detecção visa

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Conjunto de Instruções Slide 1 Sumário Características de Instruções de Máquina Tipos de Operandos Tipos de Operações Linguagem de Montagem Slide 2 Características

Leia mais