|
|
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
_some_Ой! (Тогда остается Монте-Карло) +1 Тоже неплохой метод когда нужно асимтотически оценить что-нибудь и ответ выдать мгновенно в первые-же секунды работы алгоритма. В параллель с работающим NP-сложныйм методом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 16:17 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
_some_Яростный Меч, Ой! (Тогда остается Монте-Карло) Попробуйте монте-карлой сложить два квадрата 100x100 впихнуть в одну коробку 100x200. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 18:32 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
iv_an_ru, Оно, конечно же, не запрещено. Только тогда лучше метод Лас-Вегаса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 20:11 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Прямоугольники строго идут параллельно осям координат. Никаких там под углом и т.д. Блин, неужели так все сложно... Размеры прямоугольников всегда одинаковые. Допустимо касание прямоугольников. хоть в цикле идти со смещением и перебором искать область. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 02:38 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
VolochkovaБлин, неужели так все сложно...А чем вам вариант от iv_an_ru не нравится? Мне этот вариант наиболее симпатичен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 09:09 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Да. Вариант iv_an_ru из бюджетных - наиболее оптимальный. Другие варианты будут скорее всего за деньги. Волочкова, вам всё понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 10:35 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Задача решается алгоритмом из семейства line-sweep. Наброски решения (только в несколько иной формулировке) -- здесь (секция "Area of the union of rectangles"). Вкратце: она элементарно сводится к поиску множества точек прямоугольника (см. первый пост iv_an_ru), не принадлежащих объединению множества других прямоугольников; левые и правые рёбра этих прямоугольников сортируются по возрастанию, после чего некая воображаемая линия "сканирует" их слева на право, между любыми двумя соседними линиями легко строится множество "свободных" точек, не принадлежащих ни одному прямоугольнику. Думаю, это оптимальный алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 11:20 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
junior idiotлевые и правые рёбра этих прямоугольников сортируются по возрастаниюПо возрастанию чего? длины? - так они все одинаковой длины. А вообще это не алгоритм, а поток сознания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 11:25 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
miksoftПо возрастанию чего? длины? - так они все одинаковой длины. А вообще это не алгоритм, а поток сознания. По возрастанию абсциссы, очевидно (написал я, пожалуй, криво, но если б Вы прошли по указанной ссылке, то сразу поняли бы о чём речь). Если Вы не знаете такой техники, то лучше отправляйтесь штудировать педивикию хотя бы %) техника в ряде задач очень полезна, например -- в данной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 11:29 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
junior idiotЗадача решается алгоритмом из семейства line-sweep. Наброски решения (только в несколько иной формулировке) -- здесь (секция "Area of the union of rectangles"). Вкратце: она элементарно сводится к поиску множества точек прямоугольника (см. первый пост iv_an_ru), не принадлежащих объединению множества других прямоугольников; левые и правые рёбра этих прямоугольников сортируются по возрастанию, после чего некая воображаемая линия "сканирует" их слева на право, между любыми двумя соседними линиями легко строится множество "свободных" точек, не принадлежащих ни одному прямоугольнику. Думаю, это оптимальный алгоритм. Алгоритмы сканирования пикселей оптимальны только для сложных или очень-очень многочисленных фигур и --- сюрприз --- растра. У нас 6 очень простых фигур, и нигде не сказано, что у них координаты одновременно небольшие и целочисленные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 11:31 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
iv_an_ruАлгоритмы сканирования пикселей оптимальны только для сложных или очень-очень многочисленных фигур и --- сюрприз --- растра. У нас 6 очень простых фигур, и нигде не сказано, что у них координаты одновременно небольшие и целочисленные. Помилуйте, при чём здесь пиксели? Указанный алгоритм работает с непрерывными координатами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 11:35 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
iv_an_ruнигде не сказано, что у них координаты одновременно небольшие и целочисленные.А для вашего алгоритма это и не требуется. Достаточно ввести понятия "ширина столбца" и "высота строки". И кстати, матрица получится 11х11, а не 13х13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 11:36 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
junior idiotiv_an_ruАлгоритмы сканирования пикселей оптимальны только для сложных или очень-очень многочисленных фигур и --- сюрприз --- растра. У нас 6 очень простых фигур, и нигде не сказано, что у них координаты одновременно небольшие и целочисленные. Помилуйте, при чём здесь пиксели? Указанный алгоритм работает с непрерывными координатами. Разумеется работает. Пока в вашей задаче вы ответ вычисляете, а подбираете вариант. Иначи возникают проблемы с эффективным хранением промежуточных данных. Можно, конечно, скрестить ужа с ежом --- сначала модифицировать исходные прямоугольники "голодной козой", а потом именно таким сканированием искать свободное место. Это будет хорошо работать в т.ч. для фигур сложной формы, а не только для параллельных осям "ящиков". Но это точно не быстрее обегания матрицы 11x11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 11:49 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
iv_an_ruМожно, конечно, скрестить ужа с ежом --- сначала модифицировать исходные прямоугольники "голодной козой", а потом именно таким сканированием искать свободное место. Это будет хорошо работать в т.ч. для фигур сложной формы, а не только для параллельных осям "ящиков". Но это точно не быстрее обегания матрицы 11x11. Вы не поняли алгоритма. Ну неужели так сложно пройти по указанным ссылкам? Для сложных фигур он вообще работать не будет, равно как и в случае поворота прямоугольников на угол, не кратный pi/2. Это не "сканирование" в обычном смысле, скачки между ближайшими вертикальными линиями (будь то левое или правое ребро какого-либо прямоугольника) происходят "мгновенно", за одну итерацию, что логично -- между ними множество "свободных" точек на вертикальной воображаемой линии остаётся неизменным, потому и никакой растр не нужен. Сложность алгоритма при правильном выборе структур данных -- O(N*logN). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 11:58 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
junior idiotВы не поняли алгоритма. Это вы не поняли ещё не поняли свой будущий алгоритма до конца. junior idiotНу неужели так сложно пройти по указанным ссылкам? В этом пока что нет надобности, потому что у меня ещё не развился склероз. junior idiotДля сложных фигур он вообще работать не будет, равно как и в случае поворота прямоугольников на угол, не кратный pi/2. Сканирование как раз для любых многоугольников работать будет, а при извращении --- и для NURBS-ов. Но только если сначала "голодной козой" заменить исходные фигуры на их "запрещённые окрестности", а вставляемый прямоугольник --- на его центр из одной точки. Без этой замены задача очень противная, потому что поиск одной точки --- это одно, а отслеживание всех событий, происходящих в каждой движущейся прямоугольной "тени" каждого свободного в данный момент отрезка --- песнь лебяжья.[/quot] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 12:34 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
iv_an_ru, а вам не кажется нелепой ситуация, в которой вы меня уверяете в том, что я имею ввиду именно алгоритм сканирования, хотя я говорю про совершенно другой алгоритм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 12:49 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
junior idiotiv_an_ru, а вам не кажется нелепой ситуация, в которой вы меня уверяете в том, что я имею ввиду именно алгоритм сканирования, хотя я говорю про совершенно другой алгоритм? Cтранно, ссылку даёте как раз на алгоритм сканирования по возрастающей координате с предварительной сортировкой событий по этой координате, сами пытаетесь высказать то же самое. Если вам кажется, что без "голодной козы" этот метод будет удобен --- попробуйте не абстрактную идею высказать, а продемонстрировать код. Чего проще, казалось бы --- взяли прямоугольники, составили общий сортированный список координат их левых и правых сторон, и бодро пошли циклом прям именно по этому списку, не пытаясь "подглядывать" в исходные данные для X отличных от значения текущего элемента списка. Ну так заранее огорчу --- там полезут вредные случаи, для которых надо будет городить как раз "память" для данных из уже пройденных координат, именно с указанием точного значения X, когда событие происходило. Или запоминать, какой именно номер прямоугольника связан с каким событием, и лазить в "двумерные" данные по ранее пройденным объектам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 14:04 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
iv_an_ruCтранно, ссылку даёте как раз на алгоритм сканирования по возрастающей координате с предварительной сортировкой событий по этой координате, сами пытаетесь высказать то же самое. Ага-ага. Теперь перечитайте свои пассажи про "произвольные фигуры". Про сортировку каких координат вы там писали? %))) iv_an_ruЕсли вам кажется, что без "голодной козы" этот метод будет удобен Не очень понял, чего вы так бегаете с этой козой. Переход от исходных прямоугольников и впихиваемого прямоугольника к новым "обрамлённым" прямоугольникам и впихиваемой точки -- очевиден настолько, что на фоне общего алгоритма совершенно не требует внимания, хотя я всё же указал, что его сделать нужно (см. мой первый же пост в этом топике). Как видно, задача сводится к поиску ГМТ внутри некоего обрамляющего прямоугольника (в общем случае -- плоскости), не принадлежащих ни одному заданному прямоугольнику (то есть, не принадлежащих их объединению, поиск которого -- классическая задачка для sweep line). iv_an_ru попробуйте не абстрактную идею высказать, а продемонстрировать код. Это не "абстрактная идея", а вполне конкретный алгоритм. Достаточно широко известный, чтобы легко гуглиться. Вот, например, одна из первых ссылок в гугле . С той лишь минимальной разницей, что между двумя событиями в данной задаче нас интересует не длина вертикальных отрезков, проходящих через хотя бы один прямоугольник, а множество вертикальных отрезков, не проходящих ни через один прямоугольник, что позволяет использовать точь-в-точь такой же подход. iv_an_ruНу так заранее огорчу --- там полезут вредные случаи, для которых надо будет городить как раз "память" для данных из уже пройденных координат, именно с указанием точного значения X, когда событие происходило. Или запоминать, какой именно номер прямоугольника связан с каким событием, и лазить в "двумерные" данные по ранее пройденным объектам. Пф, ну конечно надо "запоминать" ребро какого прямоугольника проходится линией; и более того -- запоминать какое это именно ребро, левое или правое, чтобы знать, включать или исключать из активного множества прямоугольник, и какой именно. А что в этом ужасного? Вас пугает дополнительная память на индекс прямоугольника и флаг левое/правое в структуре события? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 15:17 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Детишки кромсают общий случай сабжевой задачи одной левой: http://www.spoj.pl/problems/DECORATE/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 16:05 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
junior idiotПереход от исходных прямоугольников и впихиваемого прямоугольника к новым "обрамлённым" прямоугольникам и впихиваемой точки -- очевиден настолько, что на фоне общего алгоритма совершенно не требует внимания Всё, вопрос снят. Раз это сделано, то дальше вопроов нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2010, 16:06 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Хм.... дело ясное что дело темное. Получить матрицу дело не сложное, впрочем чем то напоминает тему, когда в виде нажимаем кнопу ( ярлык на рабочий стол" винда же находит первое свободное место и кидает туда ярлык.. p.s. размеры всех мелких прямоугольников одинаковые... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2010, 03:08 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
(изучил первые 5 ответов... как грится, однако "мдя...") VolochkovaХм.... дело ясное что дело темное. ... Чё, никак? Вот смотри: вначале у нас была одна большая нычка. Бросаем на нее первую паркетину. И она рубит главную нычку на 4 (в общем случае) меньших нычки. Ведем список/массив нычек. Итак, сейчас у нас в массиве уже 4 нычки, а первая забыта/погибла. Бросаем вторую паркетину. И идем с этой паркетиной по текущему массиву нычек. Эта паркетина какие-то нычки из массива нычек ваще не затронет -- эти нычки оставляем в массиве -- а какие-то порубит. Порубленные нычки забываем, а вместо них записываем в массив их осколки-поднычки. Нычки множатся как кролики... После 5-го шага у нас будет массив всех возможных нычек. Идем по этому массиву нычек и смотрим: есть ли в нем нычка, в которую можно целиком поместить 6-ю паркетину? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2010, 08:23 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
rt123(изучил первые 5 ответов... как грится, однако "мдя...") VolochkovaХм.... дело ясное что дело темное. ... Чё, никак? Вот смотри: вначале у нас была одна большая нычка. Бросаем на нее первую паркетину. И она рубит главную нычку на 4 (в общем случае) меньших нычки. Ведем список/массив нычек. Итак, сейчас у нас в массиве уже 4 нычки, а первая забыта/погибла. Бросаем вторую паркетину. И идем с этой паркетиной по текущему массиву нычек. Эта паркетина какие-то нычки из массива нычек ваще не затронет -- эти нычки оставляем в массиве -- а какие-то порубит. Порубленные нычки забываем, а вместо них записываем в массив их осколки-поднычки. Нычки множатся как кролики... После 5-го шага у нас будет массив всех возможных нычек. Идем по этому массиву нычек и смотрим: есть ли в нем нычка, в которую можно целиком поместить 6-ю паркетину? Вот это и напрягает. После 10 нычки из будет уже много... устану делить и выделять.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2010, 09:22 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
rt123, решение O(N^2) было предложено почти сразу, тут больше интересно решить за O(N*logN). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2010, 09:30 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36890172&tid=1343393]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
186ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 202ms |
| total: | 517ms |

| 0 / 0 |
