任务是找出“find”和“union”的Union-Find结构中m个操作的最坏情况下的时间复杂度,此时所有“union”操作都发生在所有“find”操作之前。
union-find 结构从 n 个不相交的集合开始,每个集合包含一个元素。此外,每个集合都表示为一棵树,该结构使用路径压缩和按秩联合。
我的想法是,首先,所有联合操作一起将花费 O(log(n)),因为每个都花费 O(1),并且可能发生的操作不超过 log(n)。
之后,如果我们查看查找元素,那么对于每个元素,第一次查找将花费 O(log(n)),但下一次查找其路径中的每个元素将花费 O(1)。因此它将花费更少的时间 O(m*log(n))。
我不确定如何从这里继续。我认为这可能需要:
log(n) + log(n/2) + log(n/4) + .... = log(n)*log(n)
因为每次我们需要上去的路径级别都会变短。
然而。我不确定,也看不到此处使用了 m 参数。也许还需要在分析中使用逆阿克曼函数,但我不知道如何。