10 comments

[ 3.5 ms ] story [ 43.1 ms ] thread
Very cool. Has anyone here used BK-Trees in their work?
I don't see why this would be much better than simply doing fuzzy match on a trie.
I couldn't understand what this means -- Say we take an arbitary string, test and compare it to query. Call the resultant distance d. Because we know the triangle inequality holds, all our results must have at most distance d+n and at least distance d-n from test.

Can anyone please explain me in more simpler terms.

It's easiser to understand by using 2D geometry. Pick one point on a paper and call it query, the input, and draw a circle of radius n around that point. Your goal is to find the points in the dataset which are inside the circle. Let's call those points answers.

Pick an arbitrary point (in the dataset) and call it test. The distance between test and query is d. Now, you can see the distance between test and the furthest and closest points in answers are d+n and d-n, respectively (assuming d > n).

Since the dataset is organized by distance, we can quickly narrow the range of search.

thanks dude, for clearing it up. I don't know why I always get confused on easy things like this..
Metric trees (sometimes called ball trees) are a simple generalization of this to arbitrary metrics. They're also useful for points in a high dimensional euclidean space that have low intrinsic dimensionality.