码迷,mamicode.com
首页 > 其他好文 > 详细

Annoy解析

时间:2017-03-09 10:43:11      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:idt   相互   img   log   通过   搜索   节点   定义   logs   

Annoy是高维空间求近似最近邻的一个开源库。

Annoy构建一棵二叉树,查询时间为O(logn)。

Annoy通过随机挑选两个点,并使用垂直于这个点的等距离超平面将集合划分为两部分。

如图所示,图中灰色线是连接两个点,超平面是加粗的黑线。按照这个方法在每个子集上迭代进行划分。

技术分享

依此类推,直到每个集合最多剩余k个点,下图是一个k = 10 的情况。

技术分享

相应的完整二叉树结构:

技术分享

一个思想依据是:在原空间中相邻的点,在树结构上也表现出相互靠近的特点,也就是说,如果两个点在空间上相互靠近,那么他们很可能被树结构划分到一起。

如果要在空间中查找临近点,我们可以在这个二叉树中搜索。上图中每个节点用超平面来定义,所以我们可以计算出该节点往哪个方向遍历,搜索时间 log n

技术分享

 

Annoy解析

标签:idt   相互   img   log   通过   搜索   节点   定义   logs   

原文地址:http://www.cnblogs.com/futurehau/p/6524396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!