2016-10-26 9 views
3

Я застрял в следующем вопросе Problem Statement. Я подумал об этом некоторое время, а затем посмотрел на некоторые подсказки для проблемы, потому что я не мог придумать решение. Я понимаю, что это особый случай проблем с «Bin Packing», которые в целом являются NP-Hard. Глядя на эту идею, в частности CodeForces Blog Idea, я не могу понять, почему это даже работает оптимально здесь. В частности, как мы можем доказать, что этот алгоритм оптимален?Google APAC (CodeJam) Алгоритм черепицы

Постановка задачи:

Энцо делает ремонт в своем новом доме. Самая сложная часть - , чтобы купить точное количество плиток. Он хочет N плиток разных размеров. Разумеется, их нужно вырезать из плиток, которые он купил у . Все необходимые плитки квадратные. Длина сторон плитки равна 2^S1, 2^S2, ..., 2^SN. Он может купить только много плиток размером M * M, и он решает только разрезать плитки параллельно их бокам для удобства . Сколько плиток нужно купить?

+0

Или другой алгоритм, разрешающий эту проблему с убедительным доказательством правильности. –

+3

Не доказательство, а какая-то интуиция в ручном режиме: причина, по которой жадные алгоритмы для упаковки бинов обычно не оптимальна, состоит в том, что два меньших квадрата могут быть больше одного большого. Поскольку все стороны в этой задаче имеют две степени, этого не может быть. –

+0

Я понимаю, что тот факт, что ящики вписываются в другой, играет здесь определенную роль, но формально у меня нет понимания, как это помогает. –

ответ

4

Суть предлагаемого решения является первым нужным уменьшением (FFD) эвристики.

размеры вызова Давайте из за Bin упаковки проблемы вложенности если для каждого я < J, я = к IJ J. Обратите внимание, что в соответствии с этим определением исходной проблемой является Упаковка гнездящей упаковки проблема.

Давайте доказательство того, что эвристика FFD решает Упаковка вложенного бина. Рассмотрим встречный пример: невозрастающая последовательность размеров позиций a i и оптимальное решение OPT, которое не достигается эвристикой FFD. Существует первый i, который требует номер ячейки OPT + 1. Это означает, что все предыдущие элементы были упакованы, и нет места для позиции i.

Давайте сравним распределение первого я-1 элементы с использованием FFD и оптимальное распределение я пунктов. Общий размер размещенных предметов в оптимальном распределении выше на a i. Таким образом, по крайней мере для одного бина общий размер элементов в оптимальном распределении больше, чем в распределении FFD. Благодаря вложенности все элементы, рассмотренные до сих пор, может быть разделен на некоторое количество а I -sized пунктов, так как итоговые суммы кратные я, а минимальная возможная разница между ними в i. Поэтому мы нашли корзину для предмета i, что приводит к противоречию.

Противоречие ясно в 1D корпусе (оригинал Bin Packing проблема), но не так ясно для 2D-футляра. Введем сетку с размером ячейки A = √a i и происхождение в верхнем левом углу. Длина стороны уже размещенного названия будет кратной A. Мы переместим все заголовки в обоих решениях вверх (по порядку сверху вниз), затем влево (в порядке слева направо). После этого все плитки будут иметь целые координаты на сетке. Но в оптимальном решении есть более занятые ячейки, чем FFD, поэтому должна быть хотя бы одна ячейка A × A, которая занята в оптимальном решении и свободна в FFD. Давайте использовать его для размещения плитки i.

+0

У меня есть два сомнения: 1) Вы имели в виду «невозрастающую последовательность предметов ...»? 2) Линия «поэтому минимальная возможная разница между размерами всех ящиков составляет ai», по-видимому, неясна. –

+0

1) Конечно. 2) Добавлено разъяснение. – kgeorgiy

+0

Хорошо, я понял, что мы показали, что в решении FFD существует объединенная область ai, но как мы уверены, что эта область находится в одной плите, то есть возможно, что нет единой плитки с областью ai, но многие небольшие области в нескольких плитах способствуют различию ai? –

 Смежные вопросы

  • Нет связанных вопросов^_^