我正在尝试提出一种算法,用于对固定数量的用户进行排序和分配。我发现的大多数算法都假定要除以的组数;我想创建一个智能系统,其中自动分配组(尽可能最好)并根据用户总数以及每组的最小和最大用户数进行预测。
为每个组假设以下标准:
以下是基于总用户数和每组最小/最大值的一些可能性:
24位成员:
21名成员:
10位成员:
虽然没有必要,但团体的“更好的选择”将是每组相同数量的用户(例如,10个成员将是2组5个),除非不可能(例如21个成员),其中5 + 5 + 5 + 6每组成员比“6 + 6 + 6 + 3”更“平等”。
答案 0 :(得分:0)
根据您迄今为止给出的标准 - 最小的群体规模变化 - 案例数量有限。
注意21你遗漏了7组3的明显选择。
使用此算法:
也许你正在静静地思考(但不是说)你也希望尽量减少群体的数量。如果这是真的,那么您需要指出少数组和组大小变化的相对重要性。这两个因素需要权衡。
答案 1 :(得分:0)
这是JS的解决方案,适合任何感兴趣的人https://jsfiddle.net/kp8d0w27/6/
第一个循环检查是否可以平均分配与会者总数。如果可以,那就这样做。
第二个循环只有在总数不能被平均分割时才会运行,并且会循环,直到余数(模数)大于最小值且小于最大值。
最后,我使用一个名为chunk的Lodash函数将原始数组拆分成相等的部分。
- Generated (JIT:ed) code
- Loaded libraries (including jar and class files)
- Control structures for the java heap
- Thread Stacks
- User native memory (malloc:ed in JNI)
不是最干净的(并且在某些情况下我没有考虑到这一点,比如参加人数少于最小值),我仍在重构,但它运作良好并解决了我原来的问题。