README.txt 1.9 KB

1234567891011121314151617181920212223242526272829303132
  1. This directory contains a C implementation of the R*-tree data structure.
  2. The implementation is originally from the RTree test code of Toni
  3. Guttmann, and later ported to ANSI C on a variety of platforms by
  4. Daniel Green (dgreen@superliminal.com).
  5. Later on it was converted to an R*-tree by Markus Metz based on the article
  6. http://dbs.mathematik.uni-marburg.de/publications/myPapers/1990/BKSS90.pdf.
  7. Paul Brooke (pbrooke@mindscape.com) discovered an interesting anomaly in
  8. the original algorithm which uses the rectangular volumes of nodes as the
  9. fitting and splitting criteria which is that degenerate rectangles (i.e.
  10. flat in one or more dimensions) can appear as attractive candidate nodes
  11. to contain similarly degenerate nodes which are spatially quite distant.
  12. (A goal that R-trees are meant to avoid). For example, in two dimensions
  13. given two rects where one spans the volume (0,1)->(1,2) and the other spans
  14. (1000,0)->1001,0), into which one should we add a third node spanning
  15. (0,0)->1,0)? Clearly it should go into the first one, but that doubles its
  16. volume to two units whereas adding it to the second one leaves it unchanged
  17. at zero. These sorts of degeneracies are not rare cases since data are
  18. often axially aligned.
  19. Brooke suggested using the volume of the bounding sphere as the area metric
  20. for nodes. This has worked quite well and is currently the metric being
  21. used by the code here. Also implemented but not currently used are metrics
  22. using the N-dimensional surface area and the original implementation using
  23. the N-dimensional box volume. There is also a fast approximation to the
  24. spherical volume as suggested by Brooke. To switch to using the original
  25. box volume for example, simply change the calls to RTreeRectSphericalVolume
  26. to use RTreeRectVolume instead. This is clearly an area deserving more
  27. research. The file sphvol.c contains the code used to generate the table
  28. of unit sphere volumes in the first 20 dimensions.