在手机中搜索电话号码的算法?

时间:2013-04-12 15:20:11

标签: algorithm mobile

当前智能手​​机操作系统使用哪种通用算法来搜索联系人列表中的名称?

联系人列表并不大但是,当我们输入“A”时,所有以“A”开头的名字都很容易显示。 'A'后跟'B',会带来像Abe,Abott等名字,

2 个答案:

答案 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)

我不是百分百肯定,但如果我猜测它会是Trie

这个想法是从树的根开始,然后跟踪到叶节点的路径。你下去的每个节点都会添加另一个字母作为后缀。

在你的例子中,树看起来像是:This(没有足够的代表来嵌入图像)

双圈定义“接受”状态,并不总是叶子节点。当您在Trie中工作时,它将缩小您的搜索范围:

  • 在“A”之后选择“N”将拒绝“ABE”,因为它不在路径下方。
  • 在“ANN”之后选择“E”将拒绝“ANN”,因为它不在路径下方。