是否有任何已知的算法帽可以解决以下问题: 我们召开了多次同步会谈。用户应该标记感兴趣的谈话,然后我们要创建会谈时间表,以便我的大多数人可以参加他们的会谈并最大限度地减少时间表冲突。
这与已知解决方案算法的任何已知问题类似吗?
答案 0 :(得分:0)
这听起来像NP完全问题,因为搜索空间随着房间和讲座的数量呈指数增长。
我认为你可以提出一些贪婪算法,虽然可能不是最佳解决方案,但却会产生可行的算法。
我想了一会儿,想出了算法。建议,改进,其他算法是受欢迎的:)
假设每个房间都有m
个房间,l
个广告位,广告位已对齐且有n
个参与者。最多会有m
* l
个讲座。我将创建一个包含# of lectures
个顶点的完整图形,其中边将具有根据参与者首选项计算的权重。我会要求参与者提供一份有序的讲座清单。我将为每个位置分配一些值 - 例如20到第一个,1到最后。然后,对于每个参与者,我将接受他的订购和演讲a
我将向每个相邻边添加位置值减去相对节点的位置值。
这个解释听起来有点不足让我们举个例子。有四个节点a
,b
,c
,d
。参与者按字母顺序对它们进行排序。 1.表示20分,2。 - > 10分,3。 - > 5分,4。 - > 0分因此,a
和b
之间的行数将为10分。 a
和d
之间的20分。
然后,该图表示讲座之间的关系。值越小,两个讲座在不同时间发生的越重要。或者反过来越高越好,将它们同时放到不同的房间。
现在我们需要找到长度为m
的最小l
分离路径,为每个房间mx
分配一组讲座。这很难(没有证明:))。现在是时候提出一个贪婪的算法来找到一些局部最小值。我们可以使用例如Kruscal算法(或者更确切地说是Prim的,因为图形将会相当密集)以找到最小生成树然后找到最小值。长度为l
的路径。然后我们删除路径的节点,将它们分配到房间m1
。找到分钟。生成树在新图中。总共重复m
次。
解决方案不一定是最优的,因为如果使用第一个最小路径中的两条边构造它们,m
min路径的总和可能会更低,因此算法将找不到最优解。
我对你的想法感兴趣。