链接:https://www8.cs.umu.se/kurser/TDBAfl/VT06/algorithms/BOOK/BOOK/NODE39.HTM
在以下问题中,作者讨论了使用BST作为length-k子字符串的字典。谁能在问题背景下解释他的做法。
答案 0 :(得分:0)
仔细阅读它似乎就像他们只是将所有length-k子字符串都转储到标准BST中一样。项的排序是按字典顺序确定的(一次比较一个字符,直到发现不匹配,然后根据哪个字符串的字符比另一个字符串的字符低)决定比较的结果。
要检查新的长度为2k的字符串是否有效,他们在其上运行了一个长度为k的滑动窗口,以检查每个长度k的子字符串是否在BST中。如果不是,他们可以拒绝长度为2k的字符串,然后继续下一个候选者。这将花费时间O(k 2 log n),其中n是长度为k的子串的总数,因为每个BST查找都需要时间O(k log n)(被看作为O(k)的子串,每次查找都将淘汰O(log n)比较,而每次费用为O(k)。
他们最后描述的更快的解决方案是使用后缀树,后缀树加上后缀链接,以利用每次搜索是通过删除最后一个搜索的第一个字符并附加一些新字符来构成的事实来加快搜索速度。