两个哈希表,哈希表与双键或不同的解决方案?

时间:2010-03-02 19:04:44

标签: c hashtable key

再一次,谈论我即将开展的大学项目......我今天上了一堂课,在那里我们可以询问有关该项目的内容,但我还没有决定最好的方法。

基本上,我有一堆用户(一些带有几个成员的结构),必须通过名称和SSN快速搜索。由于我还需要在Graph上使用这些用户(对于其他操作),我将使用指针。

现在,我虽然使用了两个哈希表。一个是密钥是名称,另一个是密钥是SSN。但我不喜欢有两个哈希表的想法,只需使用不同的键并指向同一个地方。

我使用带有两个键的哈希表,但我甚至不知道这是否可行,我相信它不是。我只是想不出办法,也许有一个,或许没有。

除了这两个解决方案,我想不出任何其他替代方案......我可能不得不使用两个哈希表。

你们有没有其他选择?

5 个答案:

答案 0 :(得分:2)

我会选择两个哈希表。将其视为数据库中的两个索引。数据库是您的用户,您提供两个索引:一个ssn索引和一个名称索引。

答案 1 :(得分:1)

我认为两个哈希表是可以的。也考虑二叉搜索树,它们可以更紧凑但是O(log n)搜索并且更难实现。

“带有两把钥匙的哈希表”从未听说过......

答案 2 :(得分:1)

我认为没有办法构建一个支持两个密钥的哈希表。

如果您希望SSN查找和名称查找都非常快,那么您需要两个哈希表。您必须记住添加到它们中,或从两个中删除。

否则,您可以将更频繁的(例如SSN查找)作为基于散列的查找,将另一个作为哈希表中的暴力查找。

答案 3 :(得分:1)

  1. 像你说的两个哈希表。优点是RANDOM数据或甚至实际数据的查找速度非常快。缺点是你不知道你的教授会抛出什么(或者你呢?)并且他们可能会强迫最坏的情况。

  2. 平衡搜索树。我推荐treaps:http://en.wikipedia.org/wiki/Treap - 在我看来,它们最容易实现。

  3. 对用户和二进制搜索进行排序。每次搜索也是O(log N),甚至比treap更容易实现。

  4. 哈希+排序用户/搜索树的组合,如果你能负担得起内存。这将使其成为O(1)最佳情况和O(log N)最坏情况。如果H [i] =散列到i的对象列表,请为每个i保留一个计数,告诉您该列表中有多少个对象。如果该计数太大,请改用排序用户列表/搜索树。

答案 4 :(得分:0)

如何连接两个密钥并用作密钥?

示例i有x,y,z。

使用字符串或char作为分隔符来连接x和y。这是一种简单的方法。

在这篇文章中,我看到这个解决方案可能更有趣: Multi-dimensional associative arrays in javascript