目前我有一个问题,我正在试图找出但不确定我的答案是否正确。
你有100万条记录。在这些记录中,您经常需要搜索 两个标准:员工ID和工资(但不是两者同时)。 您有以下约束:
每条记录都非常大,因此您只能保留此数据的一份副本。
您的计划需要相当快。只需扫描每次搜索的所有项目都会太慢。
您将使用什么数据结构?
我的回答?
我会使用哈希表,因为最坏的情况时间是O(1000000)= O(1)
按ID搜索时如何检索记录?
按工资搜索时,如何检索记录?
答案 0 :(得分:1)
我预计基于工资的哈希表会出现很多冲突问题,但使用一点加密理论,一个ID就可以很容易地解决冲突问题。想要按薪水搜索而不是排序或得到一些范围似乎很奇怪,这可以在BST上更容易地执行。
但缺点是,如果你想通过两个独立的属性进行搜索,你将需要维护两个结构。幸运的是指针存在,因此您不必保留多个副本。就个人而言,我会将ID的哈希表保存到引用中,然后将工资的BST保留给引用,但如果我限制为一种数据类型,我必须使用这样的节点进行BST:< / p>
Node {
int id;
Node idLessThan;
Node idGreaterThan;
int salary;
Node salaryLessThan;
Node salaryGreaterThan;
Data fileInfo;
}
在同一节点集上基本上创建两个BST。