使用次优解决方案访问调度算法

时间:2013-11-04 05:58:52

标签: algorithm graph-algorithm

我想做类似于Appointment scheduling algorithm (N people with N free-busy slots, constraint-satisfaction).的事情但是我的额外要求是我应该能够提供第二个最优解,第三个最优解等等。 是否有可能在不严重影响性能的情况下实现这一目标?

1 个答案:

答案 0 :(得分:1)

根据我的知识,没有很多研究(从我的知识)按顺序从最优的方面找到解决方案,因为大多数时候我们只关心找到尽可能高效的解决方案。因此,假设一个更好的解决方案可能不会被曝光,我会给出这个解决方案。

要找到最有效的解决方案,请使用the accepted answer in the linked question。为方便起见,在这里复制:

  

在二分图中找到最大匹配(一组顶点是一组人,另一组在一组插槽中,如果此人可用于此插槽,则在人和插槽之间存在边缘)。

     

the Hopcroft-Karp algorithm可以解决此问题。

     

复杂性O(n5/2)在最坏的情况下,如果图表稀疏则更好。

现在,依次尝试从输入图中删除输出的每个边缘并再次运行算法。

其中一次运行应该为您提供第二最佳选择。

现在,反过来,尝试从提供第二最佳效果的图表中删除输出的每个边缘,然后再次运行算法。

现在第三个最优的应该是生成的集合。

现在同样尝试删除第三最佳图的边缘。

等等。

<强>复杂度:

O(n5/2)是最佳解决方案的最坏情况。

O(n7/2)O(n.n5/2))在最糟糕的情况下生成每个下一个解决方案。

示例:

假设你有边a,b,c,d,e,f,g

假设最大匹配为a,b,c

现在,您从输入图表中删除a并获取b,c,d,e,f,g 假设此图表的最大匹配为c,d,e

现在,您从输入图表中删除b并获取a,c,d,e,f,g 假设此图表的最大匹配为a,d,e

现在,您从输入图表中删除c并获取a,b,d,e,f,g 假设此图表的最大匹配为a,b,g

现在,c,d,ea,d,ea,b,g将是次优的(假设为a,b,g)。

现在尝试从a删除bg,然后a,b,d,e,f,g,并获得这3幅图中每一张的最大匹配。

这5组中的一组(排除第二最佳组的6组)应该是第三组。

等等。

<强>证明:

我将不得不考虑更多......

注意:

例如,假设我们的边a,b,c,d,e的最大匹配数为a,b,c

我们删除a并将c,d,e作为最大匹配。

我们删除b并将c,d,e作为最大匹配。

请注意,这两个是相同的,所以你不应该把它作为第二最佳,而另一个作为第三最佳。

虽然你应该保留两者 - 你需要检查从cd中删除eb,c,d,ea,c,d,e生成的图表。

由于当c,d,e是次最佳时,您需要检查从两者中删除的所有边缘,这可能会对运行时间产生负面影响。