I am doing a research on approximate nearest neighbor algorithms.
I recently found the Annoy Library which does an amazing job in finding KNN in reasonable speed. For deeper analysis, you can skim the meetup slides.
After reading the slides and inspecting the source code, I cannot see a reason why this algorithm works with high dimensional data better than KD-Tree.
KD-Tree is a great NN algorithm however in high dimensions it achieves a running time which is almost identical to a brute force search [O(n^2)] and thus it requires to check many neighboring leafs.
The reason for that is that in high dimensions, the volume of a unit sphere gets way smaller (you can take a look here).
The only difference I found in the Annoy library is that the partitioning of the space is done by using hyperplanes rather than partition one dimension at a time.
Did some ever analyzed this algorithm and can explain why it is so much faster than KD-Tree?