У меня есть список прямоугольников с разными размерами.
rects = [100x20, 30x10, 10x10, 70x20, 40x30, 50x10]
Я пытаюсь визуализировать таблицу из этих прямоугольников.Если бы у меня было фиксированное количество столбцов, я просто мог бы рассчитать количество строк и размер каждой строки и столбца следующим образом:
numCols = 4;
for (i = 0; i < rects.size - 1, i++):
rect = rects[i];
col = i % numCols;
row = floor(i / numCols);
columns[col] = max(columns[col], rect.width);
rows[row] = max(rows[row], rect.height);
end for;
Теперь я хочу, чтобы моя таблица была настроена на максимальную строкуширина.Количество столбцов зависит от вычисления оптимальной ширины строки во время выполнения.
С приведенным выше списком и максимальной строкой с установленным значением 140 я ожидаю, что моя таблица будет:
rects = [100x20, 30x10, 70x10, 10x20, 40x30, 10x10]
100x20, 30x10
70x10, 10x20
40x30, 10x10
cols = [100, 30]
rows = [20, 20, 30]
MyПервой идеей подхода к этой ситуации является кэширование максимальной ширины столбца для каждого возможного количества столбцов.Последняя запись с суммой <= максимальная ширина строки затем выигрывает. </p>
max[1] = [100]
max[2] = [100, 30] - wins
max[3] = [100, 40, 70] - 210 > 140
max[4] = [100, 30, 70, 10]
max[5] = [100, 30, 70, 10, 40]
max[6] = [100, 30, 70, 10, 40, 10]
К сожалению, мне нужно создать запись в max для каждого возможного номера столбца.Список может стать довольно большим.Кто-нибудь знает алгоритм для решения этой проблемы оптимизации?