1

这个问题解释了我要解决的问题: 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

4

1 回答 1

2

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

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

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

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

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

于 2013-06-24T21:40:31.137 回答