一家手机公司将推出一款现有智能手机的新型号,最大内存为2千兆字节。作为程序员,您需要开发应用程序以更好地利用其电话簿资源。
您应该记住,单个联系人可以按字母顺序存储为“名字”,“姓氏”和“电话号码”。随着时间的推移,当电话簿中出现或删除新联系人时,电话簿会更新。
以下是执行所需任务时必须牢记的两个因素。
空间限制,因为您知道可用空间有限。访问特定联系人所需的时间不得超过给定的阈值。
作为程序员,您将使用哪种数据结构来执行上述任务,提供正确的理由来支持您的答案?
答案 0 :(得分:1)
我将使用 trie 。
在计算机科学中,trie,也称为数字树,有时候是基数树或前缀树(因为它们可以通过前缀搜索), 有序树数据结构,用于存储动态集或 关联数组,其中键通常是字符串。与二进制不同 在搜索树中,树中没有节点存储与之关联的密钥 节点;相反,它在树中的位置定义了它的关键 已关联的。节点的所有后代都具有公共前缀 与该节点关联的字符串,与根关联 空字符串。价值观不一定与每个人相关 节点。相反,值往往只与叶子相关联,并与之相关 一些与感兴趣的键相对应的内部节点。为了 前缀树的空间优化表示,请参见紧凑前缀树。 在所示示例中,键列在下面的节点和值中 他们。每个完整的英文单词都有一个任意整数值 与之相关联。特里可以被视为树形的确定性 有限自动机。每个有限语言都由trie生成 自动机,每个特里可以压缩成确定性的 非循环有限状态自动机。
来自维基百科页面的特里图片
trie与二叉搜索树相比具有许多优点。还可以使用trie替换哈希表,它具有以下优点:
根据维基百科页面,Trie是一个非常适合表示Predictive Text或Autocomplete词典的数据结构。 为了存储电话号码,我们只需要在包含电话号码的trie末尾添加一个额外的节点。 此外,我们需要构建另一个用于存储数字的trie。在这种情况下,number代替字母而成为trie中的节点。最后一个节点,即叶节点,包含拥有该号码的人员的姓名。通过使用这两次尝试,我们可以轻松实现电话簿。我们可以搜索该人的数量和/或姓名。
维基百科文章中的一段:
trie的常见应用是存储预测文本或 自动填充字典,例如在移动电话上找到的字典。这样 应用程序利用特里快速搜索的能力, 插入和删除条目
答案 1 :(得分:0)
我在编程方面不是很有经验,但我认为Hashing with Chaining可能是一种适合电话本的方法。我相信这种结构涵盖了你要求的所有要求。
我希望我没有弄清楚我的答案。