<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Proceedings of the 13th All-Russian scientific conference “Digital Libraries: Advanced Methods and Technologies</institution>
          ,
          <addr-line>Digital Collections” - RCDL'2011, Voronezh, Russia, 2011</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Saint Petersburg state university</institution>
        </aff>
      </contrib-group>
      <fpage>77</fpage>
      <lpage>83</lpage>
      <abstract>
        <p>The multidimensional k-NN (k nearest neighbors) query problem arises in a large variety of database applications, including information retrieval, natural language processing, and data mining. To solve it efficiently, database needs an indexing structure supporting this kind of search. However, exact solution is hardly feasible in multidimensional space. In this paper we describe and analyze an indexing technique for approximate solution of k-NN problem. Construction of the indexing tree is based on clustering. Construction of hash indexing is based on s-stable distributions. Indices are implemented on top of high-performance industrial DBMS.</p>
      </abstract>
      <kwd-group>
        <kwd>k-NN search</kwd>
        <kwd>multidimensional indexing</kwd>
        <kwd>LSH</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>Efficiency of search is critical for modern
information retrieval. Commonly, search queries
retrieve relatively small portion of information. In this
case, indexing search is much more efficient, than the
full scan. Any given process or stored object can be
characterized by a set of features that are usually
called attributes. The purpose of any index is quick
access to the object by the values of some of its
attributes. In other words, the indices provide effective
implementation of associative search.</p>
      <p>
        If attribute values belong to a linearly ordered set,
searching can be implemented with one-dimensional
indices. These indexing structures (such as B-trees and
hash-files) are well studied in 70-80 years. But many
real applications have a goal to find by values of
several attributes or by attributes that can’t be naturally
linearly ordered. In this case we need to implement
searching in multidimensional space. Of the numerous
multidimensional indexing structures proposed in the
80-ies., only R-trees [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] passed the test of time. The
Rtree indexes are widely used in various applications
and implemented in industrial databases.
      </p>
      <p>Multidimensional searching is primarily associated
with processing spatial and spatio-temporal data.
Another class of applications, processing
multidimensional data includes systems based on
various flavor of a text vector model for methods of
data mining, pattern recognition, data compression etc.
Data obtained from the application of this class are
typically characterized by high dimensionality.</p>
      <p>Typically, the processing of multidimensional data
requires searching on the basis of proximity or
similarity, rather than exact attributes equality. The
most common search query is to find K nearest
neighbors for a given dataset.</p>
      <p>In this work we present and compare two approaches
for similarity multidimensional search. One idea is
based on tree-clustering structure, the second one uses
LSH method. The former is better in precision and the
latter supersedes in the speed of computation. The
remaining part of the paper is organized as follows.
Section 2 contains the overview of related work.
Section 3 informally outlines the techniques used in
our approach. Our algorithms and data structures are
presented in section 4, followed by analysis of
experiments or results in section 5.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related work</title>
      <p>
        Years of multidimensional searching evolution led
