J'ai beaucoup de cuboïdes dans l'espace 3D, chacun a un point de départ à (x, y, z) et a une taille de (Lx, Ly, Lz). Je me demande comment trouver un plus grand cube dans cet espace 3D qui est contenu dans l'union des cuboïdes. Existe-t-il un algorithme efficace pour cela?
Par exemple, si j'ai les cuboïdes suivants:
- un cuboïde commençant à (0,0,0) avec une taille (10,10,10),
- un cuboïde à (10,0,0) de taille (12,13,15),
- un cuboïde à (0,10,0) de taille (10,10,10),
- un cuboïde à (0,0,10) de taille (10,10,10), et
- un cuboïde à (10,10,10) de taille (9,9,9).
Ensuite, le plus grand cube contenu dans l'union de ces cuboïdes sera un cube commençant à (0,0,0) avec une taille (19,19,19).
Une version plus générale de cette question:
Étant donné une collection de boîtes dans , trouvez le plus grand hypercube contenu dans l'union des boîtes.R d
ds.algorithms
cg.comp-geom
pantoffski
la source
la source
Réponses:
Eh bien, voici une première réponse idiote ... Prenez un avion à travers chaque face des boîtes rectangulaires. Cela forme une grille de taille . Il n'est pas difficile de calculer pour chacune de ces cellules de grille, que ce soit à l'intérieur de l'union ou à l'extérieur. Maintenant, à partir de chaque sommet de la grille, développez un cube (ayant ce sommet comme sommet) en essayant de le rendre aussi grand que possible. En le faisant de la manière la plus naïve, cela prend du temps O ( n 3 log n ) par sommet, mais probablement en utilisant la magie de recherche de plage orthogonale, on devrait être capable de le faire en log O ( 1 ) n par sommet. Alors O ( n 3O ( n3) O ( n3Journaln ) JournalO ( 1 )n devrait être possible ...O ( n3JournalO ( 1 )n )
Un deuxième essai: calculer le syndicat. Dans ce cas spécifique, cela peut être fait en temps (en balayant les plans). Maintenant, notez qu'il vous suffit de calculer le diagramme L ∞ voronoi de la frontière de l'union. En utilisant le résultat: http://vw.stanford.edu/~vladlen/publications/vor-polyhedral.pdf , cela peut être fait en temps O ( n 2 + ε ) , pour une petite constante arbitraire ε > 0 .O ( n logn ) L∞ O ( n2 + ε) ε > 0
Briser le temps d'exécution lié ici serait intéressant, à mon humble avis.O ( n2)
la source
La réponse à la question générale sur semble être qu'il est dur NP. La preuve est assez simple. Nous prenons simplement une instance 3SAT sur d variables et associons chaque variable à une dimension. Considérez l'espace comme un espace d'affectations possibles de variables: nous ne considérons que les points entre -1 et +1 dans chaque dimesnion, et associons les emplacements < 0 avec une affectation de 0 pour cette variable et > 0 avec une affectation de 1. Chaque exclut une région donnée par 1 × 1 × 1 × n × n × n . . . × nRré ré < 0 > 0 1 × 1 × 1 × n × n × n . . . × n hypercuboïde.
Si l'union de ces parallélépipèdes remplit l'espace (et donc contient une cube), alors il n'y a pas d' affectation satisfaisant des variables de l'instance de 3SAT. Si toutefois le plus gros cube contenu est 1 × 1 × . . . × 1 ou 0 (pour aucune clause), les seules autres possibilités, alors une affectation satisfaisante des variables existe.2 × 2 × . . . × 2 1 × 1 × . . . × 1
la source