【发布时间】:2009-06-02 13:56:00
【问题描述】:
我正在寻找一种有效的方式来表示和检索地理关系,例如。地区->州->美国。这应该适应任何层次的层次结构,例如。地区->地区->州->大地区(东/西/南/北)->美国。
我的要求是
- 我主要在最低级别进行操作 - 所以快速完成所有操作应该是第一要务。固定时间是首选。
- 然后,我想轻松地在州级别执行聚合,例如合并地区数据(因此获取节点的所有子节点) - 这是第二个标准。
- 级别的顺序无关紧要 - 例如。对于北卡罗来纳州,我不介意我先去罗利还是费耶特维尔。
正如您几乎已经猜到的那样 - 树 数据结构在逻辑上有助于解决问题。但我找不到有效获取所有叶子的方法。我可以在 O(log n) 时间内检查一个节点是否为叶子节点,但我已经检查了每个节点。
我查看了 B、B+ 树,但我不明白的是它们使用升序或降序等某种顺序来维持它们的顺序。
我的直觉是应该有有效的解决方案,因为 Windows 或任何文件系统都会这样做。文件->文件夹->大文件夹->C->我的电脑。此外,这种计算必须在数据挖掘中完成,比如说集群(我记得读过这类的东西)
我们将不胜感激这方面的任何线索。
谢谢
【问题讨论】:
-
你能更具体地描述你想对结构做什么吗?您的#1 并不完全清楚;正如 Welbog 所说,您无法在恒定时间内检索 n 个项目。而且您的“检查节点是 O(log n) 中的叶子”似乎暗示您正在做的事情不是从叶子到根的直接聚合。
-
如果 n 项已经存储在缓存集合中,您可以在恒定时间内检索 n 项 - 这对于节点的所有子节点的常见情况可能很有意义,例如请参阅下面的答案。
标签: algorithm data-structures hierarchy