to development of various indexing algorithms. Best
known of them are R-trees [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], X-tree [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], AV-files
and many others [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. In the past decade, considerable
attention is attracted by the scheme of space-sensitive
hashing (LSH - locality sensitive hashing). M-trees [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]
are intended for indexing the points of a metric space.
      </p>
      <p>
        R-tree indices [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] work well for low-dimensional
spatial data. But R-tree family degrades rapidly due to
the overlap in index pages in high dimensions. The
problem of multidimensional search is extremely
difficult with large-dimensional vectors. It is well
known that the construction of universal indexing
structures for large-scale data is impossible. This fact,
known as the "curse of dimensionality," determined by
the topology of the multidimensional space. It does not
depend on the index constructing method. The
practical consequence is that performance of any index
structure, starting at some dimension, becomes worse
than a full scan. This problem can be somewhat
mitigated by considering the indexing structures and
algorithms that give approximate results. Typically,
the vectors represent only the proximity of the source
application objects (eg vectors for information
retrieval can not accurately express the meaning of the
documents). According to that, it is reasonably to use
approximate methods for finding. For example, LSH
[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] gives only a probabilistic guarantee of correct
answer for k-NN query [
        <xref ref-type="bibr" rid="ref5 ref9">9, 5</xref>
        ].
      </p>
      <p>
        Locality-sensitive hashing works with vector space.
This approach was introduced [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] and well developed
[
        <xref ref-type="bibr" rid="ref16 ref17">16-17</xref>
        ] in last decade.
      </p>
      <p>
        In paper [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] the idea of using randomized
hyperlanes for “sketching” initial dataset was
presented.
      </p>
      <p>
        Then, in paper [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] was introduced improved
method, which uses pivots from s-stable distribution to
hash vectors from the dataset. Idea to preprocess
dataset with dimensionality reduction methods [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]
allows implementing new algorithm that appears to be
near optimal LSH method [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. However, it works
only with Gaussian norm in Euclidean space.
      </p>
      <p>In many cases, it is computationally difficult not
only to find and to prepare vectors (e.g., feature
extraction of images), but even to calculate the
function of similarity (or distance between vectors).
Search could be greatly accelerated if it is possible to
store a matrix of pairwise distances between objects.
Unfortunately, this solution is not scalable because the
size of the index in this case, will square dependence
on the number of objects.</p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] k-NN search problem is dealt with the
double filtering effect of clustering and indexing. The
clustering algorithm ensures that the largest cluster fits
into main memory and that only clusters closest to a
query point need to be searched and hence loaded into
main memory. In each cluster data is distributed with
ordered-partition tree (OP-tree) main memory resident
index, which is efficient for processing k-NN queries.
      </p>
      <p>
        High-dimensional clustering is used by some
content-based image retrieval systems to partition the
data into groups (clusters), which are then indexed to
accelerate processing of queries. Recently, the Cluster
Pruning approach was proposed in [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] as a simple
way to produce such clusters. The evaluation of the
algorithm was performed within an image indexing
context. The paper [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] discusses the parameters that
affect the efficient to the algorithm, and proposes
changes to the basic algorithm to improve
performance.
      </p>
      <p>
        [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] presents an adaptive Multi-level
Mahalanobisbased Dimensionality Reduction (MMDR) technique
for high-dimensional indexing. The MMDR technique
discovers elliptical clusters for more effective
dimensionality reduction by using only the
lowdimensional subspaces, data points in the different axis
systems are indexed using a single B+-tree. The
technique is highly scalable in terms of data size and
dimensionality. It is also dynamic and adaptive to
insertions. An extensive performance study was
conducted using both real and synthetic datasets, and
the results show that our technique not only achieves
higher precision, but also enables queries to be
processed efficiently.
      </p>
      <p>
        In paper [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] a new clustering method is proposed:
to group together only points that are close to each
other. The remaining points are stored separately, not
clustered. Such a structure is obtained unbalanced. In
order to create the indexing structure, in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], the
distances between the selected set of pivots and the
data objects is computed, sorted and nearest distances
are stored in separated tables. For search at first query
is compared with pivots.
      </p>
    </sec>
    <sec id="sec-3">
      <title>3. The approach and rationale</title>
      <p>In this paper, we describe two methods that were
used for approximate multidimensional search. The
first one is actually a variation of a matrix tree, based
on spanning tree clustering algorithm. The second is
an implementation of the local-sensitive hashing
(LSH), specifically tuned for high computational
speed.</p>
      <p>The goal of this work is to construct the
suboptimal index structure for approximate searching of
multidimensional objects based on features of
similarity (or distance function). This structure will
provide a reasonable response time for practical ranges
of different parameters. In order to evaluate the
characteristics and performance of this structure, we
have implemented the model over the data provided
industrial relational DBMS. Perhaps this decision
affects the efficiency but also ensures quick
implementation, suitable for use in the prototype, for
example, in an experimental system for content based
image retrieval. That is, the developed system allows
finding images on a number of characteristics similar
to the one desired.</p>
      <p>If we have a reasonable matrix of pairwise
distances, the problem of finding K nearest neighbors
can be solved by one-dimensional index range scan.
This operation is efficiently implemented in any
relational database. In order to limit the size of an
index, we will not store all pairwise distances, but only
the distance to the K nearest points. Usually, search
engines need to solve the problem of K-nn only for
small values of K.</p>
      <sec id="sec-3-1">
        <title>3.1 Locality-sensitive idea</title>
        <p>Hash functions family is called locality sensitive
with parameters (R, cR, P1, P2), if following:
V1 − V2 &lt; R → PrH (h( p)= h(q)) &gt; P1
V1 − V2 &gt; cR → PrH (h( p)= h(q)) &lt; P2
neighbor query, we don’t need to perform full scan,
but can find neighbors only in buckets, where query
point falls.</p>
        <p>To construct LSH family, one needs to choose hash
functions and determine probabilities P1 and P2.
Indexing structure, according to these parameters can
do nearest neighbors searching with following
query(2) and preprocessing(3) time:
( log1/ P1 )
( log1/ P2 )
n</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Data structures and algorithms</title>
      <sec id="sec-4-1">
        <title>4.1 Algorithms description</title>
        <p>In the experiments, we would rely on
highperformance relational database system. Our storage
structure was constructed on Microsoft SQL-server.
The data were presented in the form of points of
multidimensional space. We consider the objects as
multidimensional vectors.</p>
      </sec>
      <sec id="sec-4-2">
        <title>4.1.1. Spanning tree</title>
        <p>The first storage structure organized as follows.
For a given vector space we construct a minimum
length spanning tree. We accept vectors as individual
graph components and compute all pairwise distances
between them.</p>
        <p>The metric space is defined as a pair (D; d) where
D denotes the domain of objects and d: DЧD → R is a
total function which must have the well-known
nonnegativity, symmetry, identity and triangle inequality
properties. The distance is calculated using the metric
of L1.</p>
        <p>We create index structure so:
A. Add to the tree minimal length arc if endpoints
of this arc belong to different components. At
the same time we restrict maximum number of
arcs entering each vertex.</p>
        <p>B. Repeat step A until the number of components
becomes equal to one.</p>
        <p>C. Split the tree to l components by removing l
longest arcs. During splitting we monitor the
number of vertices in the connected
component – it must be more then min and
less then max.</p>
        <p>D. For all building component we find the central
vector – centroid. These centroids are vectors
in same space, but theirs quantity is much
smaller then amount of source vectors, and we
consider them as new level vectors.</p>
        <p>E. To a new level we repeat step A – D. So we
built the second level of our indexing
structure.</p>
        <p>F. We add levels with steps A – E until the
number of allocated centroids on the top-level
became sufficiently small. The latter set of
centroids forms the upper level of the index
tree.</p>
        <p>Search is organized as follows:
A. Begin from upper level component.</p>
        <p>B. Calculate distances between the current level's
vectors and given search query.</p>
        <p>C. We choose the nearest vector and the
corresponding component. We proceed to the
next level and repeat step B. Then, using
precalculated matrix of distances, we choose
the nearest centroid and go to the next level.</p>
        <p>D. On lowest level we select nearest vectors to
the query.</p>
        <p>By adding new vector:
A. Repeat steps A-D from search, we find the
lowest level component which centre is nearest
to the specified vector.</p>
        <p>B. If number of vectors exceeds the upper limit,
we do not divide it into two parts, and climb
one level up and perform re-clustering for all
vectors caught in this component.</p>
      </sec>
      <sec id="sec-4-3">
        <title>4.1.2. s-stable distribution LSH</title>
        <p>
          This randomized algorithm is using the idea, described
in [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]
        </p>
        <p>Here we use scalar product with random vectors
from s-stable distribution to “sketch” initial high
dimensional vector.</p>
        <p>Locality-sensitive hashing family with parameters
(R , cR, P1, P2)</p>
        <p>(P1,P2 – probabilities of “good” and “bad”
collisions, R – query radii, c – approximation factor) is
defined as follows:</p>
        <p>⎢ a ⋅ v + b ⎥
h(v)= ⎢ ⎥ .</p>
        <p>⎣ w ⎦
(4)
a – random vector from s-stable distribution,
predefined in pivots table; b – random shift, chosen
uniformly at random from [0..w]; v – vector from
initial dataset.</p>
        <p>Due to s-stability, for every two vectors (p, q)
distance between their projections (a.p – a.q) is
distributed as</p>
        <p>s
distribution. It means that if two points a near( low
p − q</p>
        <p>X where X is a s-stable
p − q ) then they should collide
with high
probability, and if they are far they should collide with
small probability.</p>
        <p>However, if we use these functions to preprocess
dataset, we will have a plenty of false-positive answers
To make an indexing structure, we need to
precompute parameters L, K and w.</p>
        <p>w can be estimated using formula (6)
