Algorithm 边团覆盖算法
我试图编写一个算法,计算输入图(无向和无自循环)的边团覆盖数(覆盖所有边的最小团数)。我的想法是Algorithm 边团覆盖算法,algorithm,graph-theory,intersection,clique,clique-problem,Algorithm,Graph Theory,Intersection,Clique,Clique Problem,我试图编写一个算法,计算输入图(无向和无自循环)的边团覆盖数(覆盖所有边的最小团数)。我的想法是 使用Bron-Kerbosch算法计算所有最大派系,以及 如果有任何1,2,3,。。。其中一个会覆盖所有边缘,直到我找到 最小数 这是否有效,是否有人知道更好的方法;有标准算法吗?令我惊讶的是,我找不到任何这样的算法。我知道这个问题是NP难的,所以我不希望有一个快速的解决方案 两年前我就在研究类似的问题,但我从未见过任何标准的解决方法。我做了以下工作: 计算所有最大团。 比以前好多了吗 在我的情况下
这是否有效,是否有人知道更好的方法;有标准算法吗?令我惊讶的是,我找不到任何这样的算法。我知道这个问题是NP难的,所以我不希望有一个快速的解决方案 两年前我就在研究类似的问题,但我从未见过任何标准的解决方法。我做了以下工作:
第二部分的一些细节。定义一组关于每条边的布尔变量,如果它的值==True,则它被覆盖,否则它不被覆盖。添加约束,使您可以仅覆盖每个组的边集。最后,添加对应于每个集团的变量,如果它是==True,那么它已经被使用了,否则就没有了。最后,要求覆盖所有边缘,并且使用的派系数量最少 我会像你现在这样收集最大的派系(或者使用不同的算法,如所建议的),但随后使用。这不能保证加速,但通常会在“简单”实例上产生较大的加速 特别是:
- 与其尝试以增加子集大小的顺序尝试最大团的所有子集,不如选择一条边uv并在其上进行分支。这意味着:
- 对于包含uv的每个最大团C:
- 创建一个包含当前解决方案中所有派系的暂定新部分解决方案
- 将C添加到此部分解决方案中
- 创建一个新的子问题,其中包含当前子问题的图形,但C中的所有顶点都折叠为一个顶点
- 递归来解决这个较小的子问题
- 对于包含uv的每个最大团C:
- 跟踪到目前为止最好的完整解决方案。这是您的上限(UB)。您不需要继续处理已达到此上限但仍存在边的任何子问题;更好的解决方案已经存在李>
- 最好选择一个被尽可能少的派系所覆盖的边缘进行分支。在选择尝试这些派系的顺序时,先尝试你认为最好的(可能是最大的)一个