BST 如何部署为字符串搜索的字典?
How are BSTs deployed as dictionaries for string search?
link:https://www8.cs.umu.se/kurser/TDBAfl/VT06/algorithms/BOOK/BOOK/NODE39.HTM
在下面的问题中,作者讨论了使用 BST 作为长度为 k 的子字符串的字典。谁能解释一下他是如何在问题背景下这样做的。
仔细阅读后,他们似乎只是将所有 length-k 子字符串转储到标准 BST 中。项目的顺序是使用字典顺序确定的(一次比较一个字符,直到发现不匹配,然后根据哪个字符串的字符比另一个字符低来决定比较的结果)。
为了检查长度为 2k 的新字符串是否有效,他们 运行 在其上滑动 window 长度为 k 的字符串,检查每个长度为 k 的子字符串是否在 BST 中。如果不是,他们可以拒绝长度为 2k 的字符串并继续寻找下一个候选者。这将花费时间 O(k2 log n),其中 n 是 length-k 子串的总数,因为每个 BST 查找需要时间 O(k log n) (O (k) 个子字符串查找,每次查找都以 O(k) 次为代价退出 O(log n) 次比较。
他们在最后描述的更快的解决方案使用后缀树增加后缀链接来加快搜索速度,因为每个搜索都是通过删除最后一个搜索的第一个字符并附加一些新字符来形成的。
link:https://www8.cs.umu.se/kurser/TDBAfl/VT06/algorithms/BOOK/BOOK/NODE39.HTM
在下面的问题中,作者讨论了使用 BST 作为长度为 k 的子字符串的字典。谁能解释一下他是如何在问题背景下这样做的。
仔细阅读后,他们似乎只是将所有 length-k 子字符串转储到标准 BST 中。项目的顺序是使用字典顺序确定的(一次比较一个字符,直到发现不匹配,然后根据哪个字符串的字符比另一个字符低来决定比较的结果)。
为了检查长度为 2k 的新字符串是否有效,他们 运行 在其上滑动 window 长度为 k 的字符串,检查每个长度为 k 的子字符串是否在 BST 中。如果不是,他们可以拒绝长度为 2k 的字符串并继续寻找下一个候选者。这将花费时间 O(k2 log n),其中 n 是 length-k 子串的总数,因为每个 BST 查找需要时间 O(k log n) (O (k) 个子字符串查找,每次查找都以 O(k) 次为代价退出 O(log n) 次比较。
他们在最后描述的更快的解决方案使用后缀树增加后缀链接来加快搜索速度,因为每个搜索都是通过删除最后一个搜索的第一个字符并附加一些新字符来形成的。