|
|
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
Помогите с задачкой. даны прямоугольники со сторонами параллельными осям координат. требуется найти прямоугольник максимальной площадью который бы покрывал исходные прямоугольники. пустых мест не должно быть. прямоугольники можно разворачивать на 90 градусов и прямоугольники могут перекрываться. нужно найти примерный алгоритм. заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2007, 00:49 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
Slonyaraданы прямоугольники со сторонами параллельными осям координат. Это понятно. Slonyaraтребуется найти прямоугольник максимальной площадью который бы покрывал исходные Максимальной? Может, минимальной? Slonyaraпустых мест не должно быть. Пожалуйста, сформулируйте эту фразу как-нибудь попонятнее. Slonyaraпрямоугольники можно разворачивать на 90 градусов Как именно их можно разворачивать? Вокруг центра? Вокруг любого угла? Еще как-нибудь? Slonyaraзаранее спасибо. В общем, сформулируйте получше. Хотя бы аккуратно скопируйте из той книжки или тетрадки, откуда Вы ее взяли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2007, 01:08 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
Slonyaraданы прямоугольники со сторонами параллельными осям координат. требуется найти прямоугольник максимальной площадью который бы покрывал исходные прямоугольники. пустых мест не должно быть. прямоугольники можно разворачивать на 90 градусов и прямоугольники могут перекрываться. нужно найти примерный алгоритм. заранее спасибо. 1) В постановке есть противоречия. Если пустых мест не должно быть, то задача должна накладывать ограничения на кратность длин сторон прямоугольников {A}. В противном случае, можно сразу констатировать ОТСУТСТВИЕ РЕШЕНИЯ ДЛЯ ОБЩЕГО СЛУЧАЯ. 2) Читаем далее - и еще больше удивляемся. "...прямоугольники могут перекыватся...". Это как? Есть ли критерий? Или можно перекрыть как угодно. В таком случае я беру самый крупный прямоугольник A1, последовательно укладываю в него все остальные A2...An (не нарушая условий) и объявляю A1 искомым прямоугольником B. В данном случае РЕШЕНИЕ ТРИВИАЛЬНО! 3) Ну и, конечно-же как правильно подметил коллега, следует искать не максимальный а минимальный прямоугольник, потому-как поиск маскимального лишён смысла. Вообще складывается впечатление, что автор озвучил задачу "своими словами", потеряв в процессе смысл оригинально постановки. А посему... я вопрошая - а хде собсно исходная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2007, 12:01 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
окей, попробую еще раз. условия задачи на английском и записывал я условия в начале семестра. смысл такой. из множества прямоугольников разныз широт и высот нужно собрать один причем ограничения по ширине и высоте таковы: 1/2<=b/a<=2 (где а и b высота и ширина соотв.) исходные прямоугольники можно разворачивать, поворачивать вокруг чего угодно, т.е ставить на "попа" или ложить. ограничения на перекрытия есть, но я точно не помню какие. скорее всего не больше одного слоя. т.е. чем меньше перекрытий тем лучше. надеюсь пролил хоть немного света.... П.З. неужели за время учебы мой русский настолько испортился что даже условия задачи объяснить не могу :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2007, 13:53 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
OK. Если я правильно понял, условия таковы: даны N прямоугольников, нужно разместить их на плоскости так, чтобы они без пропусков накрыли прямоугольник максимальной площади, причем с отношением сторон в указанных пределах. Любопытная задачка, неочевидная и с известными сходу не ассоциируется. Вообще по первому взгляду возникает ощущение, что гарантированно решается только перебором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2007, 14:19 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
нужен только примерный (aproximate) алгоритм. есть какние-нить идеи? уже довольно долго бьюс над этой задачкой и ничего путного в голову не приходит. думал вначале отсортировать прямоугольники по убывающей и потом один за одним добавлять в одну линю выравнивая по верхней точке первого прямоугольника предварительно развернув те, у которых высота больше ширины. затем начиная с конца по одному добавлять их в следущую строку и так далее. пока на достигну примерно нужного отношения сторон. и в конце заполню пустые промежутки путем сдвигания одной из сторон. но думаю должно быть более элегантное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2007, 14:45 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
Slonyaraно думаю должно быть более элегантное решение. Думаю, верное решение пригодилось бы гораздо больше, нежели элегантное :) А что касается верного.... на свежую голову я вижу доказательство того, что эта задача np-полна. Так что если Вам удастся найти решение со сложностью меньше O(n!), прославите нашу страну в веках :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 10:24 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
Задачка мне очень напоминает покрытие пола линолеумом из кусочков. Я бы предложил следующий подход: 1. Выделить множество крупных прямоугольников {A big} (критерий выборки - нечёткий. Это может быть либо площадь, либо минимальная сторона). Выложить из них периметр прямоугольника B. Здесь задача еще решается конечным количеством шагов и можно применить строгие проверки на отсутствие дырок в периметре. 2. Оставшееся пространство (в середине комнаты), можно заполнить случайным образом из оставшихся прямоугольников {A small}, руководтсвуясь нечёткими критериями. (Наложить сетку, использовать какие - нибудь ГА, для выбора координат и ориентации и т.п.) Здесь вариантов реализации будет масса и все они - одинаково правильны. 3. Если {A small} не хватит, то можно вернутся на шаг 1 и уменьшить периметр B (скажем на 5%) и повторить шаг 2, до тех пор, пока сетка не будет содержать дырок. P.S. Сетка необходима для "квантизации" площади и упрощения процесса поиска дырок. В принципе, можно обойтись и без неё, но тогда методы поска дырок во времени вырастают экспоненциально. Привожу картинку для (1) шага алгоритма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 10:54 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
maytonЗадачка мне очень напоминает покрытие пола линолеумом из кусочков. Не совсем. maytonЯ бы предложил следующий подход: Не думаю, что эта эвристика даст хорошие результаты. По разным причинам, из которых первая же - попробуйте придумать критерий выбора, рассчитываемый за полиномиальное время, такой, что: 1. Из выбранных прямоугольников таки можно "выложить периметр", причем замкнутый и с минимальными непроизводительными расходами. 2. Площадь "внутренней дырки" при этом оказывается сравнимой с площадью оставшихся "маленьких прямоугольников". Если присмотритесь, эта задачка подозрительно напоминает задачку о делении камней на две кучки :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 11:04 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
softwarerНе думаю, что эта эвристика даст хорошие результаты. По разным причинам, из которых первая же - попробуйте придумать критерий выбора, рассчитываемый за полиномиальное время, такой, что: 1. Из выбранных прямоугольников таки можно "выложить периметр", причем замкнутый и с минимальными непроизводительными расходами. 2. Площадь "внутренней дырки" при этом оказывается сравнимой с площадью оставшихся "маленьких прямоугольников". Я понял вашу мысль. Вас интересует принципиальная возможность заполнения дырки в этом бублике. Думаю, что этот вопрос решается введением итераций в предложный мной алгоритм с учетом нехватки "сеточного" пространства для оставшихся {A small}. По поводу периметра. С учетом отсутствия явных ограничений на перекрытие, я утверждаю, что выложить периметр можно ВСЕГДА с количеством прямоугольников, начиная от четырёх (как я привёл на рисунке). Другое дело, насколько близко мы прибизимся к рекорду площади минимального прямоугольника B. Кстати, предлагаю рассмотреть максимально возможную площадь Smax=Sum {Ai}, и площадь прямоугольника B равную Sb. Сравнение этих двух площадей будет хорошим критерием близости к наилучшему (гипотетическому решению). В алгоритм-же следует ввести некий критерий sEpsilon. Код: plaintext 1. 2. 3. Кстати, можно придумать еще одно утвердение для шагов алгоритма. Код: plaintext 1. 2. Если вдруг на (1) шаге мы получили Sb > Smax то изначально очевидно, что дырка в нашем бублике не заполнится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 11:40 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
maytonЯ понял вашу мысль. Вас интересует принципиальная возможность заполнения дырки в этом бублике. Не только. Меня интересует еще и отсутствие варианта "кучу маленьких прямоугольников заведомо будет некуда класть". maytonС учетом отсутствия явных ограничений на перекрытие, я утверждаю, что выложить периметр можно ВСЕГДА Безусловно. В том, что этот алгоритм даст некий ответ, я не сомневаюсь. Я сомневаюсь в том, что он сможет сочетать более-менее хороший ответ с разумным временем счета. maytonКстати, предлагаю рассмотреть максимально возможную площадь Smax=Sum {Ai}, и площадь прямоугольника B равную Sb. Сравнение этих двух площадей будет хорошим критерием близости к наилучшему (гипотетическому решению). Оно-то конечно, вот только ответа на заданные мной вопросы никак не дает. P.S. Я не то чтобы требую от Вас чего-то... просто задачка действительно нетривиальная, с наскока не раскусишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 12:03 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
mayton А по моему, надо выбрать нулевую точку и относительно нее наращивать вправо и вниз (в любую четверть например) * -------> | | | \/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 12:28 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
softwarerНе только. Меня интересует еще и отсутствие варианта "кучу маленьких прямоугольников заведомо будет некуда класть". Я тоже думал об этом. Сейчас появилась мысль о принципиальной решабельности задачи в некоторых условиях. Мне удалось создать набор прямоугольником для которого не удаётся найти максимальный вложенный прямоугольник B без дырок. Это необходимо ввести в дополнительное условие задачи. Возможно, моё утверждение о построении периметра из 4 любых прямоугольников требует дополнений. Чуть позже я их постараюсь озвучить. В целом, я согласен, что задачка нетривиальная и требует рассмотрения множества направлений в оптимизации (по скорости отклика алгоритма, по качеству решения, и проч. критерии типа пропорций и т.п.). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 12:37 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
ЯМне удалось создать набор прямоугольником для которого не удаётся найти максимальный вложенный прямоугольник B без дырок. Это необходимо ввести в дополнительное условие задачи. Рисунок приведите плиз.. что-то сомнительно :-). Возмите квадрат стороной в 1 пиксель(он накрывается целиком) и расширяйте пока возможно.. максимальный по площади прямоугольник всегда существует(но может и не единственен естественно).. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 13:19 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
2 Палестинец Попробуйте решить задачу Слоняры для данного набора прямоугольников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 13:34 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
это конечно же приближенное решение ибо существует и большей площади :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 13:50 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
А тупым ограниченным перебором получить приблизительное решение? Ssum - суммарная площадь заданных прямоугольников Smax - макс площадь среди заданных прямоугольников deltaS , к примеру = 0.005*Ssum deltaR , к примеру = 0.005 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 14:00 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
maytonПопробуйте решить задачу Слоняры для данного набора прямоугольников. Ну, лично я решал бы ее так: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 14:21 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
Ну.. не знаю. Моё видение постановки было таково, что прямоугольники нельзя резать. Хотелось-бы услышать мнение автора по этому поводу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 14:38 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
Да, согласен, автора можно понять двояко. требуется найти прямоугольник максимальной площадью который бы покрывал исходные прямоугольники Я в принципе сразу прикинул, что перекрывающиеся прямоугольники эквивалентны тому, как если бы один из них сдвинули "за пределы покрывающего прямоугольника" и больше об этом не думал.... Но в Вашем примере попытка "задвинуть под другой" приведет к вылезанию хвоста с другой стороны.... так что может Вы правы и задачка еще сложнее, чем я думал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 14:46 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
для приближённого алгоритма при большом количестве исходных прямоугольников - можно сначала склеивать маленькие прямоугольники в большие и оперировать уже склееными прямоугольниками как исходными для задачи (это к вопросу о быстродействии алгоритма). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 15:22 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток. спасибо за отклики несколько вопросов и мнений: автор MaytonВыделить множество крупных прямоугольников {A big} (критерий выборки - нечёткий. Это может быть либо площадь, либо минимальная сторона). Выложить из них периметр прямоугольника B по какому принципу определять длину каждой из сторон прямоугольника В? ведь может выйти так что я выложу только одну сторону а на остальные не хватит выбранных прямоугольников. хотя... можно просчитать по площади прямоугольника В... автор MaytonМоё видение постановки было таково, что прямоугольники нельзя резать да, прямоугольники нельзя резать. но не исключено, что слишком длинные прямоуголники "мешающие" решению в некоторых случаях придется удалять... незаметно от препода :) автор MaytonПопробуйте решить задачу Слоняры для данного набора прямоугольников. думаю для такого набора прямоугольников задача не имеет решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 18:41 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
2 Slonyara Прошу прощения. Мне сейчас некогда. Но вы можете обратится с этими-же вопросами к форуму. Возможно вечером (в 21.00) я снова присоединюсь к дискуссии. С уважением Mayton ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2007, 19:03 |
|
||
|
Прямоугольники
|
|||
|---|---|---|---|
|
#18+
Slonyaraпо какому принципу определять длину каждой из сторон прямоугольника В? ведь может выйти так что я выложу только одну сторону а на остальные не хватит выбранных прямоугольников. хотя... можно просчитать по площади прямоугольника В... Может быть и такое. Повторяйте алгоритм, уменьшая пропорции периметра (например на 5-15%). Мы вам дали направление, в котором можно писать алгоритм. Заранее оговорюсь что он не канонизирован и поэтому безсмысленно сейчас доказывать или опровергать, преимущества одних подходов перед другими, не написав ни строчки кода. Практика и только практика расставит все точки над i. Ваша задача сейчас - создание сначала "хоть как нибудь работающего" алгоритма, а потом "работающего за приемлемое время", и наконец "работающего за короткое время и выдающего оптимальный расклад". Начните хотя-бы с самого первого. Не пытайтесь искать наилучшее решение для общего случая! Его ИМХО невозможно найти за реальное (не бесконечное) время. Ищите оптимальное. Особенно в условиях "непрерывности" размеров {A}, что сводит на нет усилия по применению "комбинаторных" решений. Хорошей практикой будет следующее - запустить алгоритм в фоновом потоке, дав ему лимит времени 1-2 минуты, и собрав набор решений, остановить поток, и выдать в результаты, отсортировав по критерию качества в убывающием порядке (площадь прямоугольника B). Для введения возможности "рыскания" алгоритма по различным оптимальным раскладам, в него можно ввести некий "случайный фактор" и запускать многократно. Например, из прямогуольников периметра формировать различные наборы покрытий, меняя в зависимости от "фактора" порядок и ориентацию прямоугольников {A}. нельзя резать. но не исключено, что слишком длинные прямоуголники "мешающие" решению в некоторых случаях придется удалять... незаметно от препода :) Я думаю, не стоит этого делать. Препод может специально задать "краевые" начальные данные, чтобы подёргать алгоритм на прочность. Для упрощенной проверки сделайте в начале алгоритма ряд тестов типа Код: plaintext 1. 2. 3. Это должно отбросить 99.9% тех маргинальных случаев, образец которого я привел на последней картинке. Об оставшемся проценте исходных данных (если они будут), мне ничего не известно. Подумайте над этим сами. На этом я закругляюсь, и желаю вам успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2007, 15:00 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=163&tid=1346064]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
83ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 436ms |

| 0 / 0 |
