我正在尝试编写一个基于其属性匹配项的算法。
我有一个课程列表,每个课程属于一个或多个类别。单个级别必须包含每个类别的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条记录要匹配,必须手动启动此过程才能按时完成。
答案 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)