如何根据物品匹配物品?

时间:2015-10-30 17:53:07

标签: c# algorithm

我正在尝试编写一个基于其属性匹配项的算法。

我有一个课程列表,每个课程属于一个或多个类别。单个级别必须包含每个类别的1个主题。一个主题不能用于一个级别中超过1个类别的证据。

所以,例如:

课程x包含类别:Cat 1,Cat 2,Cat 3,Cat 4和Cat 5.

Subject A - Cat 1, Cat 2
Subject B - Cat 2, Cat 3
Subject C - Cat 4
Subject D - Cat 2, Cat 4
Subject E - Cat 5

在这种情况下,我会把

A Cat 1, 
B Cat 3, 
C Cat 4, 
D Cat 2, 
E Cat 5. 

学生在运行算法时可能尚未完成所有类别,因此需要能够应对此问题。

任何帮助/建议/论文/片段都非常感谢。我有1500条记录要匹配,必须手动启动此过程才能按时完成。

1 个答案:

答案 0 :(得分:1)

对我来说这看起来像bipartite graph matching problem,其中图表包含两个方面:类别,主题。边缘是类别与主题的连接。

图表的最大匹配也是某些course x的最佳结果。

在您的示例中,二分图是:

G=(V,U,E)
V = { Cat1, Cat2, Cat3, Cat4, Cat5}
U = { Subject A, Subject B, Subject C, Subject D, Subject E} 
E = { (A,1), (A,2), (B,2), (B,3), (C,4), (D,2), (D,4), (E,5) } 

这可以通过各种方式解决(例如将其转换为maximal flow problem,或使用Hopcroft-Karp algorithm