【发布时间】:2011-03-15 14:10:01
【问题描述】:
这是对相当神秘的标题问题的重述:
假设我们已经构建了一个 Prototype 树,其中包含有关树结构的所有信息以及每个节点的通用描述。现在我们想用包含额外唯一数据的元素创建这棵树的实例。我们称这些混凝土树。
Concrete 和 Prototype 树之间的唯一区别是 Concrete 树的节点中的额外数据。假设 Concrete 树的每个节点都有一个指向 Prototype 树中相应元素的指针/链接,以获取有关该节点的通用信息,但没有自己的父/子信息:
是否可以遍历具体树?
特别是给定Concrete树中的一个起始节点,以及一条通过Prototype树的路径,是否可以高效地得到Concrete树中的对应节点?可以有很多个具体的树,所以从原型树返回的链接是不可能的。
尽管我可能不需要在我的代码中将事情优化到如此程度,但这仍然是一个有趣的问题!
提前致谢!
注意:树的分支因子没有限制——一个节点可以有一个到数百个子节点。
额外的胡言乱语/想法:
我问的原因是,每次创建具体树的新实例时复制父/子信息似乎是一种浪费,因为这种结构与原型树相同。在我的特殊情况下,子节点由字符串名称标识,因此我必须在每个节点上存储一个字符串到指针的哈希值。可以有 许多 个具体树的实例,复制此哈希似乎是对空间的巨大浪费。
作为第一个想法,也许路径可以以某种方式散列为 int 或紧凑标识元素的东西(不是字符串,因为它太大了),然后用于查找每个 Concrete 的散列中的具体元素树?
【问题讨论】:
-
如果具体的树节点没有父/子信息,那么它就不是真正的树!
-
@Oli 当然,它没有自己的父/子信息,但它仍然通过原型树与其节点保持这种关系。所以在抽象意义上,它本身也是一棵树。