PHP вычисляет сбалансированные массивы - PullRequest
4 голосов
/ 02 декабря 2009

Хорошо, я не уверен, что название настолько эффективно, но это лучшее, что я мог придумать.

В основном вот сценарий.

У меня 11 категорий. В каждой категории у меня есть предметы, но в одной категории может быть 1 предмет, у 1 - 20.

Теперь я хочу разделить 11 категорий на 5 стеков или столбцов.

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

Итак, учитывая следующие данные:

Category | Items
-------------------------
Cat 1 | 10 
Cat 2 | 3 
Cat 3 | 7 
Cat 4 | 11 
Cat 5 | 5 
Cat 6 | 13
Cat 7 | 19 
Cat 8 | 5  
Cat 9 | 3 
Cat 10 | 9 
Cat 10 | 15

Total = 100 Items 

Так что я хочу, чтобы предметы были равномерно распределены по стопкам.

Есть 5 стеков, поэтому чтобы быть равными, должно быть 20 предметов в стеке. Но есть проблема, предметы из 1 стека не могут переполниться. Итак, как я могу рассчитать данные для вывода что-то вроде этого:

Stack 1|Stack 2|Stack 3|Stack 4|Stack 5
-------|-------|-------|-------|-------
Cat 10 |Cat 1  |Cat 11 |Cat 6  |Cat 7
Cat 4  |Cat 3  |Cat 8  |Cat 9  |
       |Cat 2  |       |Cat 5  |

20      20      20      21      19

Неважно, к какой категории относится какая стопка, если предметы распределены наиболее равномерно по стопкам.

Теперь результаты этого расчета стека будут кэшироваться, так как мне не нужно вычислять очень часто, поэтому, если решение очень сильно загружает процессор, все равно отправьте его.

Спасибо:)

1 Ответ

1 голос
/ 02 декабря 2009

Это проблема ранца. http://en.wikipedia.org/wiki/Knapsack_problem Есть много ресурсов, если у вас проблема с рюкзаком Google

Один простой способ - попробовать все возможные комбинации. Для каждой комбинации, которую вы рассчитываете, вы также рассчитываете стандартное отклонение. Используйте стандартное отклонение, чтобы сохранить наиболее подходящую комбинацию.

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