python - 有人能解释一下 root 函数在这个快速联合实现中是如何工作的吗?
问题描述
我正在尝试实现快速联合算法,其中节点的 id 是它们的根节点。
id 是这样实现的:
self.id = []
for i in range(N)
self.id.append(i)
其中存储节点 0 到 N - 1 的索引
这是我无法理解的代码:
def root(self, i):
while(i != self.id[i]):
i = self.id[i]
return i
怎么了?“我”是什么?它如何指向根节点?
我理解联合方法:
def union(self, p, q):
i = self.root(p)
j = self.root(q)
self.id[i] = j
这意味着类似:将值是 p 的根的 id 更改为 q 的根,对吗?
解决方案
id[i]
指向第 i 个元素的父元素。如果此元素不是根(根id
指向自身),则代码移动到父元素,然后移动到父元素的父元素,依此类推,直到到达根。
示例:我们想找到第 0 个元素的根
i 0 1 2 3
\/ ----->
id 2 1 1 3
id[0]
不等于0,所以这个元素是叶子,我们向它的父元素2迈出一步
i 0 1 2 3
<---\/
id 2 1 1 3
id[2]
不等于2,所以这个元素是叶子,我们向它的父元素1迈出一步
i 0 1 2 3
\/
id 2 1 1 3
id[1]
等于 1,所以我们找到了第 0 个元素的根
存储在该数组中的树:
1 3
/
2
\
0
推荐阅读
- c# - 在 IIS 日志上获得间歇性 500 0 64
- kotlin - 如何在 Kotlin 中使用带参数值的接收器?
- django - 使用来自数据库(但不是来自模型)的选择填充 Django 表单字段
- git - 使发布分支与 master 保持最新,除了几个文件
- gatling - 检索响应代码或正文以用作在 tryMax 中发送另一个请求的条件
- javascript - 选择列表项后在控制台中未定义
- python - 代码在一台机器上成功运行,但在另一台机器上产生“TypeError:无法连接'str'和'int'对象”
- java - 使用 SimpleDateFormat 但小时值向后 3 小时
- reporting-services - Sql Report Builder 删除多余的行
- wordpress - 重力表格更新自定义帖子类型中的自定义字段