1

我有一个 DAG 实现,非常适合我的需求。我将它用作我的一个项目的内部结构。最近,我遇到了一个用例,如果我修改一个节点的属性,我需要将该属性传播到它的父节点并一直传播到根节点。我的 DAG 中的每个节点当前都有一个邻接列表,该列表基本上只是对节点子节点的引用列表。但是,如果我需要将更改传播到此节点的父节点(并且此节点可以有多个父节点),我将需要一个对父节点的引用列表。

这可以接受吗?或者有没有更好的方法来做到这一点?维护两个列表(一个给父母,一个给孩子)是否有意义?我想将父母添加到同一个邻接列表中,但这会给我每个父子关系的循环(即,父->子和子->父)。

4

1 回答 1

2

从来没有必要在每个节点中存储父指针,但是这样做可以使事情运行得更快,因为您确切地知道在哪里寻找父节点。在你的情况下,这是完全合理的。

作为类比 - 二叉搜索树的许多实现将存储父指针,以便它们可以更轻松地支持旋转(需要访问父节点)或删除(可能需要知道父节点)。类似地,一些更复杂的数据结构(如斐波那契堆)在每个节点中使用父指针,以便更有效地实现减少键操作。

存储父母列表的内存开销不会太糟糕 - 您现在实际上是在重复计算每条边:每个父母都存储一个指向其孩子的指针,每个孩子都存储一个指向其父母的指针。

希望这可以帮助!

于 2013-06-18T22:43:22.240 回答