Поиск:

Ответ в темуСоздание новой темы Создание опроса
> набор прямоугольников вписать в мин прямоугольник 
:(
    Опции темы
mrgloom
Дата 27.6.2012, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



есть набор прямоугольников, его надо соединить так чтобы в итоге получился общий прямоугольник минимальной площади.
исходные прямоугольники нельзя переворачивать.

наверно есть готовые алгоритмы?
PM MAIL   Вверх
nworm
Дата 27.6.2012, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



Всегда считал, что это достаточно мутные задачи.
Но тем не менее
тут говорят нечто другое

Похожие задачи переформулируются друг в друга иногда с особенностями и возникновением всяких интересностей в зависимости от практической постановки, ещё.

PM MAIL WWW   Вверх
Akina
Дата 27.6.2012, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(mrgloom @  27.6.2012,  09:50 Найти цитируемый пост)
исходные прямоугольники нельзя переворачивать.

в смысле поворачивать?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
_Y_
Дата 27.6.2012, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



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


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
mrgloom
Дата 28.6.2012, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



Цитата(Akina @  27.6.2012,  17:29 Найти цитируемый пост)
исходные прямоугольники нельзя переворачивать.

в смысле поворачивать? 


в смысле да, как в тетрисе.

Цитата(_Y_ @  27.6.2012,  21:36 Найти цитируемый пост)
Изогнул бы цепочку посередине, чтобы хвост шел вдоль голтовы, но в противоположном направлении.

на этой строчке моя фантазия сломалась.


ну по идее надо сортировать(по стороне или площади) взять самые большие и начать их ставить бок о бок, а дыры между ними заполнять маленькими, но опять же это скорее всего не самый оптимальный вариант.+ не уверен, что это будет работать, если у нас в данных большой разброс.
PM MAIL   Вверх
ksnk
Дата 28.6.2012, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



mrgloom, задача решается методом перебора всех вариантов.  smile 
Примерная модель перебора - 
вычисляем наибольшее общее кратное сторон исходных прямоугольников. Получился шаг клетки (вообще говоря, в данном случае эффективнее считать по ширине и высоте отдельно). Клеточками этой ширины расчерчиваем плоскость, на которой будем перебирать. Нумеруем X и Y координаты сеточки.

Перебор выглядит так.
- ставим первый прямоугольник в позицию (a,b) 
- ставим следующий в свободную позицию. 
- Когда кончились кирпичи - считаем получившийся прямоугольник (максимальные координаты)

Перебор очевидным образом сокращается.
-- группируются все одинаковые кирпичи
-- каждый успешно завершенный перебор выдает значение площади. Если  в процессе перебора получилась бОльшая площадь - перебор сворачивается.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
mrgloom
Дата 28.6.2012, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



Цитата(ksnk @  28.6.2012,  10:43 Найти цитируемый пост)
задача решается методом перебора всех вариантов. 


это как там называется NP чтоли.



Цитата(ksnk @  28.6.2012,  10:43 Найти цитируемый пост)
- ставим следующий в свободную позицию. 

и какой первый кирпич брать? и в какую позицию? их может быть несколько.



Цитата(ksnk @  28.6.2012,  10:43 Найти цитируемый пост)
-- каждый успешно завершенный перебор выдает значение площади. Если  в процессе перебора получилась бОльшая площадь - перебор сворачивается.

не понял.
PM MAIL   Вверх
ksnk
Дата 28.6.2012, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Цитата(mrgloom @  28.6.2012,  12:18 Найти цитируемый пост)
Цитата

-- каждый успешно завершенный перебор выдает значение площади. Если  в процессе перебора получилась бОльшая площадь - перебор сворачивается.


не понял. 

Каждый раз, когда вставляется новый кирпич, вычисляется по габаритам площадь получившегося прямоугольника. Если она стала больше - в глубь перебирать смысла больше нет, нужно идти вширь.

Цитата(mrgloom @  28.6.2012,  12:18 Найти цитируемый пост)
и какой первый кирпич брать? и в какую позицию? их может быть несколько.

Первым брать все кирпичи последовательно. (с точностью по группировки по размерам) Ставить в угол с координатами 0,0


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
_Y_
Дата 28.6.2012, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Цитата(mrgloom @ 28.6.2012,  10:16)
Цитата(_Y_ @  27.6.2012,  21:36 Найти цитируемый пост)
Изогнул бы цепочку посередине, чтобы хвост шел вдоль голтовы, но в противоположном направлении.

на этой строчке моя фантазия сломалась.

Идею объясняю с картинками (но не говорю, что идея будет хорошо работать для любых данных). Хотя, для случая, представленного на картинке, решение и идеально. Номера - порядок сортировки.
user posted image


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Silent
Дата 29.6.2012, 09:40 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 1
Всего: 9



Это классическая задача упаковки, в зависимости от специфики использования может называться "knapsack problem", "rect packing" "bin packing" "box packing", "BSP", и может применяться для оптимального раскроя материалов, для минимизации площади СБИС, в полиграфии и пр.
Задачу решали здесьздесь,...
Публикации: раздватри
PM MAIL   Вверх
mrgloom
Дата 2.7.2012, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



так задача однозначно не решается?
PM MAIL   Вверх
_Y_
Дата 2.7.2012, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



mrgloom, конечно не решается.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Silent
Дата 3.7.2012, 07:08 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 1
Всего: 9



Эта задача однозначно может быть решена. Другое дело что это NP-полная задача, и поиск оптимального решения - крайне долгая задача даже на малых значениях.
Так что люди решают эвристическими алгоритмами, и любое улучшение скорости на пару процентов (даже в теории) - это большой прорыв.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1068 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.