阅读这篇关于 BK Trees 的帖子,我发现以下代码段有点令人困惑:
“假设我们有两个参数,查询,我们在搜索中使用的字符串,以及字符串可以与查询的最大距离并且仍然返回。假设我们采用任意字符串,测试并将其与查询进行比较. 称结果距离为 d。因为我们知道三角不等式成立,所以我们所有的结果必须最多有距离 d+n,至少距离测试有 dn。
我可以直观地看到,如果某些东西d
与我正在搜索的单词相去甚远,并且我对n
错误有容忍度,那么我至少需要d-n
与我所在的词保持距离来“扭转”这些差异。同样,我最多可以有,d+n
因为在“反转”差异之后,我可以引入更多差异。
我很困惑如何使用三角不等式来得到这个。如果我们让 d(test, query) = d 和 d(query, found) <= n 那么通过不等式:
d(test, query) + d(test, nextWordToSearch) >= d(query, found)
d + d(test, nextWordToSearch) >= n
我们怎样才能找到
d - n <= d(test, nextWordToSearch) <= d + n