powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Поиск свободной нычки.
58 сообщений из 58, показаны все 3 страниц
Поиск свободной нычки.
    #36888374
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано прямоугольник (x1,y1,x2,y2) Rect_Big
Есть более мелкий прямоугольник ( заготовка) Rect_x
Известен только его размер. w1, h1.
в произвольном порядке накидали 5 элементов Rect_x в Rect_Big.
Надо положить шестой на свободное место ( не закрывая другие 5 Rect_x) в Rect_Big.
Как вычислить эту свободную нычку? Если ее нет, то не добавлять.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36888582
Фотография aleksandr-pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если взять по простому то задачку можно попробовать решить так:

1 - берем 2 любых из 5 прямоугольников.
2 - берем крайние координаты, скажем если первый выше второго то надо взять левый нижний угол у первого и верхний правый в у второго если разница между координатами X будет больше ширины вписываемого и разница между Y больше высоту вписываемого то ляпай в любо место между двумя прямоугольниками.
3 - и так далее перебираем расстояния между границами прямоугольников, не забываю проверять что бы другие прямоугольники уже не находились в этих границах.
4 - так же необходимо проверять расстояние от этих прямоугольников до границ "окна"
примерно как то так - если посчитать все расстояния можно сделать вывод о том куда ляпнуть свободный прямоугольник
www.aleksandr-pro.ru/images/primerno.gif
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36888589
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volochkova,

стороны прямоугольников всегда параллельны осям координат?
Rect_x может поворачиваться?
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36888594
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volochkova,

множество возможных значений координат дискретно или непрерывно?
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36888597
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volochkovaв произвольном порядке накидали 5 элементов Rect_x в Rect_Big.При этом они могли перекрыться?
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36888698
green_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По-моему, это задача раскроя.
Решается методами линейного программирования.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36888886
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
green_2005По-моему, это задача раскроя.
Решается методами линейного программирования.Можно, конечно, и линейным, но как-то из пушки по воробьям.
Я бы решал "теорией голодной козы", построив геометрическое место точек, где может находиться центр нового прямоугольника. То есть я бы внешний прямоугольник уменьшил на w1 по ширине и h1 по высоте (получил бы (x1+0.5*w1, y1+0.5*h1, x2-0.5*w1, y2-0.5*h1), в него накидал аналогично увеличенных мелких прямоугольников, где внешний прямоугольник оказался не закрыт, там можно разместить центр нового прямоугольника. Если новый можно крутить, то повторить процедуру, поменяв w1 и h1 местами.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36888891
_some_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volochkova,

Предлагаю продолжить методом Монте-Карло:
Так же произвольно, как и первые пять, кидаем шестой прямоугольник. Если он лег удачно (без перекрытий) - так и оставляем. Если нет, повторяем еще раз до победного конца, но не более заранее оговоренного числа раз.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36888916
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_some_Предлагаю продолжить методом Монте-Карло:
Так же произвольно, как и первые пять, кидаем шестой прямоугольник. Если он лег удачно (без перекрытий) - так и оставляем. Если нет, повторяем еще раз до победного конца, но не более заранее оговоренного числа раз.Предлагаю так суда грузить. Кидаем трактор в трюм. Если он лег удачно (без перекрытий) - так и оставляем. Если нет, повторяем еще раз до победного конца, но не более заранее оговоренного числа раз.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36888952
_some_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ru Предлагаю так суда грузить. Кидаем трактор в трюм. Если он лег удачно (без перекрытий) - так и оставляем. Если нет, повторяем еще раз до победного конца, но не более заранее оговоренного числа раз.

А оно разве грузится как-то по-другому? Я недавно мебель перевозил. Впечатления еще свежие.

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

Если Монте-Карло не подходит, то можно эвристики предложить.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889003
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_some_iv_an_ru Предлагаю так суда грузить. Кидаем трактор в трюм. Если он лег удачно (без перекрытий) - так и оставляем. Если нет, повторяем еще раз до победного конца, но не более заранее оговоренного числа раз.А оно разве грузится как-то по-другому?Академик Крылов в своих мемуарах подробно описывает загрузку некоторых сухогрузов как своё отдельное серьёзное достижение. А вообще почти всегода стивидором рулит дяденька с профильным в/о и хорошим стажем.[/quot]
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889005
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку можно так (насчет оптимальности большие сомнения):

1) Создаем некую древовидную структуру-индекс, для быстрого нахождения прямоугольника Rect_x по точке внутри него (как именно - надо уточнять). Т.е. имеется точка, надо выяснить, в каком она прямоугольнике. Хотя если количество их так и останется 5, то этот пункт необязателен.