wmin = argminw
log1/ P1 .</p>
        <p>log1/ P2</p>
        <p>Parameters K and L are choosing experimentally by
constructing different data structures, satisfying
equation (7)</p>
        <p>⎢ log1/ д ⎥
L = ⎢
⎣ − log(1 − Pk )⎥ .</p>
        <p>1 ⎦
д = 1 − (1 − P K )L because of low difference
1
between P1 and P2</p>
        <p>To increase it, we construct composite hash
function gi , i ∈1..L as a concatenation of hash
functions hi, j , j ∈1..K .</p>
        <p>For new hash functions P1 = P1K, P2 = P2K.</p>
        <p>To increase total probability of retrieving answer,
we hash dataset with L different hash functions gi.
Equation (5) describes probability д of getting a
correct answer.</p>
        <p>д = 1 − (1 − P1K )L .</p>
      </sec>
      <sec id="sec-4-4">
        <title>4.2 Indexing on spanning tree</title>
      </sec>
      <sec id="sec-4-5">
        <title>4.2.1. Data structures</title>
        <p>For indexing structure we used 4 tables. First table
stores coordinates of vectors. In order to the table
structure not to depend on the dimension of space,
each vector is represented in the table as a set of rows
one row for each coordinate of the vector. Each row
has the following structure:</p>
        <p>Vector number Int
Coordinate number Int
Value Float</p>
        <p>The second table stores calculated distances
between all pairs of vectors. Algorithm performance
doesn't depend on distance measure. In our
experiments distance was calculated using the metric
of L1, but for the method it does not matter. Our
function is defined as follows: r(x, y)=∑|xi-yi|. With
these distances construct a table of distances in each
row that stores the distance between two vectors.</p>
        <p>Table with attributes:
Vector number 1 Int
Vector number 2 Int
Distance Float
Component number Int
(5)
(6)
(7)</p>
        <p>We build a spanning tree of minimum
length(depth?) and divide it into components. For arcs
not belonging to spanning tree component number is
equal to zero, otherwise, this field indicates the
number of components, which the arc belongs to.</p>
        <p>This table will be very large, but it is necessary
only at the base index constructing stage. Later during
search and insertion, we need only some of pairwise
distances.</p>
        <p>Vector table is as follows:
Vector number Int
Component number Int
Distance Float
Low-level vectors number Int</p>
        <p>For top-level vectors component number equals
zero, else this parameter indicates the number of
components, which contains this vector.</p>
        <p>We use the distance between vectors and
component center by searching. For top-level vectors
this distance is zero. For every vector-centroid we
store low-level vector number - is necessary for know
how many vectors contains this component.</p>
        <p>The table structure component:
Component number Int
Level Int
Vectors amount Int
Centroid number Int</p>
        <p>Vectors amount indicates how many vectors are at
the lowest level of this component.</p>
      </sec>
      <sec id="sec-4-6">
        <title>4.1.2 Index structure construction</title>
        <p>To construct a spanning tree minimum length we
