当前智能手机操作系统使用哪种通用算法来搜索联系人列表中的名称?
联系人列表并不大但是,当我们输入“A”时,所有以“A”开头的名字都很容易显示。 'A'后跟'B',会带来像Abe,Abott等名字,
答案 0 :(得分:4)
快速执行此操作的一种方法是使用trie(http://en.wikipedia.org/wiki/Trie) - 基本上,您将所有键存储在树中,其中根节点表示空输入,并且您输入的每个字符都会带您将一个分支下移到一个子树,该子树包含所有以你到目前为止所放入的字母开头的名字。这里有一个使用此技术进行自动完成的好例子:http://igoro.com/archive/efficient-auto-complete-with-a-ternary-search-tree/
在您的示例中,输入“A”会将标记为“A”的分支下移到包含所有以“A”开头的名称的子树。从那里进入'B'将沿着标记为'B'的分支下行到下一个子树,该子树将保留所有'AB'名称。向trie添加新名称遵循相同的过程 - 按照名称中每个字母的右侧分支(添加尚未存在的新分支),直到到达名称的末尾,此时将其添加为叶。
答案 1 :(得分:1)