2) Устанавливаем X=x1, Y = y1.
3) Пока Х <= x2-w1:
4) Пока Y <= y2-h1:
Проверяем возможность разместить прямоугольник от точки (X, Y) (а именно попадание красных точек в имеющиеся прямоугольники). Если получилось - усё, приехали. Иначе запоминаем наименьший правый край из помешавших прямоугольников (R), их наибольший bottom (B) и делаем Y = B, возврат к п. 4.
5) Из всех R берем наименьший (r), делаем X = r, возврат к п. 3.

Тут, конечно, неизбежны повторные проверки, но гарантируется конечное число ходов.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889020
_some_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас пошел разговор в стиле: "А если вы бочку друг на друга надумаете катить, то это уже контейнерные перевозки, это вам в "Трансагенство"..."

Я только руководил разгрузкой одинаковых вагонов с одинаковыми грузами (бумага). Так вот, все вагоны были загружены как-то по особому. Число единиц груза было всегда разным.

В журнале "Текстильная промышленность" когда-то была рассмотрена оптимизация распроя полотна на прямоугольные заготовки. Там очень подробно эвристики были рассмотрены.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889039
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_some_,

Раскрой одно время был вообще модной темой, (а распил ещё моднее)
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889043
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volochkova...
При каждом добавлении нового нужно доказывать формальную возможность положить шестой. Тоесть для данного случая к примеру, уже после 1 швыряния куска прямоугольника шестой положить никак невозможно.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889066
_some_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ru,

Главный вывод из той статьи: Задача раскроя не имеет внятного аналитического решения. Поэтому и возились с эвристиками.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889085
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечНавскидку можно так (насчет оптимальности большие сомнения):
У меня тоже. Можно быстрее.
1. Мысленно растягиваем отрезки-стороны маленьких прямоугольников так, чтобы они упёрлись в края экрана. То есть каждый прямоугольник превращается в эдакую '#'.
2. Теперь весь большой прямоугольник разграфлён на клеточки разного размера. Если координаты нигде не повторяются, то клеточек будет 13*13=169, если повторяются то меньше. Вполне мелкая матрица.
3. Делаем целочисленную матрицу такого размера, заливаем нулями, потом "рисуем" в ней уже имеющиеся прямоугольники, забивая целое число клеточек номером прямоугольника.
4. Теперь не проблема пробежаться по матрице, разыскивая прямоугольник нулей подходящих габаритов.

Этот алгоритм юзался до Win2000 включительно в оконной системе, потом наши Нские люди предложили более быстрый, который я тут повешусь расписывать.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889091
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_some_Главный вывод из той статьи: Задача раскроя не имеет внятного аналитического решения. Поэтому и возились с эвристиками.Ясен пень, раз одномерные задачи о ранцах и то сплошь NP-противные, двумерный аналог тем более будет NP.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889104
_some_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я предлагаю следующий вариант:
(Предполагается, что все малые прямоугольники выкладываются параллельно сторонам большого и направление больших и малых сторон у всех совпадает)

Берем очередной уже выложенный прямоугольник. Пытаемся выложить новый прямоугольник, размещая его в притык к стороне и к углу. Всего 8 возможных вариантов.
Если есть перекрытие с другими прямоугольниками - переходим к следующему варианту. Иначе - удалось разместить.

Перебираем все исходные пять прямоугольников. Если разместить не удалось - нычки нет.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889110
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, нейросеть решит эту задачу быстре чем NP но придётся пожертвовать аналитической точностью.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889120
_some_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_some_,

Прямоугольники пытаемся размещать как красные на рисунке.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889122
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_some_Пытаемся выложить новый прямоугольник, размещая его в притык к стороне и к углу. Всего 8 возможных вариантов.
Не совсем понял, но мне кажется, это отклонение от ТЗ.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889233
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_some_,

Ваш вариант не сможет впихнуть 6-й (зеленый) прямоугольник
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889376
_some_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,

