Найдите самый большой куб, содержащийся в объединении кубоидов

18

У меня много кубоидов в трехмерном пространстве, у каждого есть начальная точка в (x, y, z) и размер (Lx, Ly, Lz). Интересно, как найти самый большой куб в этом трехмерном пространстве, который содержится в объединении кубоидов. Есть ли эффективный алгоритм для этого?

Например, если у меня есть следующие кубоиды:

  • кубоид, начинающийся с (0,0,0) с размером (10,10,10),
  • кубоид в (10,0,0) с размером (12,13,15),
  • кубоид в (0,10,0) с размером (10,10,10),
  • кубоид в (0,0,10) с размером (10,10,10), и
  • кубоид в (10,10,10) с размером (9,9,9).

Тогда самый большой куб, содержащийся в объединении этих кубоидов, будет кубом, начинающимся с (0,0,0) с размером (19,19,19).

Более общая версия этого вопроса:

Учитывая набор из блоков в R d , найдите самый большой гиперкуб, содержащийся в объединении блоков.nRd

pantoffski
источник
8
Я думаю, что внутри спрятан лучший вопрос: а именно, учитывая объединение блоков в , вычислим самый большой гиперкуб, содержащийся в объединении. Rd
Суреш Венкат
1
Могут ли эти кубоиды перекрываться?
Питер Бут
@Suresh, спасибо за разъяснение и обобщение вопроса :) @Peter, в моем случае ... Он не будет совпадать :)
pantoffski
2
То, как вы это сделали, звучит так, что стороны кубов выровнены по осям x, y и z. Так ли это, или кубы могут иметь произвольную ориентацию? Это, очевидно, существенно влияет на эффективность алгоритма.
Джо Фицсимонс
В моем случае лицо каждого кубоида ортогонально только осям.
Пантоффски

Ответы:

15

Ну, вот первый глупый ответ ... Возьмите самолет через каждую грань прямоугольных коробок. Это образует сетку размером . Нетрудно вычислить для каждой такой ячейки сетки, будь то внутри объединения или снаружи. Теперь, из каждой вершины сетки, вырастите куб (имеющий эту вершину как вершину), пытаясь сделать его максимально большим. Делать это в самом наивном смысле, это занимает OO(n3) времени на вершину, но, вероятно, используя магию поиска с ортогональным диапазоном, нужно уметь делать это в log O ( 1 ) n на вершину. Итак, О ( п 3O(n3logn)logO(1)n должно быть возможно ...O(n3logO(1)n)

Вторая попытка: вычислить союз. В этом конкретном случае это можно сделать в О(NжурналN) времени (путем подметания плоскостей). Теперь обратите внимание, что вам просто нужно вычислить диаграмму вороной границы объединения. Используя результат: http://vw.stanford.edu/~vladlen/publications/vor-polyhedral.pdf , это можно сделать за время O ( n 2 + ε ) для произвольной малой постоянной ε > 0 .LО(N2+ε)ε>0

Нарушение ограниченного временем выполнения, было бы интересно, ИМХО.О(N2)

Сариэль Хар-Пелед
источник
Спасибо, сэр, я также думаю, что L∞ является лучшим решением для этой проблемы до сих пор. Так как я уже делал L∞ для 2D-случая (реализовано методами, представленными в этой статье inf.usi.ch/faculty/papadopoulou/publications/ijcga01.pdf ). 3D-корпус только с коробками не должен быть очень сложным.
Пантоффски
8

Казалось бы, ответ на общий вопрос о является NP-сложным. Доказательство довольно простое. Мы просто берем экземпляр 3SAT для d переменных и связываем каждую переменную с измерением. Думайте о пространстве как о пространстве возможных назначений переменных: мы рассматриваем только точки между -1 и +1 в каждом димеснионе и связываем местоположения < 0 с назначением 0 для этой переменной и > 0 с назначением 1. Каждый пункт исключает область, заданную 1 × 1 × 1 × n × n × n . , , × nрdd<0>01×1×1×N×N×N,,,×N hypercuboid.

Если объединение этих кубоидов заполняет пространство (и так содержит куб), то не существует удовлетворяющего присвоение переменных для экземпляра 3sat. Если, однако, самый большой куб содержал 1 × 1 × . , , × 1 или 0 (без предложений), существуют только другие возможности, а затем удовлетворительное присваивание переменных.2×2×,,,×21×1×,,,×1

Джо Фитцсимонс
источник
Я полагаю, что вы можете доказать это в FNP (по крайней мере, в случае выровненных по осям кубоидов), выполнив приведенное выше рассуждение в обратном порядке и показав, что любой кубоид представляет собой ограничение, которое можно проверить за полиномиальное время.
Джо Фитцсимонс