/fastann

A library for fast approximate nearest neighbours

Primary LanguageC++BSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

---------------------------------------------------------------------
| FASTANN: A library for fast approximate nearest neighbours        |
|                                                                   |
| James Philbin <philbinj@gmail.com>                                |
---------------------------------------------------------------------
The plan is to support a number of different approximate nearest
neighbour routines and possibly different distance norms. At the
moment only the Euclidean distance is supported with the following
methods:
- Exact NN
- Approximate k-d trees

Both methods use some fairly optimized distance functions (though
these can be improved).

---------------------------------------------------------------------
| INSTALLATION                                                      |
---------------------------------------------------------------------
Before installation the following requirements should be met:
- Linux
- CMake >= 2.6.0
- Yasm (http://www.tortall.net/projects/yasm/) (OPTIONAL)

Build the library for installing to /usr/local/ (default /usr/)
> PREFIX=/usr/local/ cmake . && make

Test the library (everything should say PASSED)
> make test

Time the routines
> make perf

Install the library to $PREFIX/include and $PREFIX/lib
> make install

---------------------------------------------------------------------
| INTERFACES                                                        |
---------------------------------------------------------------------
The Python interface has the following requirements:
- Python >= 2.5.0
- Numpy >= 1.2.0

Install (as root)
> cd interfaces/python && python setup.py install

---------------------------------------------------------------------
| USAGE                                                             |
---------------------------------------------------------------------
See examples/

---------------------------------------------------------------------
| TODO                                                              |
---------------------------------------------------------------------
In no particular order:
- Better use of cache in kdtree. This might involve using prefetches,
  re-ordering the points in some way or even placing the point data in
  the nodes.
- Other types of approximate search such as LSH and Spectral Hashing.

---------------------------------------------------------------------
| CHANGELOG                                                         |
---------------------------------------------------------------------
v0.22
    - Adding stuff for installing to a specified path
v0.21
    - Added reference
v0.2
    - Moved over to using CMake -- much improved build.
    - Implemented C compatible routines in fastann.h
    - Added Python wrapper routines using ctypes.
    - Faster distance functions for 32-bit and 64-bit platforms.
v0.11
    - Moved to pure static library.
    - Added experimental hand coded double precision distance 
      routine.
v0.1
    - Initial checkin.
    - Support for exact NN and approximate k-d trees.

---------------------------------------------------------------------
| REFERENCES                                                        |
---------------------------------------------------------------------
[1] Muja, M. and Lowe, D.
    Fast approximate nearest neighbors with automatic algorithm 
    configuration, VISAPP 2009