Russian Qt Forum
Ноябрь 22, 2024, 19:52
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Алгоритмы
>
Оптимальное размещение прямоугольников с доп. условиями
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Оптимальное размещение прямоугольников с доп. условиями (Прочитано 7165 раз)
ibnz
Гость
Оптимальное размещение прямоугольников с доп. условиями
«
:
Август 26, 2013, 13:15 »
Есть список прямоугольников с жестко заданой ординатой и высотой, но произвольными шириной и абсциссой. Надо разместить их без пересечений оптимальным способом (максимизация заполненной площади контейнера) на прямоугольнике контейнере.
Во вложении иллюстрация тривиального размещения, гарантирующего непересечение:
1. список отсортировать по ординате
2. вынимать первый встреченный с ординатой большей конца предыдущего вынутого в новый список-столбец
3. при достижении конца, начать новый столбец с начала
4. повторять до исчерпания списка
5. Разделить ширину контейнера на количество столбцов и всем прямоугольникам установить полученную ширину.
6. разместить столбцы один за другим.
Очевидно, что оно неоптимально. Думаю над алгоритмом лучшего размещения...
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Оптимальное размещение прямоугольников с доп. условиями
«
Ответ #1 :
Август 26, 2013, 13:56 »
Наверное имеется ввиду что ширина тоже задана или по крайней мере "не меньше", иначе смысла нет. Если прямоугольников относительно немного, то перебором. До конца не вижу, пока ясно
Выстраиваем все прямоугольники слева так что они перекрывают друг друга. Имеем ряд интервалов по Y. Для каждого интервала известна макс ширина - сумма ширин покрывающих его пр-ков. Выбираем интервал с макс шириной, дальше перебираем все возможные расстановки входящих в интервал. На каждом шаге повторяем для верхней и нижней половинок.
Записан
ibnz
Гость
Re: Оптимальное размещение прямоугольников с доп. условиями
«
Ответ #2 :
Август 26, 2013, 14:29 »
Да, формально есть некоторая минимальная ширина, ограничивающая экстремальные варианты. Критерии не определены окончательно, это некоторое "разумно оптимальное расположение виджетов" с устремелением к выравниванию площади каждого и максимизации общего заполнения
Цитата: Igors от Август 26, 2013, 13:56
Выбираем интервал с макс шириной, дальше перебираем все возможные расстановки входящих в интервал.
А какой брать локальный критерий лучшей расстановки?
В данный момент мне кажется перспективной идея итеративного "раздувания" площади виджетов до "выравнивания давления" после тривиального размещения. Обдумываю как ее формализовать.
Записан
ibnz
Гость
Re: Оптимальное размещение прямоугольников с доп. условиями
«
Ответ #3 :
Август 26, 2013, 14:48 »
надо получить нечто вроде такого
Записан
Bepec
Гость
Re: Оптимальное размещение прямоугольников с доп. условиями
«
Ответ #4 :
Август 26, 2013, 14:51 »
оффтоп: по-моему получится нечитабельный писец, а не интерфейс. Ну да дело каждого.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Оптимальное размещение прямоугольников с доп. условиями
«
Ответ #5 :
Август 26, 2013, 15:51 »
Цитата: ibnz от Август 26, 2013, 14:29
А какой брать локальный критерий лучшей расстановки?
На первом шаге находим интервал покрываемый N пр-ками. Их ширны известны, сумма дает макс общую ширину, меньше не выйдет. Однако больше - может, поэтому на последующих шагах оптимальный - который дает наименьшую новую общую ширину. Если новая == старой, то остаток можно не перебирать
Записан
ibnz
Гость
Re: Оптимальное размещение прямоугольников с доп. условиями
«
Ответ #6 :
Август 26, 2013, 16:29 »
Цитировать
На первом шаге находим интервал покрываемый N пр-ками. Их ширны известны, сумма дает макс общую ширину, меньше не выйдет. Однако больше - может, поэтому на последующих шагах оптимальный - который дает наименьшую новую общую ширину. Если новая == старой, то остаток можно не перебирать
На примере вложения из 1 поста. Интервал с макс пр-ками 2:00-2:10.
Пытаемся расставить пр-ки 5,6,7,8,9. Ширина каждого 0,2 (1 =ширина контейнера). Как понять какой из 120 вариантов перестановки в дальнейшем даст лучший выигрыш? Без учета того, что встретится далее, я не понимаю как это сделать. а учитывать накладно - сложность растет по факториалу.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Оптимальное размещение прямоугольников с доп. условиями
«
Ответ #7 :
Август 26, 2013, 17:01 »
Цитата: ibnz от Август 26, 2013, 16:29
На примере вложения из 1 поста. Интервал с макс пр-ками 2:00-2:10.
Пытаемся расставить пр-ки 5,6,7,8,9. Ширина каждого 0,2 (1 =ширина контейнера). Как понять какой из 120 вариантов перестановки в дальнейшем даст лучший выигрыш? Без учета того, что встретится далее, я не понимаю как это сделать. а учитывать накладно - сложность растет по факториалу.
Ну чего ж 120 когда 2^5 = 32? Для каждого варианта считаем пр-ки 5,6,7,8,9 расставлеными и с учетом этого занимаемся верхней и нижней половинками. Где ж факториал когда их там уже осталось с гулькин "нос"?
Записан
ibnz
Гость
Re: Оптимальное размещение прямоугольников с доп. условиями
«
Ответ #8 :
Август 27, 2013, 10:57 »
Цитата: Igors от Август 26, 2013, 17:01
Ну чего ж 120 когда 2^5 = 32? Для каждого варианта считаем пр-ки 5,6,7,8,9 расставлеными и с учетом этого занимаемся верхней и нижней половинками. Где ж факториал когда их там уже осталось с гулькин "нос"?
спору нет, 2^5 = 32, но количество перестановок = n!
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...