当我们键入一半命令或名称并按Tab键时,它会立即找到剩余部分。下面使用了什么数据结构/算法来实现这种效率?
答案 0 :(得分:2)
trie是解决此问题的良好数据结构。
这是一棵树,其中每条边表示下一个可能的字符,该字符将附加到由根目录路径定义的字符串中。
因此,如果您输入in
,则需要随root -i-> i -n-> in
一起旅行,然后浏览该子树以查找inn
。
您可以在每个节点上包含一个标志,以指示它是否包含有效单词(对于非叶子,因为只有在包含有效单词时才会创建叶子。)
可以使用的更常见(但不太专业)的数据结构是binary search tree (BST)。
二叉搜索树(BST)...是基于节点的二叉树数据结构,其中每个节点具有可比较的密钥(和相关值),并且满足任何节点中的密钥大于密钥的限制。在该节点的左子树中的所有节点中,并且小于该节点的右子树中所有节点中的键。
根据BST的实施情况,您应该能够:
调用range
函数获取两个值之间的所有元素,特别是字符串及其“增量”之间的所有元素。例如,如果给定abc
,则“递增”字符串将为abd
。如果给定abz
,则'递增'字符串将为aca
(假设我们在BST中仅允许a-z
,否则您只需在字符集z
之后选择字符例如,在ASCII中为{
。
调用ceiling
- 类型函数以获得大于或等于给定字符串的最小元素,然后重复获取有序后继,直到获得的元素不再以给定字符串开头
答案 1 :(得分:1)
您可以将您的字符串存储在Directed Acyclic Graph。
中图表的每个节点对应于可能的前缀,其中包含指向所述前缀的可能的单字母扩展名的链接。图的根与空前缀一起使用。叶子可能是完整的条目。
在Python中有一个名为DAWG的模块来处理这些。