Ой!
(Тогда остается Монте-Карло)
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889417
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
щас прикинул по своему варианту - самый худший случай примерно N^2 поисков прямоугольников по точке. Не так плохо (по крайней мере, не NP).
+ память под структуру для быстрого поиска, но это копейки для современных компов.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36889843
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_some_Ой!
(Тогда остается Монте-Карло)
+1 Тоже неплохой метод когда нужно асимтотически оценить что-нибудь и ответ выдать мгновенно в первые-же секунды работы алгоритма. В параллель с работающим NP-сложныйм методом.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36890172
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_some_Яростный Меч,

Ой!
(Тогда остается Монте-Карло)

Попробуйте монте-карлой сложить два квадрата 100x100 впихнуть в одну коробку 100x200.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36890281
_some_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ru,

Оно, конечно же, не запрещено. Только тогда лучше метод Лас-Вегаса.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36891785
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прямоугольники строго идут параллельно осям координат.
Никаких там под углом и т.д.

Блин, неужели так все сложно...
Размеры прямоугольников всегда одинаковые.
Допустимо касание прямоугольников.

хоть в цикле идти со смещением и перебором искать область.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36891876
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VolochkovaБлин, неужели так все сложно...А чем вам вариант от iv_an_ru не нравится?
Мне этот вариант наиболее симпатичен.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892010
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Вариант iv_an_ru из бюджетных - наиболее оптимальный. Другие варианты будут скорее всего за деньги.

Волочкова, вам всё понятно?
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892124
junior  idiot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача решается алгоритмом из семейства line-sweep.
Наброски решения (только в несколько иной формулировке) -- здесь (секция "Area of the union of rectangles").
Вкратце: она элементарно сводится к поиску множества точек прямоугольника (см. первый пост iv_an_ru), не принадлежащих объединению множества других прямоугольников; левые и правые рёбра этих прямоугольников сортируются по возрастанию, после чего некая воображаемая линия "сканирует" их слева на право, между любыми двумя соседними линиями легко строится множество "свободных" точек, не принадлежащих ни одному прямоугольнику.
Думаю, это оптимальный алгоритм.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892138
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
junior idiotлевые и правые рёбра этих прямоугольников сортируются по возрастаниюПо возрастанию чего? длины? - так они все одинаковой длины.
А вообще это не алгоритм, а поток сознания.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892148
junior  idiot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftПо возрастанию чего? длины? - так они все одинаковой длины.
А вообще это не алгоритм, а поток сознания.
По возрастанию абсциссы, очевидно (написал я, пожалуй, криво, но если б Вы прошли по указанной ссылке, то сразу поняли бы о чём речь).
Если Вы не знаете такой техники, то лучше отправляйтесь штудировать педивикию хотя бы %) техника в ряде задач очень полезна, например -- в данной.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892151
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
junior idiotЗадача решается алгоритмом из семейства line-sweep.
Наброски решения (только в несколько иной формулировке) -- здесь (секция "Area of the union of rectangles").
Вкратце: она элементарно сводится к поиску множества точек прямоугольника (см. первый пост iv_an_ru), не принадлежащих объединению множества других прямоугольников; левые и правые рёбра этих прямоугольников сортируются по возрастанию, после чего некая воображаемая линия "сканирует" их слева на право, между любыми двумя соседними линиями легко строится множество "свободных" точек, не принадлежащих ни одному прямоугольнику.
Думаю, это оптимальный алгоритм.
Алгоритмы сканирования пикселей оптимальны только для сложных или очень-очень многочисленных фигур и --- сюрприз --- растра. У нас 6 очень простых фигур, и нигде не сказано, что у них координаты одновременно небольшие и целочисленные.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892163
junior  idiot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ruАлгоритмы сканирования пикселей оптимальны только для сложных или очень-очень многочисленных фигур и --- сюрприз --- растра. У нас 6 очень простых фигур, и нигде не сказано, что у них координаты одновременно небольшие и целочисленные.
Помилуйте, при чём здесь пиксели? Указанный алгоритм работает с непрерывными координатами.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892172
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruнигде не сказано, что у них координаты одновременно небольшие и целочисленные.А для вашего алгоритма это и не требуется. Достаточно ввести понятия "ширина столбца" и "высота строки".
И кстати, матрица получится 11х11, а не 13х13.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892202
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
junior idiotiv_an_ruАлгоритмы сканирования пикселей оптимальны только для сложных или очень-очень многочисленных фигур и --- сюрприз --- растра. У нас 6 очень простых фигур, и нигде не сказано, что у них координаты одновременно небольшие и целочисленные.
Помилуйте, при чём здесь пиксели? Указанный алгоритм работает с непрерывными координатами.
Разумеется работает. Пока в вашей задаче вы ответ вычисляете, а подбираете вариант. Иначи возникают проблемы с эффективным хранением промежуточных данных.

