示例问题中的合并操作?

时间:2016-02-12 11:14:00

标签: c++ algorithm data-structures merge set

我读了一个简短的解决方案。今天如下:

假设 C = {1,2,...,100} ,我们有一些 A 1 A n (n <= 100)首先我们有 A i = {i}

在每一步,我们从(a,b)∈R中选择一个任意元素。假设a∈A i b∈A j 。如果 i≠j ,我们在 A i 中合并 A j 。 (即: A i ←A i ∪A j )。

使用此算法,我们需要最多99次合并。 我的问题是关于这个算法最多如何执行99合并?

1 个答案:

答案 0 :(得分:0)

如果我正确地理解了您的问题,这就被称为number of matches in a knockout tournament,几乎按照定义。

假设在某些时候你有 k 集合 - 它们并不重要 - 你决定合并两个。然后你最终得到 k - 1 集。

例如,假设您将{1,3,23,4}与{2,5}合并。你从2套开始,以1结束。

因此,每次合并都会将组数减少1.如果从100个单例集开始,99次合并必然会将组数减少为1。