【问题标题】:How to lookup the most similar bit vector in an prefix tree for NN-search?如何在前缀树中查找最相似的位向量以进行 NN 搜索?
【发布时间】:2013-06-24 18:55:23
【问题描述】:

这个问题解释了我试图解决的问题: Finding the single nearest neighbor using a Prefix tree in O(1)?

我的问题是关于该问题页面中的提议的解决方案部分。在该部分中提到,我们通过从节点开始遍历树来从每个前缀树中找到最近的邻居。查找前缀树中是否存在键很简单,但得到最相似的键我根本不明白。如何做到这一点?

我希望有人可以向我解释这一点,如果不是以图形方式(这是首选),那么至少有一些细节。

编辑:

这是论文的代码。它是用 python 编写的,不幸的是我以前从未使用过 python。如果有人熟悉 python 并且可以查找代码以查看他们如何使用前缀树找到最近的邻居。 https://github.com/kykamath/streaming_lsh/blob/master/streaming_lsh/nearest_neighbor_lsh.py

https://github.com/kykamath/streaming_lsh/blob/master/streaming_lsh/classes.py

【问题讨论】:

  • 前缀树有 O(L) 而不是 O(1);其中 L 是前缀树高度

标签: java python algorithm prefix-tree approximate-nn-searching


【解决方案1】:

首先要知道它们会遍历整个树。通过遍历整棵树,他们可以保证找到最相似的邻居。

为了在一般情况下更高效,请使用 DFS 图遍历树。请注意,由于它是一棵树,因此访问节点不需要着色方案。

从最近的对象作为 null 和树的根开始。

对于每个节点,您应该按照子节点添加到编辑距离的顺序遍历子节点,并且如果添加的编辑距离不会大于到最近对象的距离。例如,对于汉明距离,首先遍历将在总距离中添加“O”的孩子,然后再遍历将在总距离中添加“1”的孩子。但如果这会使编辑距离大于当前最近距离,请不要遍历“1”子节点。

当您在前缀树中遇到“单词”时,检查它与查询对象的距离是否小于最近的对象并将其分配给最近的对象。

【讨论】:

  • 但是遍历整个树会使使用前缀树而不是排序列表的想法变得毫无意义。这仍然需要很多时间。
  • 我添加了一个我从作者那里得到的代码。它是用python编写的。你能看一下吗,因为我以前从来没有用过python。
猜你喜欢
  • 2013-01-25
  • 2013-04-09
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
相关资源
最近更新 更多