Можно, конечно, скрестить ужа с ежом --- сначала модифицировать исходные прямоугольники "голодной козой", а потом именно таким сканированием искать свободное место. Это будет хорошо работать в т.ч. для фигур сложной формы, а не только для параллельных осям "ящиков". Но это точно не быстрее обегания матрицы 11x11.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892230
junior  idiot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ruМожно, конечно, скрестить ужа с ежом --- сначала модифицировать исходные прямоугольники "голодной козой", а потом именно таким сканированием искать свободное место. Это будет хорошо работать в т.ч. для фигур сложной формы, а не только для параллельных осям "ящиков". Но это точно не быстрее обегания матрицы 11x11.
Вы не поняли алгоритма. Ну неужели так сложно пройти по указанным ссылкам?
Для сложных фигур он вообще работать не будет, равно как и в случае поворота прямоугольников на угол, не кратный pi/2. Это не "сканирование" в обычном смысле, скачки между ближайшими вертикальными линиями (будь то левое или правое ребро какого-либо прямоугольника) происходят "мгновенно", за одну итерацию, что логично -- между ними множество "свободных" точек на вертикальной воображаемой линии остаётся неизменным, потому и никакой растр не нужен.
Сложность алгоритма при правильном выборе структур данных -- O(N*logN).
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892365
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
junior idiotВы не поняли алгоритма.
Это вы не поняли ещё не поняли свой будущий алгоритма до конца.
junior idiotНу неужели так сложно пройти по указанным ссылкам?
В этом пока что нет надобности, потому что у меня ещё не развился склероз.
junior idiotДля сложных фигур он вообще работать не будет, равно как и в случае поворота прямоугольников на угол, не кратный pi/2.
Сканирование как раз для любых многоугольников работать будет, а при извращении --- и для NURBS-ов. Но только если сначала "голодной козой" заменить исходные фигуры на их "запрещённые окрестности", а вставляемый прямоугольник --- на его центр из одной точки. Без этой замены задача очень противная, потому что поиск одной точки --- это одно, а отслеживание всех событий, происходящих в каждой движущейся прямоугольной "тени" каждого свободного в данный момент отрезка --- песнь лебяжья.[/quot]
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892407
junior  idiot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ru, а вам не кажется нелепой ситуация, в которой вы меня уверяете в том, что я имею ввиду именно алгоритм сканирования, хотя я говорю про совершенно другой алгоритм?
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892608
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
junior idiotiv_an_ru, а вам не кажется нелепой ситуация, в которой вы меня уверяете в том, что я имею ввиду именно алгоритм сканирования, хотя я говорю про совершенно другой алгоритм?
Cтранно, ссылку даёте как раз на алгоритм сканирования по возрастающей координате с предварительной сортировкой событий по этой координате, сами пытаетесь высказать то же самое.
Если вам кажется, что без "голодной козы" этот метод будет удобен --- попробуйте не абстрактную идею высказать, а продемонстрировать код.
Чего проще, казалось бы --- взяли прямоугольники, составили общий сортированный список координат их левых и правых сторон, и бодро пошли циклом прям именно по этому списку, не пытаясь "подглядывать" в исходные данные для X отличных от значения текущего элемента списка.
Ну так заранее огорчу --- там полезут вредные случаи, для которых надо будет городить как раз "память" для данных из уже пройденных координат, именно с указанием точного значения X, когда событие происходило. Или запоминать, какой именно номер прямоугольника связан с каким событием, и лазить в "двумерные" данные по ранее пройденным объектам.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892817
junior  idiot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ruCтранно, ссылку даёте как раз на алгоритм сканирования по возрастающей координате с предварительной сортировкой событий по этой координате, сами пытаетесь высказать то же самое.
Ага-ага. Теперь перечитайте свои пассажи про "произвольные фигуры". Про сортировку каких координат вы там писали? %)))

iv_an_ruЕсли вам кажется, что без "голодной козы" этот метод будет удобен
Не очень понял, чего вы так бегаете с этой козой. Переход от исходных прямоугольников и впихиваемого прямоугольника к новым "обрамлённым" прямоугольникам и впихиваемой точки -- очевиден настолько, что на фоне общего алгоритма совершенно не требует внимания, хотя я всё же указал, что его сделать нужно (см. мой первый же пост в этом топике).

