如何解决使用“路径减半”的不相交集的Find操作
根据Disjoint-set_data_structure中的“联合”部分,我在理解“路径减半”方法的实现时遇到了问题。
type HeaderStateMap = {
user:any,hidden:boolean
};
const mapStateToProps = ({ user: { user },cart: { hidden } }:HeaderStateMap) => {
return {
user,hidden
};
};
我的第一个迭代看起来像这样:
第一次迭代后, function Find(x)
while x.parent ≠ x
x.parent := x.parent.parent
x := x.parent
return x
和x.parent
指向同一节点(不应该发生)。我需要有关此函数正确流程和迭代的帮助
我对该函数的第3行和第4行感到困惑,并且还“路径减半使路径上的所有其他节点都指向其祖父母”。
任何帮助将不胜感激,谢谢!
解决方法
算法的工作原理如下:从节点x开始,使x指向其祖父母,然后继续到祖父母本身,继续直到找到根为止,因为根的父代就是根本身。 / p>
看看图片,您实际上是通过将集合转换为二叉树(不是适当的二叉树,但可以这样表示)来将其减半。
假设我们有这样的一套:
8->7->6->5->4->3->2->1->0
其中箭头表示父级(例如8->7
= 8的父级是7)
说我们叫Find(8)
第一次迭代:
x = 8
8.parent = 7
8.parent = 8.parent.parent = 7.parent = 6
x = 8.parent = 7.parent = 6
第二次迭代:
x = 6
6.parent = 5
6.parent = 6.parent.parent = 5.parent = 4
x = 6.parent = 5.parent = 4
以此类推...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。