当前智能手机操作系统从联系人列表中搜索姓名的通用算法是什么?
联系人列表并不大,但是当我们输入“A”时,所有以“A”开头的名字都很容易出现。'A' 后跟 'B',将带来 Abe、Abott 等名称,
快速执行此操作的一种方法是使用 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 遵循相同的过程 - 按照名称中每个字母的正确分支(在它们不存在的地方添加新分支)直到到达名称的末尾,此时将其添加为叶子。