Как видно, задача сводится к поиску ГМТ внутри некоего обрамляющего прямоугольника (в общем случае -- плоскости), не принадлежащих ни одному заданному прямоугольнику (то есть, не принадлежащих их объединению, поиск которого -- классическая задачка для sweep line).

iv_an_ru попробуйте не абстрактную идею высказать, а продемонстрировать код.
Это не "абстрактная идея", а вполне конкретный алгоритм. Достаточно широко известный, чтобы легко гуглиться. Вот, например, одна из первых ссылок в гугле . С той лишь минимальной разницей, что между двумя событиями в данной задаче нас интересует не длина вертикальных отрезков, проходящих через хотя бы один прямоугольник, а множество вертикальных отрезков, не проходящих ни через один прямоугольник, что позволяет использовать точь-в-точь такой же подход.

iv_an_ruНу так заранее огорчу --- там полезут вредные случаи, для которых надо будет городить как раз "память" для данных из уже пройденных координат, именно с указанием точного значения X, когда событие происходило. Или запоминать, какой именно номер прямоугольника связан с каким событием, и лазить в "двумерные" данные по ранее пройденным объектам.
Пф, ну конечно надо "запоминать" ребро какого прямоугольника проходится линией; и более того -- запоминать какое это именно ребро, левое или правое, чтобы знать, включать или исключать из активного множества прямоугольник, и какой именно. А что в этом ужасного? Вас пугает дополнительная память на индекс прямоугольника и флаг левое/правое в структуре события?
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892920
rt123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Детишки кромсают общий случай сабжевой задачи одной левой: http://www.spoj.pl/problems/DECORATE/
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36892922
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
junior idiotПереход от исходных прямоугольников и впихиваемого прямоугольника к новым "обрамлённым" прямоугольникам и впихиваемой точки -- очевиден настолько, что на фоне общего алгоритма совершенно не требует внимания
Всё, вопрос снят. Раз это сделано, то дальше вопроов нет.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36893784
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм.... дело ясное что дело темное.
Получить матрицу дело не сложное, впрочем чем то напоминает тему, когда в виде нажимаем кнопу ( ярлык на рабочий стол" винда же находит первое свободное место и кидает туда ярлык..

p.s. размеры всех мелких прямоугольников одинаковые...
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36896141
rt123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(изучил первые 5 ответов... как грится, однако "мдя...")

VolochkovaХм.... дело ясное что дело темное. ...

Чё, никак? Вот смотри:

вначале у нас была одна большая нычка.
Бросаем на нее первую паркетину. И она рубит главную нычку на 4 (в общем случае) меньших нычки.
Ведем список/массив нычек.
Итак, сейчас у нас в массиве уже 4 нычки, а первая забыта/погибла.
Бросаем вторую паркетину. И идем с этой паркетиной по текущему массиву нычек.
Эта паркетина какие-то нычки из массива нычек ваще не затронет -- эти нычки оставляем в массиве --
а какие-то порубит. Порубленные нычки забываем, а вместо них записываем в массив их осколки-поднычки.
Нычки множатся как кролики...

После 5-го шага у нас будет массив всех возможных нычек. Идем по этому массиву нычек и смотрим:
есть ли в нем нычка, в которую можно целиком поместить 6-ю паркетину?
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36896215
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rt123(изучил первые 5 ответов... как грится, однако "мдя...")

VolochkovaХм.... дело ясное что дело темное. ...

Чё, никак? Вот смотри:

вначале у нас была одна большая нычка.
Бросаем на нее первую паркетину. И она рубит главную нычку на 4 (в общем случае) меньших нычки.
Ведем список/массив нычек.
Итак, сейчас у нас в массиве уже 4 нычки, а первая забыта/погибла.
Бросаем вторую паркетину. И идем с этой паркетиной по текущему массиву нычек.
Эта паркетина какие-то нычки из массива нычек ваще не затронет -- эти нычки оставляем в массиве --
а какие-то порубит. Порубленные нычки забываем, а вместо них записываем в массив их осколки-поднычки.
Нычки множатся как кролики...

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

Вот это и напрягает. После 10 нычки из будет уже много... устану делить и выделять..
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36896232
junior  idiot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rt123, решение O(N^2) было предложено почти сразу, тут больше интересно решить за O(N*logN).
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36896329
rt123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> После 10 нычки из будет уже много... устану делить и выделять..

Я понял буквально, что будет только 5 штук
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36896337
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rt123> После 10 нычки из будет уже много... устану делить и выделять..

Я понял буквально, что будет только 5 штук5 штук было условно в первом посте и интереса не представляют (любой алгоритм отработает мгновенно, кроме случайного при условии совсем плотного размещения). Обсуждается N.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36896716
rt123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте в терминах задачи на моей ссылке.

Есть стена W*H. На ней висят N картин разных размеров wi*hi
Надо попытаться найти место для (N+1)-й картины, размером A*B.
Вращать картину на 90гр. нельзя.

Я бы делал так (позже попробую накодить):

1.
Сортирую все картины по X.

2.
В цикле по всем картинам, для текущей картины i иду по картинам, висящим правее ее,
пока не встречу первую картину j с Х ее левой стороны такую, что X_left[j] - X_right[i] >= A
т.е. по Х повесить новую картину можно.

3.
Теперь осталось проверить: можно ли повесить новую картину (А*В) по Y ?
Скажем, мы проверяем картины №5 и №11. Сортируем картины №№6,7,8,9,10 по Y.
И смотрим: влазит ли новая картина по Y своей высотой В среди этих 5 промежуточных картин?
(есно, это элементарный одномерный случай)

Если влазит - место для новой картины найдено. Full Stop. Если нет:
бросаем картину №5 и идем дальше по нашему циклу и проверяем картину №6 и т.д.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36896748
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я отстал от обуждения. А разве картины - это удачная аналогия к постановке? Ведь картины обычно вешают без "перекрытий". А у ТС была возможность кидать прямоугольники внахлёст.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36896942
rt123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> А у ТС была возможность кидать прямоугольники внахлёст.

Хм... разве? Правда, я основном пейсатель :)
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36896950
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА разве картины - это удачная аналогия к постановке? Ведь картины обычно вешают без "перекрытий". А у ТС была возможность кидать прямоугольники внахлёст.Это не критично. Два прямоугольника внахлест = три прямоугольника рядом. Конечно, если прямоугольники могут быть разного размера...
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36897098
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разница, думаю будет в статистике индекса по точкам. В режиме нахлёста мы можем получить эффект поглощения одник прямоугольников другими. Эдакая само-оптимизация. Для "картинной галлереи", наверное будет по другому.
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36897850
rt123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VolochkovaПрямоугольники строго идут параллельно осям координат.
Никаких там под углом и т.д.

