Big theta 在此算法中找不到findset的运行时间

Big theta 在此算法中找不到findset的运行时间,big-theta,big-o,Big Theta,Big O,我设计了一个算法,我试图找到上界和下界,从而得出θ: ms(G,w) for each v in G make-set(v) sort the edges of G.E into non-decreasing order by weight if(find-set(v) not equal to find-set(u)) union(u,v) else feed=feed U {edge(u,v)} 正如您所看到的,它与kruskal算法非常相似。这里我的问题是

我设计了一个算法,我试图找到上界和下界,从而得出θ:

ms(G,w)
for each v in G
      make-set(v)
sort the edges of G.E into non-decreasing order by weight
if(find-set(v) not equal to find-set(u))
     union(u,v)
else
     feed=feed U {edge(u,v)}
正如您所看到的,它与kruskal算法非常相似。这里我的问题是我不能理解find set的运行时间

至于其他部分,我有:

生成集O(v) 分拣O(埃洛奇) 工会O(1)
但是对于find set,我不知道如何计算它(您还可以告诉我为union计算的运行时间是否为真)

find set的大O取决于所使用的实现

例如,以集合中的数据的数组为例。它们已排序,您可以使用O(log(N))(甚至O(log(log(N)))访问它们,但任何插入都是O(N)--请考虑向集合中添加一个新的最低元素。您可以通过使用堆来改进这一点

或者将集合存储在一个链表中。添加和删除是O(1),但要找到它,必须遍历所有条目,因此是O(N)


你必须决定,哪个操作更常用,或者在你的算法中更关键的一点。

谢谢你是对的,我读了一篇文章,上面说如果我使用不相交集,它需要log(v),但我仍然不明白为什么log?@hamedminae看看维基百科的相关文章