给定一个大立方体(轴对齐并在整数坐标上)和许多较小的立方体(也轴对齐并在整数坐标上)。我们如何检查大立方体是否完全被较小的立方体填充。
目前我们检查:
- 对于每个小立方体,它都完全包含在大立方体中。
- 它不与任何其他小立方体相交。
- 小立方体的体积之和等于大立方体的体积。
这对于少量多维数据集是可以的,但我们需要支持对尺寸大于 2^32 的多维数据集的这种测试。即使在 2^16 处,填充大立方体所需的小立方体数量也足够大,以至于第 2 步需要一段时间(O(n^2) 检查每个立方体与其他立方体不相交)。
有更好的算法吗?
编辑:
对此似乎有些困惑。我不是想把一个立方体分成更小的立方体。那已经完成了。我们程序的一部分将大型 OpenCL 范围(整数坐标上的轴对齐立方体)拆分为许多适合硬件作业的较小范围。
我正在做的是连接到这个系统并检查它产生的作业是否正确覆盖了大的初始范围。我上面的算法有效,但它很慢,并且考虑到我们必须运行的测试数量,我想尽可能快地保持这些测试。