【发布时间】:2016-12-14 05:30:30
【问题描述】:
目前我有一个问题正在尝试解决,但不确定我的答案是否正确。
您有 100 万条记录。在这些记录中,您经常需要搜索 两个标准:员工 ID 和薪水(但不能同时通过两者)。 您有以下限制:
每条记录都非常大,因此您只能保留一份此数据的副本。
您的程序需要相当快。每次搜索时简单地扫描所有项目太慢了。
你会使用什么数据结构?
我的答案?
我会使用哈希表,因为最坏情况的时间是 O(1000000) = O(1)
当您通过 ID 搜索时,您将如何检索记录?
按工资搜索时如何检索记录?
【问题讨论】:
-
您是否需要按薪资范围进行搜索? (例如“告诉我所有工资在 20,000 美元到 25,000 美元之间”或类似的?)如果是这样,您需要扫描整个哈希表 (O(N)) 才能做到这一点,因为哈希表的 O(1) 查找仅如果您知道要查找的确切键值,则可以工作...
-
“使用哈希表”只是答案的开始。您将如何仅使用一份数据副本搜索两个键?我认为这就是问题试图探讨您的知识的问题。树和哈希表之间的选择是次要的,您可以同时使用两者。想想缺少的细节。您是否必须通过一系列薪水进行搜索 - 这是现实的 - 或特定的美元价值 - 不是那么有用?区别很重要。
-
@JeremyFriesner 很好的 ID 我会知道确切的位置是我先对 ID 进行排序然后使用哈希?但是对于薪水你有一点......
-
@Gene 我认为在这种情况下它实际上是一个特定的美元价值。我说散列是因为如果我有一百万条记录,那么对它们进行排序和散列会更容易,因此 ID 需要 O(1) 时间,但对于工资,我被卡住了,因为我只有一个副本。
-
@BassamMetwally 如果我理解正确,您似乎不太可能使用哈希表作为工资,因为假设多个员工可能具有相同的值是现实的,这会在尝试时导致冲突散列键(除非有一些保证工资也是唯一的?)另外,您是否允许引用记录,或者必须将实际记录对象存储在数据结构中?
标签: c hashtable binary-search-tree