二分图的随机生成树

时间:2012-03-29 12:13:05

标签: algorithm random graph bipartite spanning-tree

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

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

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

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

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

鉴于A是一个随机排列弧的数组,你会如何选择程序呢?

我现在已经花了几个小时研究这个问题,而且我尝试过的任何东西都没有用,大部分都是在申请时没有意义......

2 个答案:

答案 0 :(得分:3)

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

然而,Kruskals算法在这里正在进行中,因为它通常使用所谓的union-find或disjoint-set数据结构来快速检测周期。这是维基百科上的Kruskals Algorithm页面的一部分,您需要算法。这也与维基百科有关:http://en.wikipedia.org/wiki/Disjoint-set_data_structure

答案 1 :(得分:2)

经过长时间的研究后,我发现了Kruskal's algorithm。我只需要随机调整我调查图表节点的顺序。