afc*_*ano 2 sorting algorithm combinations scheduling
有一项任务需要每天由两个人执行,并且有一个团队可用。
这个想法是将两个不同的人分配给该任务,每种可能的组合至少分配一次。
此外,理想情况下,应尽可能从前一个分配日开始分配任何特定人员。
例子:
给定球队:A、B、C、D、E、F
该任务的时间表可以是:
Day 1 = A, D
Day 2 = B, E
Day 3 = C, F
Day 4 = A, E
Day 5 = B, F
Day 6 = C, D
Day 7 = A, F
Day 8 = B, D
Day 9 = C, E
Day 10 = E, D
Day 11 = B, E
Day 12 = C, A
...
Run Code Online (Sandbox Code Playgroud)
请注意,相同的字母被分配与前一次有一定距离。例如,A 分配给第 1、4、7、12 天,D 分配给第 1、6、8、10 天。另请注意,所有可能的组合都存在。
目前,我可以“手动”对小团队(6 - 8 人)的配对进行组合和排序,但对于较大的团队,我无法想出一种算法。
有什么算法可以帮助我吗?
奖励积分:
在任何时候,一个人都可能变得“不活跃”,因此他应该被遵守规则的其他人取代。
非常感谢!
维基百科上描述的以下循环调度算法解决了您问题的非奖励部分。这个想法是配对
0 1 2 3 4
5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
得到对05 16 27 38 49,然后顺时针旋转,除了0
0 5 1 2 3
6 7 8 9 4
Run Code Online (Sandbox Code Playgroud)
获取对06 57 18 29 34,然后重复
0 6 5 1 2
7 8 9 4 3
Run Code Online (Sandbox Code Playgroud)
尽管该算法是为并行循环赛而设计的,但它恰好具有这样的属性:由于顺时针旋转不会将任何元素水平移动很远,因此每个特定数字出现之间的间隙相当一致。
为了回答你的额外问题,我建议尝试本地搜索——随机中断不可能让任何提前组合解决方案正常工作。