目前我有一个问题,我正在试图找出,但不确定我的答案是否正确。
你有一百万张唱片。在这些记录中,您经常需要通过
两个标准:员工身份证和工资(但不能同时由两人决定)。
您有以下限制:
每个记录都非常大,因此您只能保留此数据的一个副本。
你的程序需要相当快。简单地扫描每个搜索的所有项目会太慢。
您将使用什么数据结构?
我的答案?
我会使用哈希表,因为最坏的情况是O(1000000)=O(1)
按ID搜索时,如何检索记录?
按薪资搜索时,如何检索记录?

最佳答案

我预计基于salary的散列表会有很多冲突问题,但是对于I d,使用一点密码理论就可以很容易地解决没有冲突的问题。想要按薪水搜索而不是排序或获取某个范围似乎很奇怪,这在BST上更容易实现。
不过,它的不足之处在于,如果要通过两个独立的属性进行搜索,就必须维护两个结构。幸运的是,指针存在,所以不必保留多个副本。就我个人而言,我会保留一个I d到references的哈希表,然后保留一个BST到references的薪水表,但是如果我被限制为一个数据类型,我就必须对如下节点执行BST:

    Node {
        int id;
        Node idLessThan;
        Node idGreaterThan;

        int salary;
        Node salaryLessThan;
        Node salaryGreaterThan;

        Data fileInfo;
    }

在同一个节点集上创建两个bst。

关于c - 哈希表还是BST?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41135483/

10-10 17:41
查看更多