哈希表或BST?

时间:2016-12-14 05:30:31

标签: c hashtable binary-search-tree

目前我有一个问题,我正在试图找出但不确定我的答案是否正确。

你有100万条记录。在这些记录中,您经常需要搜索 两个标准:员工ID和工资(但不是两者同时)。 您有以下约束:

  
      
  • 每条记录都非常大,因此您只能保留此数据的一份副本。

  •   
  • 您的计划需要相当快。只需扫描每次搜索的所有项目都会太慢。

  •   

您将使用什么数据结构?

我的回答?

我会使用哈希表,因为最坏的情况时间是O(1000000)= O(1)

  

按ID搜索时如何检索记录?

     

按工资搜索时,如何检索记录?

1 个答案:

答案 0 :(得分:1)

我预计基于工资的哈希表会出现很多冲突问题,但使用一点加密理论,一个ID就可以很容易地解决冲突问题。想要按薪水搜索而不是排序或得到一些范围似乎很奇怪,这可以在BST上更容易地执行。

但缺点是,如果你想通过两个独立的属性进行搜索,你将需要维护两个结构。幸运的是指针存在,因此您不必保留多个副本。就个人而言,我会将ID的哈希表保存到引用中,然后将工资的BST保留给引用,但如果我限制为一种数据类型,我必须使用这样的节点进行BST:< / p>

    Node {
        int id;
        Node idLessThan;
        Node idGreaterThan;

        int salary;
        Node salaryLessThan;
        Node salaryGreaterThan;

        Data fileInfo;
    }

在同一节点集上基本上创建两个BST。