Группировка списка элементов в максимально возможное количество номеров - PullRequest
1 голос
/ 27 апреля 2019

Требование: разделить список на 4 отдельные группы на основе значения для каждой строки.

| Player        | Skill         |
| ------------- |:-------------:|
| Player 1      | 10000         |
| Player 2      | 50000         |
| Player 3      | 2000          |
| Player 4      | 11000         |
| Player 5      | 7525          |
| Player 6      | 100           |
| Player 7      | 999           |
| Player 8      | 14579         |
| Player 9      | 26700         |

Таким образом, в приведенном выше примере эти игроки будут разделены на 4 группы:

| Group         | # of players  |
| ------------- |:-------------:|
| Group1        | 2             |
| Group2        | 2             |
| Group3        | 2             |
| Group4        | 3             |

Количество игроков в группе должно быть как можно ближе, однако, как и в группе, общее количество навыков в группах должно быть примерно одинаковым по количеству каждый раз.


Прежде чем я зайду слишком далеко вниз по кроличьей норе (поскольку формулировка такого вопроса в простом поиске в Google не очень хороша), существуют ли какие-либо встроенные функции Excel, которые можно использовать для достижения этой цели или возможных усилий в VBA, который можно исследовать для достижения требуемого результата?

1 Ответ

1 голос
/ 27 апреля 2019

Это не ответ!Но предположим, что вы используете простой алгоритм:

Calculate average skill level (ASL) for all 9 players
Set TSG (total skill for group) to zero.

Loop:Take largest skill Level (LSL) of remaining players
If TSG+LSL>ASL 
    Go to next group
Else 
    Add to total skill (TSG) for this group
    Remove player from list
Repeat loop until no players remaining.

Если вы примените это вручную к своим данным, вы должны получить:

Среднее = 30725,75

+---------+---------+---------+---------+
| Group 1 | Group 2 | Group 3 | Group 4 |
+---------+---------+---------+---------+
|   50000 |   26700 |   14579 |   10000 |
|         |    2000 |   11000 |    7525 |
|         |     999 |         |         |
|         |     100 |         |         |
|         |         |         |         |
|   50000 |   29799 |   25579 |   17525 |
+---------+---------+---------+---------+

Ясно, что естьпара вопросов - вам может не потребоваться одна группа, содержащая только игрока с самым высоким уровнем квалификации.Также вы можете пересчитать оставшихся игроков после того, как выберете самого умелого игрока.Хотя должен быть отправной точкой - может быть реализован довольно легко с помощью формул или VBA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...