什么数据结构或算法用于自动完成?

时间:2014-04-18 11:11:55

标签: algorithm data-structures autocomplete

当我们键入一半命令或名称并按Tab键时,它会立即找到剩余部分。下面使用了什么数据结构/算法来实现这种效率?

2 个答案:

答案 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的模块来处理这些。