Блин, неужели так все сложно...
Размеры прямоугольников всегда одинаковые.
Допустимо касание прямоугольников.

хоть в цикле идти со смещением и перебором искать область.
не, mayton, нахлесты, видимо, все-таки запрещены
...
Рейтинг: 0 / 0
Поиск свободной нычки.
    #36898376
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rt123Давайте в терминах задачи на моей ссылке.

Есть стена W*H. На ней висят N картин разных размеров wi*hi
Надо попытаться найти место для (N+1)-й картины, размером A*B.
Вращать картину на 90гр. нельзя.

Я бы делал так (позже попробую накодить):

1.
Сортирую все картины по X.

2.
В цикле по всем картинам, для текущей картины i иду по картинам, висящим правее ее,
пока не встречу первую картину j с Х ее левой стороны такую, что X_left[j] - X_right[i] >= A
т.е. по Х повесить новую картину можно.

3.
Теперь осталось проверить: можно ли повесить новую картину (А*В) по Y ?
Скажем, мы проверяем картины №5 и №11. Сортируем картины №№6,7,8,9,10 по Y.
И смотрим: влазит ли новая картина по Y своей высотой В среди этих 5 промежуточных картин?
(есно, это элементарный одномерный случай)

Если влазит - место для новой картины найдено. Full Stop. Если нет:
бросаем картину №5 и идем дальше по нашему циклу и проверяем картину №6 и т.д.

(N+1)-ая тех же размеров - wi*hi.

Теоретически могут и в нахлест, но пока берем что они только касаются. И перекрытий нельзя.
У меня есть пока только одна идея.. стену делим на сектора (wi*hi) и смотрим входит ли в этот сектор другая "картина"? Если нет то кидаем картину иначе к следующему сектору.
...
Рейтинг: 0 / 0
58 сообщений из 58, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Поиск свободной нычки.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]