Saya memiliki banyak cuboids dalam ruang 3D, masing-masing memiliki titik awal di (x, y, z) dan memiliki ukuran (Lx, Ly, Lz). Saya bertanya-tanya bagaimana menemukan kubus terbesar di ruang 3D ini yang terkandung dalam penyatuan kuboids. Apakah ada algoritma yang efisien untuk ini?
Misalnya, jika saya memiliki kuboid berikut:
- berbentuk kubus mulai dari (0,0,0) dengan ukuran (10,10,10),
- berbentuk kubus di (10,0,0) dengan ukuran (12,13,15),
- berbentuk kubus di (0,10,0) dengan ukuran (10,10,10),
- berbentuk kubus pada (0,0,10) dengan ukuran (10,10,10), dan
- berbentuk kubus di (10,10,10) dengan ukuran (9,9,9).
Kemudian, kubus terbesar yang terkandung dalam persatuan kuboid ini akan menjadi kubus mulai dari (0,0,0) dengan ukuran (19,19,19).
Versi yang lebih umum dari pertanyaan ini:
Diberikan koleksi kotak di , cari hypercube terbesar yang terkandung dalam penyatuan kotak.R d
ds.algorithms
cg.comp-geom
pantoffski
sumber
sumber
Jawaban:
Nah, inilah jawaban pertama yang konyol ... Cobalah naik pesawat melewati setiap wajah kotak persegi panjang. Ini membentuk kisi ukuran . Tidak sulit untuk menghitung untuk setiap sel grid seperti apakah itu di dalam serikat atau di luar. Sekarang, dari masing-masing simpul grid, tumbuhkan sebuah kubus (dengan simpul ini sebagai simpul) yang berusaha membuatnya sebesar mungkin. Melakukannya dengan cara yang paling naif, ini membutuhkan waktu O ( n 3 log n ) per titik, tetapi mungkin menggunakan sihir pencarian rentang ortogonal, seseorang harus dapat melakukannya di log O ( 1 ) n per simpul. Jadi O ( n 3O(n3) O(n3logn) logO(1)n harus dimungkinkan ...O(n3logO(1)n)
Percobaan kedua: Hitung serikat pekerja. Dalam kasus khusus ini, ini dapat dilakukan dalam waktu (dengan menyapu pesawat). Sekarang, perhatikan bahwa Anda hanya perlu menghitung diagram L ∞ voronoi dari batas serikat. Dengan menggunakan hasilnya: http://vw.stanford.edu/~vladlen/publications/vor-polyhedral.pdf , ini dapat dilakukan dalam waktu O ( n 2 + ε ) , untuk konstanta kecil yang sewenang-wenang ε > 0 .O(nlogn) L∞ O(n2+ε) ε>0
sumber
sumber