具有链接的类文件系统树的数据结构+算法

时间:2014-09-08 19:57:35

标签: algorithm data-structures filesystems computer-science hierarchy

我正在尝试建模一些类似于文件系统的数据,但我必须使用数据库。

数据集

点分隔的文本字符串,如a.b1.c1.d.e,a.b2.c2等。

所有字符串都符合有根节点“root”的约定,假定它们位于所有字符串的开头,这使得它成为分层数据结构。

每个节点都有一组有限的子节点作为子节点。

这很容易实现,只需将节点放在带有名称和子列表的表中,以便比O(n)更快地进行搜索。

并发症

问题在于,有时我们需要交叉链接,就像文件系统中的符号链接一样。所以,假设我们有:

  • root.a - >孩子们:b
  • root.a.b - >孩子们:c
  • root.a.b.c - >孩子们:d
  • root.a.b.c.d - >孩子:无
  • root.p - >孩子们:q
  • root.p.q - >链接到a.b,所以孩子们:c

问题1:

在上帝的绿色地球上,这种树状结构的“计算机科学”是什么?我会称这是一个非循环的有向图,但这是一般的名称,我认为必须有更好的名称。树被定义为没有多重继承,所以就这样了。

我想知道这个名字,因为我希望有人拥有一套实现这种结构的算法,因此我将不得不以极大的个人麻烦来定义这些类。

问题2:

如果我想验证p.q.c.​​d,我似乎必须:

  • 查找p.q.c.​​d,如果存在,请将其返回。
  • 检索p.q.c,p.q和p,发现p.q是指向a.b的链接
  • 构造a.b.c.d并测试,如果返回则。
  • 否则失败

问题3:

当我使用GLOBS(* /?/ [1234]类似regex的查询)查看此内容时,搜索变得更加复杂。

背景

  1. 我不想在这里重新发明轮子。实际用例是一个用于存储Graphite监控数据数据的数据库,该数据具有文件系统的后端数据存储。我需要(由于许多原因)将数据放入数据库,因此必须创建它的模型。

  2. 是否有类似的参考实现?

  3. 感谢您的考虑,并向我道歉,如果我的脑力不足使得这个问题比现在更困难。

  4. 我碰巧在Python工作,但我可以翻译任何其他方便的语言或平行维度构造,只要它不涉及太多的巫术或双向咒骂对上帝般的神圣世界众生的忠诚。

1 个答案:

答案 0 :(得分:0)

我已经看到这种表示称为"路径枚举模型"或者" Dewey Decimal"系统。 (正如您所指出的那样,基础逻辑结构是一个带有单根的非循环有向图。)