任务是在“查找”和“联合”的Union-Find结构中找到m个操作的最坏情况下的时间复杂度,即所有“联合”操作都发生在所有“查找”操作之前。
联合查找结构以n个不相交的集合开始,每个集合包含一个元素。而且,每个集合都表示为一棵树,并且该结构使用路径压缩和逐级并集。
我在想的是,首先,所有联合操作将合计为O(log(n)),因为每个联合操作都取O(1),并且发生的此类操作最多为log(n)个。
此后,如果我们查看find元素,则对于每个元素,第一个查找将采用O(log(n)),但是下一次,它将对其路径中的每个元素采用O(1)。因此所需的时间少于O(m * log(n))。
我不确定如何从这里继续。我认为可能会这样:
log(n)+ log(n / 2)+ log(n / 4)+ .... = log(n)* log(n)
因为每次我们需要走的路径的级别变短。
但是。我不确定,也看不到在这里使用m参数。 也许在分析中还需要使用Ackerman逆函数,但我不知道怎么做。
答案 0 :(得分:1)
“查找”操作(FindSet)
“联合”操作
时间复杂度