0

我正在构建一个配对系统,该系统应该在两个用户之间创建配对并将他们安排在会议中。选择是基于我很难弄清楚的标准。标准是这对之间不能存在较早的匹配。

我的输入是n包含电子邮件地址的大小列表。这个列表应该被分成对。限制是该匹配以前没有发生过。

例如,我的列表将包含几个用户 ID

list = {1,5,6,634,533,515,61,53}

同时我有一个旧对存在的数据库表:

previous_pairs
---------------------
id     date                    status
1      2016-10-14 12:52:24.214 1
2      2016-10-15 12:52:24.214 2
3      2016-10-16 12:52:24.214 0
4      2016-10-17 12:52:24.214 2

previous_pair_users
---------------------
id     userid
1      1
1      5
2      634
2      553
3      515
3      61
4      53
4      1

解决这个问题的好方法是什么?我现在的测试解决方案是弹出两个随机用户并检查他们是否有以前的匹配。如果不存在匹配项,我会弹出一个新的随机数(如果可能)并将其中一个不正确的用户推回列表。如果两个人是最后一个,他们无论如何都会匹配。这对我来说听起来不太好,因为我应该根据我已经“现有”对的列表预测哪些匹配不会发生。

您对如何让我开始构建此程序有任何想法吗?Java 8 流看起来很有趣,可能是解决这个问题的一种方法,但不幸的是我对此很陌生。

4

1 回答 1

0

这里的解决方案是使用 MySQL 的 group_concat 功能创建一个包含旧匹配项的元组列表:

SELECT group_concat(MatchProfiles.ProfileId) FROM Matches
INNER JOIN MatchProfiles ON Matches.MatchId = MatchProfiles.MatchId
GROUP BY Matches.MatchId

old_matches = ((42,52),(12,52),(19,52),(10,12))

之后,我选择候选人并使用我的 pop_random() 生成一个新的元组列表

new_matches = ((42,12),(19,48),(10,36))

当两个列表都完成后,我查看交叉点以查找任何重复项

duplicates = list(set(new_matches) & set(old_matches))

如果我们有重复,我们只需再次运行随机发生器 X 尝试,直到我发现它不可能。

我知道这在拥有大量数字时不是很有效,但我的数据集永远不会那么大,所以我认为它已经足够好了。

于 2016-11-22T15:48:02.797 回答