【问题标题】:Data structures for organization hierarchy组织层次结构的数据结构
【发布时间】:2015-12-16 17:09:13
【问题描述】:

我想在数据结构中表示组织层次结构。 有几种类型的员工,例如:CEO、总裁、总监、经理、工程师等。数据结构的选择方式应使查询可以有效地对数据执行,例如:

  • 根据在他们手下工作的员工总数找到排名前 5 位的经理。
  • 查找工资超过 5000 美元的员工总数。
  • 找到并解雇所有经验不足 2 年的员工等。

假设所有类型的员工都有许多不同的属性。

哪种数据结构最适合这种情况?

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

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

【问题讨论】:

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

标签: algorithm data-structures b-tree


【解决方案1】:

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

您要求的东西可以回答多个不同领域的查询。您的需求看起来与关系数据库在表上快速回答此类查询所需的基本相同。

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

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

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

如果您想知道如何做到这一点,就像学习练习一样,看看 SQL DB 是如何做到的。您可能会发现他们需要一些您不想实现的功能,因此您可以简化事情。 (例如,也许您不需要它是事务性的,因此中途失败的查询仍然可以删除一些条目。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    相关资源
    最近更新 更多