我一直在尝试找到一种算法,以找到有向图G的最大顶点循环覆盖率-即,一组不相交的循环,其中包含G中的所有顶点,并具有尽可能多的循环(我们不考虑这里的各个顶点循环)。我知道找到最小顶点循环覆盖以及找到具有精确k个循环的顶点循环覆盖的问题是NP完全的。但是最大案例呢?
虽然我通常会找到一个有趣的答案,但是我想用于此的图实际上受其构造的限制,因此即使问题是NP完全的,对于这些特定实例也可能会有多项式解。
我们有一个整数,元素l i的列表,我们将使用S,元素s i对L进行排序后再对其进行引用。举个例子:
该图的顶点将与对被识别,使得升我 = Ñ和š 我 ≠ Ñ。当且仅当s j = n时,该图具有有向边(n ,i )→ (m ,j )。(此图中的一个循环对应于一组值,这些值可以循环排列以使它们最终位于其排序位置。)
上面的示例将产生以下图形(使用基于1的索引):
不起作用的一件事是重复删除最小周期的贪婪方法(如本示例所示)。
请注意,这个问题(如果我没有犯任何错误)等同于询问您需要对给定列表进行多少次交换。(首先是启发这个问题的原因。)
在从Juho的答案中得到一些指示,并对文献进行了更多的筛选之后,我遇到了分配问题,该问题似乎密切相关。但是,分配问题是用加权二部图表示的,到目前为止,我还没有找到选择边和权重的方法来将其减少到这个问题。如果我们想用最小权重函数来表达问题,那么一种直观的方法就是说每个循环的权重为其中| C | 是循环中边(或顶点)的数量。(当然,这等效于将权重设置为− 1。)也就是说,权重取决于循环的大小,而不取决于循环所包含的特定边缘。但这也许给某人另一个减少问题的想法。
还似乎限制了循环的大小,这使一般图形的APX困难。这并不一定意味着对于最大化循环数的任务也是如此,对于此处正在考虑的特定图形也是如此,但似乎密切相关,因此可能很重要。
总结:通过上述过程构建的图形是否可以找到最大的顶点不相交循环覆盖?
作为两个助手,我还想知道最大顶点不相交的循环覆盖率是否也对至少包含一个循环覆盖率的任意图有有效的解决方案(可能会落入主要问题的答案),或者是否仅确定最大覆盖范围内的循环数(而不是每个循环中包含的实际边沿)会使问题变得更简单。如果人们认为自己应该得到完整的答案,我很乐意将这些问题作为单独的问题发布。