БЫТЬ ПРАКТИЧНЫМ
(Распаковка) Алгоритм упаковки (Bin)
Спойлер: просто арендуйте грузовик побольше!
Недавно я столкнулся с практической проблемой: у моей жены была выставка, на которой нужно было перевезти 35+ коробок разного размера по всему штату. Для этого потребуется грузовой фургон/грузовик. Дело в том, что мы хотели, чтобы все эти коробки хорошо помещались в грузовом отсеке, без лишнего «пространства для перемещения», так как искусство было хрупким, и мы не хотели, чтобы оно повредилось при транспортировке.
Алгоритм упаковки в корзину
Как программиста, моим первым побуждением было придумать алгоритм, который рассчитывал бы, поместятся ли все эти ящики в доступное грузовое пространство, и сколько места/объема осталось, поскольку мы не хотели, чтобы их было слишком много.
Алгоритм будет примерно таким:
Для заданного кубовидного контейнера с размерами {l, w, h} определите, может ли заданное количество коробок — также кубоидов с размерами {l, w, h) — поместиться в данный контейнер. Вернуть истину или ложь.
Это займет несколько шагов/функций:
- Проверьте, превышает ли размер самой большой отдельной коробки самый большой размер контейнера (например, может ли поместиться конкретная отдельная коробка)
- Вычислите общий объем контейнера и общий объем всех ящиков. Если объем контейнера меньше объема всех ящиков, понятно - все они не влезут.
- Отсортируйте все коробки по наибольшему измерению (как правило, это должна быть длина)
- Складывайте ящики таким образом, чтобы более тяжелые/большие ящики были внизу и подальше от погрузочной платформы (вы не хотите ее блокировать).
- Добавить один ящик
- Снова пересчитайте доступный объем.
- Найдите следующую коробку, которая могла бы поместиться в доступном пространстве/объеме, особенно в некоторых «карманах», оставшихся от больших коробок.
- Промойте и повторите для дополнительной коробки
- Рассчитать оставшееся пространство после загрузки последней коробки.
- И т.д., и т.д…
Вскоре я понял, что это будет гораздо более сложная задача, чем я себе представлял, и на разработку этого алгоритма уйдет гораздо больше времени, чем он будет стоить для наших практических целей.
Решение
И тут мне пришло в голову: подождите минутку! Существует целая индустрия, занимающаяся судоходством, они наверняка придумали решение этой проблемы. После беглых исследований и некоторых страшных математических определений мы наткнулись на практическое решение — сайт, который дал бы нам именно то, что я стремился создать:
Он даже предлагает пошаговое руководство по упаковке ваших вещей:
Хороший!
У него есть и другие опции, такие как упаковка Multi bin, максимальная загрузка контейнера и т. д. Мы не углублялись в них.
Вывод
После всей этой суматохи мы отказались от этого решения, так как не хотели измерять все коробки :).
В конце концов, может быть, лучший совет - Арендуйте грузовик побольше!
Ваше здоровье!