存储联系信息[姓名,电话号码]的最佳数据结构是什么?
在给出姓名时, Trie 可用于搜索电话号码。
如果我想根据他的电话号码找到一个人姓名怎么办?即,当我知道电话号码时,如何找到姓名?
对此类搜索有效吗?
答案 0 :(得分:1)
是的,特里是好的。您可以使用电话号码中的位(如果将它们存储为整数),而不是使用字符串中的字符作为每个级别的键。出于速度原因,您可能决定一次使用3位或4位。
这可以通过一个trie结构来存储当前的身份信息,然后是一个指向子trie结构的指针数组。
struct phone_number_trie {
struct contact_info *info;
struct phone_number_trie *children[4]; // or 2, 8 or 16 etc.
};
E.g。将电话号码'83'(二进制为1100011
)存储在根为root
的树中,您可以屏蔽低2位(例如& 3
),这些是{ {1}},因此您将使用电话号码11
的其余位递减到root->children[3]
(即将其向右移2)。接下来的索引是11000
,然后是0
,然后是10
(因此您将指向1
)。此时,您的电话号码中没有设置位,因此您找到了正确的插入位置。
(您也可以考虑使用Patricia trie,但实施起来要困难得多。)