一组集(图)分区之间的转换数的算法

时间:2010-08-22 01:37:33

标签: algorithm graph set data-partitioning

假设我有一个分组成组(或图表)。我有兴趣找到两个分区之间的转换次数,其中转换涉及从一个分区中取出一个元素并将其移动到另一个分区(或单独的分区)

例如,分区之间有一个转换

1 2 | 31 | 2 | 3

但在1 2 3 41 2 | 3 | 4之间

我相信最小转换次数是2。

所以我的问题是,是否存在给出一对分区和一组的算法,可以返回它们之间的转换状态数?

还有一个复杂的问题,这个集合实际上代表了一个图形,我希望每个分区(和转换分区)都能连接(即如果在1和2之间不存在/直接连接,则1 2 | 3将无效没有被3个单独的分区阻止)但除非你对这个话题真正开悟,你很可能会忽略它。

由于

作为一个注释,我确实有一个我自己想到的方法,它基本上是找到分区A的所有邻居(即可以在一个转换中找到的所有分区)并对分区B执行相同的操作,如果这些是一些这两组邻居之间重叠,那么他们就是一个过渡。然而,这种方法很快就变得非常昂贵。

1 个答案:

答案 0 :(得分:1)

我会稍微扩展你的方法,基本上构建一个图并进行图搜索。图的顶点将是该集的有效分区,并且边将是过渡。您实际上可以同时构建和搜索,并且只构建搜索所需的图形部分。

为此,我将使用A *(或其他最佳优先搜索),并在每一步生成当前分区的所有邻居。棘手的部分是确定A *搜索的最佳启发式。您可以通过假设所有转换将导致连接的分区来估计转换的数量(基本上,忽略您的约束)。

这显然很昂贵,但您可以通过使用最佳优先搜索和生成图表来节省时间和空间。