我正在尝试在 Cormen 等人的算法简介中做这个练习,这与 Disjoin Set 数据结构有关:
假设我们希望添加操作
PRINT-SET(x)
,给定一个节点并以任意顺序x
打印 集合的所有成员。x
展示我们如何向不相交集森林中的每个节点添加一个属性,从而使PRINT-SET(x)
时间与的集合的成员数成线性关系x
,并且其他操作的渐近运行时间保持不变。假设我们可以在 O(1) 时间内打印出集合中的每个成员。
现在,我很确定需要的属性是一个尾指针,所以它可以跟踪孩子。
由于不相交的集合结构已经有一个父属性,find-set(x)
可以很容易地打印出一个方向的节点。但是现在,有了一个尾指针,让我们也转向另一个方向。
但是,我不确定如何编写算法来做到这一点。如果有人可以用伪代码帮助我,那将不胜感激。