2

我正在使用元启发式方法编写一些代码,以找到解决固定电荷传输问题 (FCTP) 的良好解决方案。

我遇到的问题是基于为底层二分图找到生成树来生成一个起始解决方案。

我希望它是一棵随机生成树,这样我就可以多次针对同一个问题运行该过程,可能会得到不同的解决方案。

我在做这件事时遇到了一些困难。到目前为止,我采用的方法是对弧进行随机排列,然后遍历此列表,如果不会创建循环,则按顺序将它们放入基础。

我需要找到一种快速的方法来检查是否包含弧会创建一个循环。我不想“蛮力”它,因为考虑到大问题实例,这种方法可能需要大量时间。

鉴于这A是一个具有随机排列的弧的数组,您将如何进行选择过程?

我已经为此工作了几个小时,但我尝试过的任何方法都没有奏效,其中大部分在应用方面都是荒谬的......

4

2 回答 2

3

Kruskals 算法用于寻找最小生成树。快速循环检测实际上并不是 Kruskals 算法的一部分。该算法将使用能够快速找到循环的数据结构以及缓慢的幼稚尝试(但是复杂性会有所不同)。

然而,Kruskals 算法在这里走上了正轨,因为它通常使用所谓的联合查找或不相交集数据结构来快速检测循环。这是您的算法所需的维基百科上克鲁斯卡尔算法页面的一部分。这也链接在维基百科上:http ://en.wikipedia.org/wiki/Disjoint-set_data_structure

于 2012-03-29T19:08:36.757 回答
2

经过长时间的研究,我找到了Kruskal 的算法。我只需要随机化我调查图表节点的顺序。

于 2012-03-29T17:06:30.907 回答