Nearest neighbor searching is the following problem: we are given a set S of n data points in a metric space, X, and are asked to preprocess these points so that, given any query point q ∈ X, the data point nearest to q can be reported quickly. Nearest neighbor searching has applications in many areas, including knowledge discovery and data mining [18], pattern recognition and classification [14,17], machine learning [13], data compression [22], multimedia databases [19], document retrieval [15], and statistics [16].There are many possible choices of the metric space. Throughout we will assume that the space is R d , real d-dimensional space, where distances are measured using any Minkowski L m distance metric. For any integer m ≥ 1, the L m -distance between points p = (p 1 , p 2 , . . . , p d ) and q = (q 1 , q 2 , . . . , q d ) in R d is defined to be the m-th root of 1≤i≤d |p i − q i | m . The L 1 , L 2 , and L ∞ metrics are the well-known Manhattan, Euclidean and max metrics, respectively.Our primary focus is on data structures that are stored in main memory. Since data sets can be large, we limit ourselves to consideration of data structures whose total space grows linearly with d and n. Among the most popular methods are those based on hierarchical decompositions of space. The seminal work in this area was by Friedman, Bentley, and Finkel [21] who showed that O(n) space and O(log n) query time are achievable for fixed dimensional spaces in the expected case for data distributions of bounded density through the use of kd-trees. There have been numerous variations on this theme. However, all known methods suffer from the fact that as dimension increases, either running time or space increase exponentially with dimension.The difficulty of obtaining algorithms that are efficient in the worst case with respect to both space and query time suggests the alternative problem of finding approximate nearest neighbors. Consider a set S of data points in R d and a query point q ∈ R d . Given ǫ > 0, we say that a point p ∈ S is a (1 + ǫ)-approximate nearest neighbor of q if dist(p, q) ≤ (1 + ǫ)dist(p * , q), ⋆ The support of the National Science Foundation under grant CCR-9712379 is gratefully acknowledged.