powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / разбиение объединения прямоугольников на прямоугольники
10 сообщений из 10, страница 1 из 1
разбиение объединения прямоугольников на прямоугольники
    #33096164
На какое минимальное число прямоугольников можно разбить объединение N прямоугольников?
нужны
1.ссылка на ресурс где такие задачи решаются
2.результат
3.оценка сложности алгоритма
4.сам алгоритм

Спасибо!

на самом деле задача чуть сложнее -
разбить остаток от вычитания объединения N-мерных паралелепипедов из N-мерного же паралелепипеда на N-мерные паралелепипеды - оптимальным образом.
...
Рейтинг: 0 / 0
разбиение объединения прямоугольников на прямоугольники
    #33096446
Дмитрий Валуев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
разбиение объединения прямоугольников на прямоугольники
    #33097924
Yossarian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю, как раз таки задачка которая "нв самом деле" - она
попроще.

1. Вычитаем все паралл. которые оказались внутри и не влияют на результат.
2. Разбиваем по границам паралл-дов. То есть продолжаем все грани до
пересечения с границами объемлющего паралл-да. Получаем такую сеточку.
3. Проверяем, какие из ячеек сетки можно склеить с получением паралл-да.
4. фсе.


Washington Irving
...
Рейтинг: 0 / 0
разбиение объединения прямоугольников на прямоугольники
    #33098477
спасибо!

алгоритм сканирующей линии на многомерный случай обобщить не хватает интеллекта...

И всё-таки самое главное "на какое минимальное число" - он не решает. Второй - тоже.

Пожалуйста, продолжайте отвечать, задача ещё долго будет актуальна, и форум я читаю регулярно, не смотрите что гость.
...
Рейтинг: 0 / 0
разбиение объединения прямоугольников на прямоугольники
    #33099067
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходные данные:
0. Считаем, что грани всех прямоугольников параллельны осям.
1. Дано множество P N-мерных прямогуольников , |P|=K
2. Дан охватываювающий N-мерный прямоугольник R.

Требуется:
1. Получить минимальное по мощности множество Q непересекающихся N-мерных прямоугольников,
|Q|=M (неизвестна), таких что sum(P)+sum(Q) = R (объединение равно охватывающему),
sum(P)*sum(Q) = 0 (пересечение их пусто). (sum(P) - объединение входящих в P прямоугольников).

Алгоритм полного перебора:
1. Из каждой вершины элемента множества P, а также из точек пересечения ребер с гранями проводим отрезки во все вершины R. Получаем E*K*(2 N ) 2 =K*2 2*N отрезков. (E - некоторая константа)

2. Отбрасываем отрезки, пересекающие хотя бы один элемент из P, получаем L=K/C*2 2*N отрезков, где C - некоторая константа. Каждый такой отрезок является теперь диагональю одного из возможных и допустимых прямоугольников множества Q. Обозначим это множество как T. Условие sum(P)*sum(T)=0 выполняется.

3. Перебором всех подможеств множества T, начиная с одноэлементного, находим Q.

Оценка вычислительной сложности:
O( 2 L ) , т.е. в худшем случае O(2 E*K*22*N )

P.S. Очевидно, этот алгоритм можно улучшить, но сложно придумать более тупой и медленный

Пример для двухмерного случая.
...
Рейтинг: 0 / 0
разбиение объединения прямоугольников на прямоугольники
    #33100790
у меня пока такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 
query Points;
set Rectangles;
 
Points.push(left_low_corner_of_main_rectangle);
while(!Points.empty)
{
        Point p = Points.pop;
        Rectangle r = GetMaxAvailableRectangle(p);
        foreach(Point p1 in r.Corners)
        {
            if (p1==p)
                break;
            Points.push(p1);    
        }
        Rectangles.add(r);
}
...
Рейтинг: 0 / 0
разбиение объединения прямоугольников на прямоугольники
    #33170040
Мой алгоритм работает очень медленно, результаты получаются такие:
...
Рейтинг: 0 / 0
разбиение объединения прямоугольников на прямоугольники
    #33170041
...
Рейтинг: 0 / 0
разбиение объединения прямоугольников на прямоугольники
    #33170042
жёлтые нолики - это int32 переполнился.
...
Рейтинг: 0 / 0
разбиение объединения прямоугольников на прямоугольники
    #33170044
3N-4N-5N - размерность пространства. Для больших размерностей ну нереально дождаться, 20 минут, например рассчитывается пересечение двух восьмимерных.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / разбиение объединения прямоугольников на прямоугольники
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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