【发布时间】:2017-02-02 15:10:53
【问题描述】:
我创建了一个随机组创建者,但随机并不能真正保证您与以前没有合作过的人一起工作。如果有人能够生成一个“具有历史记录的随机组生成器”,它可以跟踪以前的组并避免将人们一遍又一遍地与相同的人分组,我肯定会使用它!有人知道怎么做吗?
为了清楚起见:给定一个字符串数组
["Jason", "Kim", "Callie", "Luke"]
和一个先前配对的数组(也是数组)
[[["Jason", "Kim"], ["Callie", "Luke"]], [["Jason", "Luke"], ["Callie", "Kim"]]]
返回重复组成员最少的分组
[["Jason", "Callie"], ["Luke", "Kim"]]
我想我要尽量减少的数字是重复合作伙伴的数量。所以对于每一对两个人,每次他们已经在一个团队中,如果结果将他们放在同一个团队中,结果就会有那个分数。例如,到达返回值的“评分”可能如下所示:
["Jason", "Kim"] have a score of 1, they have been paired together before
["Callie", "Luke"] have a score of 1, they have been paired together before
["Jason", "Luke"] have a score of 1, they have been paired together before
["Callie", "Kim"] have a score of 1, they have been paired together before
["Jason", "Callie"] have a score of 0, they have not been paired together before
["Luke", "Kim"] have a score of 0, they have not been paired together before
选择覆盖整个列表的集合,同时生成最小的分数。在这种情况下,配对 ["Jason", "Callie"] 和 ["Luke", "Kim"] 覆盖了整个集合,得分为 0(没有重复分组),因此它是最优解(0是最好的结果)。
这可能是错误的方法(因为我想象它需要 n 平方时间),但希望它能让我了解我正在尝试优化的内容。这不需要是一个完美的优化,只是一个“体面的答案”,不会每次都将相同的组放在一起。
理想情况下,它能够处理任何大小的组,并且还能够处理当天有人可能不在的事实(并非所有人都会在所有数组中)。我会喜欢一个 javascript 答案,但如果有人能提出逻辑,我应该能够翻译。
【问题讨论】:
-
请补充一些想法,你如何从第二行到第三行,结果。
-
你可以寻找加权随机抽样
-
@NinaScholz 希望对您有所帮助?我尝试对这些步骤添加更深入的解释。
标签: javascript arrays algorithm heuristics