У вас есть общее количество элементов, поэтому вы можете разделить это число на количество столбцов, чтобы получить ожидаемое количество элементов в каждом столбце. Ваша задача состоит в том, чтобы минимизировать сумму квадратов разностей (поэтому, если вам нужно хранить 8 элементов, а вы сохраняете 10, вы получите квадрат разности 2² = 4 для этого столбца).
Затем можно написать рекурсивную функцию, которая для каждой категории решает, перемещать ли эту категорию в следующий столбец или оставить ее в текущем столбце. Это логическое решение, поэтому вы можете начать с ветви, которая создает наименьшую разницу, а затем ветви, которая создает наибольшую разницу. Функция будет отслеживать лучшее решение, найденное на данный момент, и немедленно остановится, если текущая сумма квадратов разностей будет больше, чем сумма для этого решения.