再一次,谈论我即将开展的大学项目......我今天上了一堂课,在那里我们可以询问有关该项目的内容,但我还没有决定最好的方法。
基本上,我有一堆用户(一些带有几个成员的结构),必须通过名称和SSN快速搜索。由于我还需要在Graph上使用这些用户(对于其他操作),我将使用指针。
现在,我虽然使用了两个哈希表。一个是密钥是名称,另一个是密钥是SSN。但我不喜欢有两个哈希表的想法,只需使用不同的键并指向同一个地方。
我使用带有两个键的哈希表,但我甚至不知道这是否可行,我相信它不是。我只是想不出办法,也许有一个,或许没有。
除了这两个解决方案,我想不出任何其他替代方案......我可能不得不使用两个哈希表。
你们有没有其他选择?
答案 0 :(得分:2)
我会选择两个哈希表。将其视为数据库中的两个索引。数据库是您的用户,您提供两个索引:一个ssn索引和一个名称索引。
答案 1 :(得分:1)
我认为两个哈希表是可以的。也考虑二叉搜索树,它们可以更紧凑但是O(log n)搜索并且更难实现。
“带有两把钥匙的哈希表”从未听说过......
答案 2 :(得分:1)
我认为没有办法构建一个支持两个密钥的哈希表。
如果您希望SSN查找和名称查找都非常快,那么您需要两个哈希表。您必须记住添加到它们中,或从两个中删除。
否则,您可以将更频繁的(例如SSN查找)作为基于散列的查找,将另一个作为哈希表中的暴力查找。
答案 3 :(得分:1)
像你说的两个哈希表。优点是RANDOM数据或甚至实际数据的查找速度非常快。缺点是你不知道你的教授会抛出什么(或者你呢?)并且他们可能会强迫最坏的情况。
平衡搜索树。我推荐treaps:http://en.wikipedia.org/wiki/Treap - 在我看来,它们最容易实现。
对用户和二进制搜索进行排序。每次搜索也是O(log N),甚至比treap更容易实现。
哈希+排序用户/搜索树的组合,如果你能负担得起内存。这将使其成为O(1)最佳情况和O(log N)最坏情况。如果H [i] =散列到i的对象列表,请为每个i保留一个计数,告诉您该列表中有多少个对象。如果该计数太大,请改用排序用户列表/搜索树。
答案 4 :(得分:0)
如何连接两个密钥并用作密钥?
示例i有x,y,z。
使用字符串或char作为分隔符来连接x和y。这是一种简单的方法。
在这篇文章中,我看到这个解决方案可能更有趣: Multi-dimensional associative arrays in javascript