IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> Замостить страницу, нужен алгоритм
izrukvruki
сообщение 15 Aug 2008, 14:52
Сообщение #1

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




Задача такая (очень мне актуальная):



А=2 см.
Есть страница, размер 12А на 18А (24 на 36 см), разбитая на ячейки размером 2А на А (4 см на 2 см) - обозначена серым пунктиром

Есть массив модулей (прямоугольников) размера кратного 2А. Например: два черных, голубой, малиновый, красный, зеленый, оранжевый...

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

Например оранжевый модуль можно разместить как он сейчас расположен, но лучше его впихнуть в место обозначенное стрелочкой...
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 15 Aug 2008, 16:06
Сообщение #2

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




1. на рисунке совсем не оптимальный способ.
2. модули можно поворачивать?
3. я так понял это для газеты?
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 15 Aug 2008, 16:24 (Сообщение отредактировал izrukvruki - 15 Aug 2008, 16:25)
Сообщение #3

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




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

У меня есть такое соображение:
страница это массив из ячеек a(i,j). Если ячейка = 0 то ячейка свободна, если 1 то занята. Берем первый модуль и идем по массиву, в поисках свободной ячейки, если нашли, то проверяем чтоб необходимые для модуля ячейки (вправо и внизу) были тоже свободны, если таких ячеек не нашлось переходим на вторую страницу и повторяем операцию, до тех пор пока не разместим модуль. Далее берем второй модуль и возвращаемся на первую страницу и запускаем алгоритм.

Неоптимальность возникает из-за того что берем модули последовательно. Наверное есть ситуации, когда другая очередность взятия модулей даст более рациональную замостку страницу... но повторяю, что оптимальность не требуется...
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 15 Aug 2008, 18:00
Сообщение #4

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




вот жадный алгоритм (он не всегда оптимален)
1. ищем наибольший (в ширину) модуль среди неиспользованных
2. если таких несколько, выбираем наибольший по высоте
3. пихаем его на страницу в верхний левый угол
4. находим первую неиспользованную ячейку (просмотр слева направо, сверху вниз)
5. если достигли конца страницы, переходим на новую и идем к п.1
6. ищем размеры свободного участка (вниз и вправо)
7. ищем наиболее подходящий по размеру кусок (сначала в ширину, потом в высоту)
8. если куски закончились, идем к п.10
9. если не нашли отмечаем ячейку негодной, идем к п.4
10. все куски расставлены
Go to the top of the pageAdd Nick
 
+Quote Post
Darth_Beleg
сообщение 31 Aug 2008, 21:17
Сообщение #5

Undead elven necromancer
Сообщений: 195
Спасибо сказали: 15 раз




А какой критерий оптимизации? Максимальная плотность упаковки?


--------------------
Jesus saves... and takes half damage!
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 03 Sep 2008, 08:51
Сообщение #6

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




Критерий:
Чтоб площадь пустот (между модулями) был минимальный
Go to the top of the pageAdd Nick
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 14 August 2025 - 23:20
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика