如何实现有效算法(优于O(n 2 ))以解决非二分图中的赋值问题的任何想法?
主要想法如下:
我有两个相同的集合,例如S1 = [A,B,C,D]
和S2 = [A,B,C,D]
,并且集合的不同元素之间存在一些边缘,具有给定的成本,例如A->B (cost 4)
,B->C (cost 3)
,C->A (cost 10)
,D->A (cost 6)
。
我想找到最佳分配方式,以便:分配的元素数量最大,总成本最低。 (分配的元素数量更重要)。
因此,对于此示例,最佳分配将是:
A->D (cost 6)
B->C (cost 3)
[A,B,C,D]
已分配,费用最低:9
另一个,但不是最好的将是:
A->B (cost 4)
其余部分无法分配,因为A
已被分配,因此分配不是最大值
我在O(n 2 )中设计了一个太慢的贪婪解决方案。
集合的大小通常很小(5-10)个元素。
答案 0 :(得分:1)
我假设您有一个无向图,并且您希望选择最大边数,以便在同一节点上没有两个边入射(节点=描述中的set元素)。您还希望使用所选边的最小总成本来打破关系。如果这不符合您的要求,请告诉我。
创建上面一个的双重图形(每个原始边缘一个节点,如果相应的原始边缘入射到同一个顶点,则连接两个节点)。然后,您正在寻找双节点的maximum independent set。不幸的是,这是一个NP难题。这只是最大边数,使用权重打破关系可能稍微困难一些。幸运的是,你的N是5-10,所以你可以蛮力。
答案 1 :(得分:1)