二部图中的联合分组?

数据挖掘 图表
2021-09-26 12:45:02

我试图找出一个好的(和快速的)解决以下问题的方法:

我有两个正在使用的模型,我们称它们为球员和团队。一个玩家可以在多个团队中,一个团队可以有多个玩家)。我正在努力在允许用户选择多个团队(复选框)的表单上创建 UI 元素。当用户选择(或取消选择)球队时,我想显示按球员分组的球队。

因此,例如:

  1. 如果所选球队没有相交的球员,则每个球队都有自己的部分。

  2. 如果用户选择了两支球队并且他们有相同的球员,那么会有一个部分包含两支球队和所有球员的名字。

  3. 如果 TEAM_A 有球员 [1, 2, 4, 5],而 TEAM_B 有球员 [1, 3, 5, 6]。会有以下部分:SECTION_X = [TEAM_A, TEAM_B, 1, 5], SECTION_Y = [TEAM_A, 2, 3], SECTION_Z = [TEAM_B, 3, 5]

我希望这很清楚。本质上,我想找到球员共同的球队并以此分组。我在想也许有一种方法可以通过导航二分图来做到这一点?不完全确定如何,我可能想多了。我希望通过在服务器上创建某种类型的数据结构并在客户端上使用它来做到这一点。我很想听听您的建议,并感谢您提供的任何帮助!

2个回答

你听说过相交图吗?您可以尝试将玩家绘制为点,将连接(队友)绘制为边缘,将团队绘制为顶部的透明彩色斑点。

至于您最初的问题,我无法理解您的目标。我认为您的表述定义不明确/不完整。假设您有团队 A [1,2] B [2,3] 和 C [1,3]。你想展示什么?你想列出维恩图的各个部分吗?我认为对于超过 3 组,这可能比二分图本身更麻烦 = 团队组成的简单列表。

将边缘(关系)存储在您的服务器中:

(TeamID, playerID)

当您想查找公共元素时,只需过滤所有边缘:

TeamID="TeamA" or TeamID="TeamB"

(您可以使用索引来加快速度等)

然后按 playerID 分组并检查每个组中有多少项目。具有两个项目的组属于两个团队并且是共享的。