Algorithm 组织层次结构的数据结构

Algorithm 组织层次结构的数据结构,algorithm,data-structures,b-tree,Algorithm,Data Structures,B Tree,我想在数据结构中表示组织层次结构。 有几种类型的员工,如:首席执行官、总裁、董事、经理、工程师等。数据结构的选择应确保能够高效地对数据执行查询,例如: 根据在其手下工作的员工总数,找出前5名经理 查找工资高于5000美元的员工总数 发现并解雇所有经验不足2年的员工等 假设所有类型的员工都有许多不同的属性 在这种情况下,哪种数据结构最合适 要求:提供空间和时间优化查询 编辑:我不是在找SQL表。我想为这个场景设计合适的数据结构。大多数数据结构,如B-树、哈希表、尝试、基数树等,将单个键映射到有

我想在数据结构中表示组织层次结构。 有几种类型的员工,如:首席执行官、总裁、董事、经理、工程师等。数据结构的选择应确保能够高效地对数据执行查询,例如:

  • 根据在其手下工作的员工总数,找出前5名经理
  • 查找工资高于5000美元的员工总数
  • 发现并解雇所有经验不足2年的员工等
假设所有类型的员工都有许多不同的属性

在这种情况下,哪种数据结构最合适

要求:提供空间和时间优化查询


编辑:我不是在找SQL表。我想为这个场景设计合适的数据结构。

大多数数据结构,如B-树、哈希表、尝试、基数树等,将单个键映射到有效负载。一些(如基数树/基数Trie)针对字符串键进行了优化

您要求的是能够回答多个不同字段查询的内容。您的需求与关系数据库快速回答表上的此类查询所需的基本相同

据我所知,这是通过为每个字段设置单独的索引(例如B树)来实现的。因此,对一个字段的范围查询只使用该字段的索引。不过,修改表意味着更新所有其他索引

如果您需要回答范围查询,哈希表对于索引来说是一个糟糕的选择。某些类型的树,如B-树或平衡二叉树(如红黑树)可能是好的。或者是一个类似字符串的字段

IDK如何在一个索引上的删除请求之后高效地更新其他索引。可能只需要单独查找/删除每个键


如果您想知道如何做到这一点,作为一个学习练习,请查看SQLDBS是如何做到这一点的。你可能会发现他们需要一些你不想实现的特性,所以你可以简化事情。(例如,可能您不需要它是事务性的,所以部分失败的查询仍然可以删除一些条目。)

听起来您在寻找sql表。有什么理由不使用它吗?没有。。。我正在寻找数据结构。除非你想为你的标准建立单独的搜索树,否则我同意amit,你可能真的应该研究数据库。如果出于任何原因,这些都是完全不可能的,那么我将开始研究数据库如何高效地处理查询,即那里使用了哪些数据结构,并查看其中哪些满足您的需求。