我正在构建一个配对系统,该系统应该在两个用户之间创建配对并在会议中安排它们。选择是基于我很难搞清楚的标准。标准是该对之间不存在较早的匹配。
我的输入是包含电子邮件地址的大小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流看起来很有趣,可能是解决这个问题的一种方法,但不幸的是我对此很新。
答案 0 :(得分: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尝试直到我发现它不可能。
我知道当拥有大量数字时这不是很有效,但我的数据集永远不会那么大,所以我认为这样就足够了。