【问题标题】:Efficient datastructure for representing districts->states->nation relationship表示地区->州->国家关系的有效数据结构
【发布时间】:2009-06-02 13:56:00
【问题描述】:

我正在寻找一种有效的方式来表示和检索地理关系,例如。地区->州->美国。这应该适应任何层次的层次结构,例如。地区->地区->州->大地区(东/西/南/北)->美国。

我的要求是

  1. 我主要在最低级别进行操作 - 所以快速完成所有操作应该是第一要务。固定时间是首选。
  2. 然后,我想轻松地在州级别执行聚合,例如合并地区数据(因此获取节点的所有子节点) - 这是第二个标准。
  3. 级别的顺序无关紧要 - 例如。对于北卡罗来纳州,我不介意我先去罗利还是费耶特维尔。

正如您几乎已经猜到的那样 - 数据结构在逻辑上有助于解决问题。但我找不到有效获取所有叶子的方法。我可以在 O(log n) 时间内检查一个节点是否为叶子节点,但我已经检查了每个节点。

我查看了 B、B+ 树,但我不明白的是它们使用升序或降序等某种顺序来维持它们的顺序。

我的直觉是应该有有效的解决方案,因为 Windows 或任何文件系统都会这样做。文件->文件夹->大文件夹->C->我的电脑。此外,这种计算必须在数据挖掘中完成,比如说集群(我记得读过这类的东西)

我们将不胜感激这方面的任何线索。

谢谢

【问题讨论】:

  • 你能更具体地描述你想对结构做什么吗?您的#1 并不完全清楚;正如 Welbog 所说,您无法在恒定时间内检索 n 个项目。而且您的“检查节点是 O(log n) 中的叶子”似乎暗示您正在做的事情不是从叶子到根的直接聚合。
  • 如果 n 项已经存储在缓存集合中,您可以在恒定时间内检索 n 项 - 这对于节点的所有子节点的常见情况可能很有意义,例如请参阅下面的答案。

标签: algorithm data-structures hierarchy


【解决方案1】:

您正在谈论检索匹配给定条件的n 唯一项目(在这种情况下,在给定节点下的层次结构中特定级别的所有内容)。除非您预先计算了所有可能的标准,否则您无法在恒定时间内从数据结构中获取 n 唯一项。至少您必须遍历那些 n 项目。

您可以使用许多数据结构和数据结构的组合来提高不同类型的使用效率。你是对的,B 和 B+ 树在这种情况下工作得很好,这就是为什么我建议你为这个应用程序使用关系数据库,因为它们是你能做到的最好和最健壮的 B 树实现找到。匹配叶节点和计算聚合几乎就是它们的用途。除非您有特殊原因不使用 RDBMS 子系统,否则这可能是您最好的选择。

【讨论】:

  • 我正在从 RDBMS 中检索这些值,我正在寻找一种代码结构以有效地执行计算。
  • 高效执行这些计算的结构称为“SQL”。这就是它的用途。是否有一些您无法使用您需要的 SQL 来管理的特定内容?
  • SQL 非常有用且具有通用性,但与体面的内存数据结构相比,它的效率甚至不高。例如,考虑以 50 FPS 的速度渲染此数据集的动态确定子集。
【解决方案2】:

创建一个节点树,其中每个节点包含:

  • 指向父节点的指针(或根节点为空)
  • 子节点的集合(例如 Java 中的 HashMap 或 ArrayList)
  • 与节点关联的任何数据负载(例如地理坐标,以便您进行距离搜索)

如果您愿意,可以使用基于 HashMap 的 String -> Node 索引来扩充它,以便对节点进行 O(1) 访问。但是对于这个问题,我不会担心树搜索成本,因为您最多可能有超过 5-10 个级别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2015-09-09
    • 2015-04-14
    • 2020-02-27
    相关资源
    最近更新 更多