如何存储联系信息

时间:2012-06-16 18:20:46

标签: c data-structures trie

存储联系信息[姓名,电话号码]的最佳数据结构是什么?

在给出姓名时,

Trie 可用于搜索电话号码。
如果我想根据他的电话号码找到一个人姓名怎么办?即,当我知道电话号码时,如何找到姓名? 对此类搜索有效吗?

1 个答案:

答案 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,但实施起来要困难得多。)