首先,我主要用 python 做了一些非常琐碎的事情,所以我对 pythonic 语法不是很满意。我正在学习不相交集,并对实现有基本的了解。
我遇到了一个 python 森林实现(不是我的!),并且很难理解字典的__init__
工作原理。wikipedia 的例子很容易理解(这个实现是基于wiki 的伪代码)。特别是,这条线对我来说很陌生
def __init__(self, vertices):
self.struct = dict((v, [v, 0]) for v in vertices)
我看不到这个 dict 构造函数在做什么,我的猜测是对于从0
to的每个数字vertices
, av
都作为键和值插入到字典中,但是键有一个包含v
和附加的子集0
?我可能大错特错。
另外,当我比较python代码时
xV = self.struct[xRoot]
yV = self.struct[yRoot]
if xV[1] < yV[1]:
xV[0] = yRoot
elif xV[1] > yV[1]:
yV[0] = xRoot
else:
yV[0] = xRoot
xV[1] += 1
维基百科的伪代码,
if xRoot.rank < yRoot.rank
xRoot.parent := yRoot
else if xRoot.rank > yRoot.rank
yRoot.parent := xRoot
else
yRoot.parent := xRoot
xRoot.rank := xRoot.rank + 1
我试图了解[0]
's 和[1]
's 是如何使用的。我只能通过[0]
我们如何初始化字典结构来建立联系。当然,仅基于比较,就很容易知道它们指的是什么,但是在结构中使用 0 和 1 是如何做到的呢?
此外,如果您需要我正在谈论的整个代码,您可以在此处找到它。