【发布时间】:2026-01-07 11:45:02
【问题描述】:
让 3D 网格,就像棋盘一样,具有额外的维度。现在假设我在该网格中有一定数量的立方体,每个立方体占据 1x1x1 单元格。假设这些立方体中的每一个都是一个项目。
我想做的是将这些立方体替换/组合成更大的盒子,在 X、Y 和 Z 轴上占据任意数量的单元格,以便在保持整体“外观”的同时尽可能少的盒子数量”。
可能不清楚,所以我将举一个 2D 示例。假设我有一个 2D 网格,其中包含几个占据 1x1 单元格的正方形。一个字母代表给定项目占用的单元格,每个项目都有一个与其他项目不同的字母。在第一个示例中,我们有 10 个不同的项目,每个项目占据 1x1x1 的单元格。
+---+---+---+---+---+---+
| | | | | | |
+---+---+---+---+---+---+
| | A | B | C | D | |
+---+---+---+---+---+---+
| | E | F | G | H | |
+---+---+---+---+---+---+
| | | K | L | | |
+---+---+---+---+---+---+
| | | | | | |
+---+---+---+---+---+---+
这是我的输入数据。我现在可以通过多种可能的方式对其进行优化,即减少项目的数量,同时仍然占据相同的单元格,其中一种可能是:
+---+---+---+---+---+---+
| | | | | | |
+---+---+---+---+---+---+
| | A | B | B | C | |
+---+---+---+---+---+---+
| | A | B | B | C | |
+---+---+---+---+---+---+
| | | B | B | | |
+---+---+---+---+---+---+
| | | | | | |
+---+---+---+---+---+---+
在这里,我只有 3 个(即 A、B 和 C),而不是 10 个项目。但是它可以进一步优化:
+---+---+---+---+---+---+
| | | | | | |
+---+---+---+---+---+---+
| | A | A | A | A | |
+---+---+---+---+---+---+
| | A | A | A | A | |
+---+---+---+---+---+---+
| | | B | B | | |
+---+---+---+---+---+---+
| | | | | | |
+---+---+---+---+---+---+
这里我只有两个项目,A 和 B。这是尽可能优化的。
我正在寻找的是一种能够找到最佳项目大小和排列的算法,或者至少是一个相当好的算法,以便我在占据相同单元格的同时拥有尽可能少的项目,并且是 3D 的!
有这样的算法吗?我确信在某些领域这种算法会很有用,我需要它来制作视频游戏。谢谢!!
【问题讨论】:
-
你有二维案例的最佳解决方案吗?
-
也许K-Map 可以给你一个开始的想法。但是,它是 2D 的,它并不适用每个盒子应该只属于一个集合的条件。
标签: algorithm math optimization grid space