![]() |
|
![]() ![]() ![]() |
|
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
есть набор прямоугольников, его надо соединить так чтобы в итоге получился общий прямоугольник минимальной площади.
исходные прямоугольники нельзя переворачивать. наверно есть готовые алгоритмы? |
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
Всегда считал, что это достаточно мутные задачи.
Но тем не менее тут говорят нечто другое Похожие задачи переформулируются друг в друга иногда с особенностями и возникновением всяких интересностей в зависимости от практической постановки, ещё. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
в смысле поворачивать? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Навскидку я бы делал так.
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
mrgloom |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
в смысле да, как в тетрисе.
на этой строчке моя фантазия сломалась. ну по идее надо сортировать(по стороне или площади) взять самые большие и начать их ставить бок о бок, а дыры между ними заполнять маленькими, но опять же это скорее всего не самый оптимальный вариант.+ не уверен, что это будет работать, если у нас в данных большой разброс. |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
mrgloom, задача решается методом перебора всех вариантов.
![]() Примерная модель перебора - вычисляем наибольшее общее кратное сторон исходных прямоугольников. Получился шаг клетки (вообще говоря, в данном случае эффективнее считать по ширине и высоте отдельно). Клеточками этой ширины расчерчиваем плоскость, на которой будем перебирать. Нумеруем X и Y координаты сеточки. Перебор выглядит так. - ставим первый прямоугольник в позицию (a,b) - ставим следующий в свободную позицию. - Когда кончились кирпичи - считаем получившийся прямоугольник (максимальные координаты) Перебор очевидным образом сокращается. -- группируются все одинаковые кирпичи -- каждый успешно завершенный перебор выдает значение площади. Если в процессе перебора получилась бОльшая площадь - перебор сворачивается. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
||||
|
||||
ksnk |
|
||||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Каждый раз, когда вставляется новый кирпич, вычисляется по габаритам площадь получившегося прямоугольника. Если она стала больше - в глубь перебирать смысла больше нет, нужно идти вширь.
Первым брать все кирпичи последовательно. (с точностью по группировки по размерам) Ставить в угол с координатами 0,0 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||||
|
|||||||
_Y_ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Идею объясняю с картинками (но не говорю, что идея будет хорошо работать для любых данных). Хотя, для случая, представленного на картинке, решение и идеально. Номера - порядок сортировки. ![]() -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
||||
|
|||||
Silent |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 1 Всего: 9 |
Это классическая задача упаковки, в зависимости от специфики использования может называться "knapsack problem", "rect packing" "bin packing" "box packing", "BSP", и может применяться для оптимального раскроя материалов, для минимизации площади СБИС, в полиграфии и пр.
Задачу решали здесь, здесь,... Публикации: раз, два, три. |
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
так задача однозначно не решается?
|
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
mrgloom, конечно не решается.
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Silent |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 1 Всего: 9 |
Эта задача однозначно может быть решена. Другое дело что это NP-полная задача, и поиск оптимального решения - крайне долгая задача даже на малых значениях.
Так что люди решают эвристическими алгоритмами, и любое улучшение скорости на пару процентов (даже в теории) - это большой прорыв. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |