存储名字和姓氏的算法和数据结构

时间:2011-12-21 21:01:31

标签: algorithm language-agnostic data-structures contacts binary-search-tree

是否有一种有效的方法可以在数据结构中存储名字和姓氏,以便我们可以使用名字或姓氏进行查询?我会考虑一个带名字的二叉搜索树。搜索名字会很有效率。但是在尝试搜索姓氏时效率并不高。我们还可以再考虑一个姓氏的BST。有效实施它的任何想法?

如果问题是

怎么办?

字符串名称[] = {“A B”,“C D”};

要求是能够在运行时动态扩展此目录, 没有持久存储。该目录最终可以增长到数百或 成千上万的名字,必须用名字或姓氏进行搜索。

现在我们不能存储哈希表。有什么想法吗?

5 个答案:

答案 0 :(得分:7)

两个哈希表:一个从名字到人,一个从姓到人。

简单是最好的。

答案 1 :(得分:2)

为什么不将名字和姓氏都放在 trie

作为奖励,通过遍历当前节点之后的所有叶子(可能是异步调用),您甚至可以获得有关部分名称的建议

答案 2 :(得分:0)

你的想法非常好,但这是另一种选择:如何实现哈希表?

第一个哈希表将使用名字作为键,关联的值可以是姓氏或指向Name对象的指针。第二个哈希表将使用姓氏作为键,使用名字的第一个名称或指针作为值。

就个人而言,为了选择值,我会寻找一个指向Name对象的指针,因为这种方法更适用于你想要存储更多信息(例如出生数据等)

答案 3 :(得分:0)

另外,请参阅Does Java have a HashMap with reverse lookup? ...,这是特定于Java的,但有关数据结构的讨论与任何语言相关。

请注意,双向排序地图等结构也允许范围搜索(双重哈希表不允许)。

答案 4 :(得分:0)

如果你只需要按名字搜索或只搜索姓氏,那么两个哈希图是最好的(注意你没有复制数据,你要对它进行分区)但是如果你不介意那么将名字和姓氏都放在一个散列图中,不要区分它们。