use the following algorithm:
1. We consider multi-dimensional vectors as
vertices of the tree and the distance between
the vectors of the arc. At the lower level we
assume each node a separate connected
component. We set all component numbers to
zero
2. Compute all pairwise distances and sort them
in ascending order.
3. Select next minimum length arc with zero
component number. Consider vectors - the
ends of the selected arc. If these vectors
belong to one component, then we skip this arc
and repeat step 3 with the next arc.
4. Check the number of arcs included in these
peaks and owned by any component. The
classical tree construction algorithm was
modified to avoid height degree of nodes. To
ensure this rule the number of edges adjacent
to a node is restricted with a parameter. (no
more Nin). If at least one end of the arc
constraint is violated, then we skip this arc
(with marking – set component number
negative) and goto step 2.
5. Add to the spanning tree arc between two
vertices.
6. Connect these components are connected into
one.
7. Continue to step 3 - 6 up until all the vertices
not included in one connected component.
8. Divide constructed spanning tree into several
connected components. Each component must
have from Nmin to Nmax vertices. Number of
components depends on the number of vectors
stored in the table, and is determined with Nmin
and Nmax. When we split a spanning tree of
connected components of the arcs belonging to
the spanning tree, we select the arc with
maximum length. Exclude this arc from the
spanning tree, forming two connected
components. Check that the number of vectors
in the resulting components more Nmin. If not,
it returns back and mark the removed arc.
Iterate arcs from the spanning tree, while not
succeed to break a connected component into
two parts. Then divide each new piece, while
the size of the component will not appear
between Nmin to Nmax.
9. In each component we find the centroid. To
find value of the i-th component centroid we
average values of the i-th component's vectors
in a given connected component. For each
component, we store the number of vectors in
it.
10. Consider centroids as multidimensional
vectors on the next level. If vectors amount is
more than given Nmax we repeat steps 1-8 of
our algorithm.
4.1.3 Search
1. Begin at the top level.
2. Compute distances between stored vectors of
current level (inside current component) and
query vector, order the list by distance in
ascending order. If current level is lowest, we
found an answer.
3. Take first vector (with minimum distance),
determine the component and the number of
vectors contained in it. Exclude the first
element of the list. If the number of vectors in
the component is less than desired, then repeat
step 3.
4. Determine the vectors in selected components
and goto step 2.
4.1.4 Scalability
1. Search (step 1-4) for k=1.
2. Selected component contains vectors nearest
to given query, and we try to insert new
vector into selected component. If the number
of vectors in this connected component is less
than the maximum allowed, then this
component is updated with a new vector. We
recalculate centroid’s coordinates and the
number of vectors inside components on all
levels.
3. If number of vectors exceeds the upper limit,
we do not divide it into two parts. We climb
one level up and find all vectors belonging to
selected component of the current level, and
perform re-clustering for all vectors of this
component. We rebuild spanning tree for a
new set of vectors and divide it into
connected components. We are doing so at
every level of the indexing structure if current
component is overcrowded.</p>
        <p>Operation of completion thus obtained is
sufficient labor intensive. But we anticipate that most
queries will be directed at search and not an upgrade.</p>
      </sec>
      <sec id="sec-4-7">
        <title>4.2 LSH-method</title>
      </sec>
      <sec id="sec-4-8">
        <title>4.1.1. Data structures</title>
        <p>To implement locality-sensitive hashing using s-stable
distributions we used following structures:
Table contained vector number and nested table with
its coordinates.</p>
        <sec id="sec-4-8-1">
          <title>Vector number</title>
        </sec>
        <sec id="sec-4-8-2">
          <title>Coordinates Int</title>
        </sec>
        <sec id="sec-4-8-3">
          <title>Nested Table of Float Table with predefined pivots from normal distribution and random shift for them. Pivot number</title>
          <p>L tables for different hash functions with identical
structure: K columns with hash values of simple hash
functions and nested table for keys of vectors that have
the same hash values. We can store all hash values in
the same table because number of simple hash
functions is defined on preprocessing stage.</p>
        </sec>
        <sec id="sec-4-8-4">
          <title>Hash_value_1 Hash_value_2 …</title>
        </sec>
        <sec id="sec-4-8-5">
          <title>Hash_value_K</title>
        </sec>
        <sec id="sec-4-8-6">
          <title>Vector keys</title>
        </sec>
        <sec id="sec-4-8-7">
          <title>Float Float …</title>
        </sec>
        <sec id="sec-4-8-8">
          <title>Float</title>
        </sec>
        <sec id="sec-4-8-9">
          <title>Nested Table of Int And table, that store the choice of pivots for certain hash function</title>
        </sec>
        <sec id="sec-4-8-10">
          <title>Number of hash function Pivot_1 Pivot_2 …</title>
        </sec>
        <sec id="sec-4-8-11">
          <title>Pivot_K</title>
          <p>Int
Int
Int
…
Int
Here, number of pivots is also predefined during the
preprocessing stage.</p>
          <p>Query response time was 10 times faster than the
one in naive full scan.</p>
          <p>We also have a statistics table that is needed only for
preprocessing. It helps to determine optimal
parameters for indexing structure.</p>
        </sec>
        <sec id="sec-4-8-12">
          <title>Value of K Average query time Int Float</title>
        </sec>
      </sec>
      <sec id="sec-4-9">
        <title>4.1.2 Preprocessing and index structure construction</title>
        <sec id="sec-4-9-1">
          <title>Step 1: Preprocessing. To find optimal values for K and L we build indexing structures for different K from 3 to 15 and appropriate L, calculated by the formula (7)</title>
        </sec>
        <sec id="sec-4-9-2">
          <title>Step 2: Search. A. B. C.</title>
        </sec>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Experiment and analysis</title>
      <p>To compare described algorithms, dataset refereed
