用于表示区域的有效数据结构 - >状态 - >国家关系

时间:2009-06-02 13:56:00

标签: algorithm data-structures hierarchy

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

我的要求是

  1. 我主要在最低级别操作 - 因此快速获取所有这些应该是首要任务。优先考虑恒定时间。
  2. 然后,我想在状态级执行聚合eg.combine区数据(因此获得节点的所有子节点) - 这是第二个标准。
  3. 某个级别的顺序无关紧要-eg。对于NC,我不介意我是第一次得到Raleigh还是Fayetville。
  4. 正如您几乎猜到的那样 - 数据结构在逻辑上适用于此问题。但我找不到有效获得所有叶子的方法。我可以检查节点是否在O(log n)时间内是叶子,但是我已经检查了每个节点。

    我看过B,B +树,但我不明白的是他们使用升序或降序等命令维护他们的顺序。

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

    这方面的任何线索都将受到赞赏。

    由于

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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