我试图解决的问题在这个问题中解释: 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
答案 0 :(得分:2)
首先知道它们遍历整个树。通过迭代整个树,他们可以保证找到最相似的邻居。
为了在平均情况下更有效,请使用树的DFS图遍历。请注意,由于它是树,因此不需要为受访节点设置着色方案。
从最近的对象开始为null并在树的根处。
对于每个节点,您应按照它们添加到编辑距离的顺序遍历子项,如果添加的编辑距离不大于到最近对象的距离,则应 。例如,对于汉明距离,首先遍历将在总距离上添加“O”的子项,然后遍历将向总距离添加“1”的子项。但是,如果这会使编辑距离大于当前最近距离,则不要遍历“1”子项。
当您在前缀树中遇到“单词”时,检查它是否与查询对象的距离小于最近的对象并将其分配给最近的对象。