Jim*_*Jim 8 regex algorithm optimization trie data-structures
我开始读到Trie.我在这里也得到了朋友们的推荐:关于Trie的教程
我不清楚以下内容:
似乎继续使用Trie,假设所有将成为搜索空间并用于构建Trie的输入字符串在不同的字边界中分开.
例如,我见过的所有示例教程都使用输入,例如:
S={ball, bid, byte, car, cat, mac, map etc...}
Run Code Online (Sandbox Code Playgroud)
然后我们构建trie S并进行搜索(非常快)
我的问题是:我们最终是如何S开始的?
我的意思是在开始阅读我想象的尝试之前,这S将是一个任意长的文本,例如Shakespeare一段.
然后使用Trie我们可以很快找到东西.
但似乎事实并非如此.
这里假设输入通道(Shakespeare例如)是预先处理的,首先提取所有要获得的单词S吗?
因此,如果想要搜索模式(与Google时相同,并且在搜索查询中看到所有页面也有空格),那么Trie是不合适的?
我们何时才能知道Trie是否是我们实际可以使用的数据结构?
小智 7
如果您想要快速查找固定字典,则尝试非常有用.与散列表相比,它可能需要较少的存储空间来存储大型字典,但查找起来可能需要更长时间.我使用它的一个示例位置是将URL映射到Web服务器上的操作,如果可能存在基于前缀的功能继承.在这里递归trie可以适当查找需要为特定url调用的所有方法.存储字典也是有效的.
对于进行文本搜索,您通常使用具有权重的leximes的令牌向量(可能基于出现频率)来表示文档,然后针对其进行搜索以获得针对特定搜索向量的文档的排名.有许多标准库可以做到这一点我建议使用而不是编写自己的 - 特别是删除停用词,处理同义词和词干.