我想做类似于Appointment scheduling algorithm (N people with N free-busy slots, constraint-satisfaction).的事情但是我的额外要求是我应该能够提供第二个最优解,第三个最优解等等。 是否有可能在不严重影响性能的情况下实现这一目标?
答案 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,e
,a,d,e
或a,b,g
将是次优的(假设为a,b,g
)。
现在尝试从a
删除b
,g
,然后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
作为最大匹配。
请注意,这两个是相同的,所以你不应该把它作为第二最佳,而另一个作为第三最佳。
虽然你应该保留两者 - 你需要检查从c
和d
中删除e
,b,c,d,e
和a,c,d,e
生成的图表。
由于当c,d,e
是次最佳时,您需要检查从两者中删除的所有边缘,这可能会对运行时间产生负面影响。