to content-based image retrieval was considered. It
consists of 25000 rows with 41 attributes, representing
different image characteristics. Methods were
implemented within Microsoft SQL-Server DBMS.
During experiments average accuracy (percent of exact
nearest-neighbors in retrieved approximate answer)
and relative time consumption were calculated.</p>
      <p>Results for spanning-tree algorithm:
1-NN query – 87%
10-NN query – 70%
50-NN query – 79%</p>
      <p>Method based on LSH produced the following results:
1-NN query – 62%
10-NN query – 50%
50-NN query – 34%
However, hashing algorithm worked approximately 40
times faster than the previous one.</p>
    </sec>
    <sec id="sec-6">
      <title>6. Conclusion</title>
      <p>In this paper two different algorithms for
multidimensional indexing were described. These
algorithms were implemented and analyzed with
different parameters on real dataset. Based on the
results of experiments, we can draw the following
conclusions: first method proposed gives a sufficiently
accurate result, but compared to LSH lose heavily in
time. If the k-NN search is not 2k, but 3-4k, then the
precision increases, but difference between tree and
hashing query response time is even more significant.
♣This work was supported by RFBR (project 10-07-00156-а).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Lars</given-names>
            <surname>Arge</surname>
          </string-name>
          , Mark de Berg, Herman J.
          <string-name>
            <surname>Haverkort</surname>
          </string-name>
          , Ke Yi:
          <article-title>The Priority RTree: A Practically Efficient</article-title>
          and WorstCase Optimal RTree
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>Stefan</given-names>
            <surname>Berchtold</surname>
          </string-name>
          , Daniel A. Keim,
          <string-name>
            <surname>Hans-Peter Kriegei</surname>
          </string-name>
          :
          <article-title>The X-tree: An Index Structure for HighDimensional Data</article-title>
          ,
          <source>In Proceedings of the 22nd International Conference on Very Large Databases</source>
          (
          <year>1996</year>
          ), pp.
          <fpage>28</fpage>
          -
          <lpage>39</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>D.</given-names>
            <surname>Bremner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Demaine</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Erickson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Iacono</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Langerman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Morin</surname>
          </string-name>
          , and
          <string-name>
            <given-names>G.</given-names>
            <surname>Toussaint</surname>
          </string-name>
          ,
          <article-title>"Outputsensitive algorithms for computing nearestneighbor decision boundaries,"</article-title>
          <source>Discrete and Computational Geometry</source>
          , Vol.
          <volume>33</volume>
          , No.
          <volume>4</volume>
          ,
          <issue>2005</issue>
          , pp.
          <fpage>593</fpage>
          -
          <lpage>604</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Ciaccia</surname>
          </string-name>
          et al.
          <article-title>M-tree: An Efficient Access Method for Similarity Search in Metric Spaces</article-title>
          .
          <source>VLDB1997</source>
          ,
          <year>1997</year>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Thomas</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Cover and Peter E. Hart</surname>
          </string-name>
          ,
          <article-title>"Nearest neighbor pattern classification,"</article-title>
          <source>IEEE Transactions on Information Theory</source>
          , (
          <year>1967</year>
          ) Vol.
          <volume>13</volume>
          (
          <issue>1</issue>
          ) pp.
          <fpage>21</fpage>
          -
          <lpage>27</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Gionis</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Indyk</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Motwani</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          (
          <year>1999</year>
          ). ,
          <article-title>"Similarity Search in High Dimensions via Hashing"</article-title>
          .
          <source>Proceedings of the 25th Very Large Database (VLDB) Conference.</source>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Guttman: R-Trees</surname>
          </string-name>
          :
          <article-title>A Dynamic Index Structure for Spatial Searching</article-title>
          .
          <source>SIGMOD Conference</source>
          <year>1984</year>
          :
          <fpage>47</fpage>
          -
          <lpage>57</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Yannis</given-names>
            <surname>Manolopoulos</surname>
          </string-name>
          , Alexandros Nanopoulos,
          <string-name>
            <given-names>Apostolos N.</given-names>
            <surname>Papadopoulos</surname>
          </string-name>
          , Yannis Theodoridis: R-Trees
          <source>: Theory and Applications</source>
          , Springer,
          <year>2005</year>
          . ISBN 1-85233-977-2
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Nigsch</surname>
            ,
            <given-names>F.; A.</given-names>
          </string-name>
          <string-name>
            <surname>Bender</surname>
            ,
            <given-names>B. van Buuren</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Tissen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E. Nigsch &amp; J.B.O.</given-names>
            <surname>Mitchell</surname>
          </string-name>
          (
          <year>2006</year>
          ).
          <article-title>"Melting Point Prediction Employing k-nearest Neighbor Algorithms and Genetic Parameter Optimization"</article-title>
          .
          <source>Journal of Chemical Information and Modeling</source>
          <volume>46</volume>
          (
          <issue>6</issue>
          ):
          <fpage>2412</fpage>
          -
          <lpage>2422</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Alexander</surname>
            <given-names>Thomasian</given-names>
          </string-name>
          , Lijuan Zhang:
          <article-title>Persistent clustered main memory index for accelerating kNN queries on high dimensional dataset Multimedia Tools and Applications Volume 38 Issue 2</article-title>
          ,
          <string-name>
            <surname>June</surname>
            <given-names>2008</given-names>
          </string-name>
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>Heng</given-names>
            <surname>Tao</surname>
          </string-name>
          <string-name>
            <surname>Shen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Xiaofang</given-names>
            <surname>Zhou</surname>
          </string-name>
          ,
          <string-name>
            <surname>Aoying Zhou</surname>
          </string-name>
          :
          <article-title>An adaptive and dynamic dimensionality reduction method for high-dimensional indexing</article-title>
          .
          <source>The VLDB Journal</source>
          , Volume
          <volume>16</volume>
          Issue 2,
          <string-name>
            <surname>April</surname>
            <given-names>2007</given-names>
          </string-name>
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>Gylfi</given-names>
            <surname>Thуr</surname>
          </string-name>
          <string-name>
            <surname>Gudmundsson</surname>
          </string-name>
          , Bjцrn Thуr Jуnsson, Laurent Amsaleg:
          <article-title>A large-scale performance study of cluster-based high-dimensional indexing</article-title>
          .
          <source>Proceeding VLS-MCMR</source>
          '
          <fpage>10</fpage>
          - international workshop on Very-large
          <article-title>-scale multimedia corpus, mining</article-title>
          and retrieval
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Stanislav</surname>
            <given-names>Barton</given-names>
          </string-name>
          ,
          <article-title>Valйrie Gouet-Brunet and Marta Rukoz: Large Scale Disk-Based Metric Indexing Structure for Approximate Information Retrieval by Content</article-title>
          .
          <source>Proceeding EDBT/ICDT 2011 Joint Conference</source>
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Stephan</surname>
            <given-names>Gьnnemann</given-names>
          </string-name>
          , Hardy Kremer, Dominik Lenhard, and Thomas Seidl:
          <article-title>Subspace Clustering for Indexing High Dimensional Data: A Main Memory Index based on Local Reductions and Individual Multi-Representations</article-title>
          .
          <source>Proceeding EDBT/ICDT 2011 Joint Conference</source>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>P.</given-names>
            <surname>Indyk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Motwani</surname>
          </string-name>
          .
          <article-title>Approximate nearest neighbor: towards removing the curse of dimensionality</article-title>
          .
          <source>Proceedings of the Symposium on Theory of Computing</source>
          ,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>M.</given-names>
            <surname>Datar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Immorlica</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Indyk</surname>
          </string-name>
          , and
          <string-name>
            <given-names>V.</given-names>
            <surname>Mirrokni</surname>
          </string-name>
          .
          <article-title>Locality sensitive hashing scheme based on p-stable distributions</article-title>
          .
          <source>Proceedings of the ACM Symposium on Computational Geometry</source>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>P.</given-names>
            <surname>Indyk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Andoni</surname>
          </string-name>
          .
          <article-title>Near optimal hashing algorithms for approximate nearest neighbors in high dimensions</article-title>
          .
          <source>Foundations of Computer Science</source>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>N.</given-names>
            <surname>Alion</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Chazelle</surname>
          </string-name>
          .
          <article-title>Approximate nearest neighbors and Fast Johnson-Lindenstrauss Transform</article-title>
          .
          <source>Proceedings of the Symposium on Theory of Computing</source>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>