LSH forest要解决的问题是,使用较少的存储空间,建立较高效的索引。
LSH forest逻辑结构描述:
从H集合中随机选取km(变量)个哈希函数,组成一个hash序列,则一个点p被映射为g(p,x) = (h1(p), h2(p),......., hx(p)),称为点p的的 label,长度为x 。
LSH forest逻辑结构描述:
从H集合中随机选取km(变量)个哈希函数,组成一个hash序列,则一个点p被映射为g(p,x) = (h1(p), h2(p),......., hx(p)),称为点p的的 label,长度为x 。
对所有label构造前缀树(LSH Tree),每个叶子节点对应一个点;由l 个这样的树构成LSH forest。举例如下:
接下来看LSH forest的增删查操作过程:
(1)查询
自顶向下阶段:从某棵树的根节点开始,寻找与q 的label 最长前缀匹配的叶节点;
自底向上阶段:根据上一阶段的结果,对forest中的所有的树进行自底向上搜索,最后返回M个点,排序后就可以选择点q的m-NN了。
(2)插入 插入一点q采用上述自顶向下的方式。若插入点与树中的点冲突,则需要对这两点的label进行延长一定的位数,确保label不同。
(3)删除 也是采用自顶向下,按照label找到点删除即可。(原文中的意思是,删除完了再来一遍自底向下来压缩树中其它点的label么……)