algorithm - 网格上一组 block 的空间组织

标签 algorithm data-structures spatial

我有一个单元格网格(开始时是空的),以及一组 block ,这些 block 是矩形或正方形,其大小是单元格的倍数(例如,一个 block 可能是 2 个单元格乘 3 个单元格)。我不会提前知道所有的积木,但必须在它们到达时放置它们。如果有人想知道,这与将一堆较小的位图放在一个大位图上有关,其中所有位图的大小都是 32 的倍数。

我一直在想,我可以简单地遍历网格,寻找适合该 block 的位置,如果我找到一个位置,就把它放在那里。我还可以有一个四叉树来跟踪网格的哪些 block 被占用,这样我就不必多次遍历已分配的单元格。

我曾尝试通过谷歌搜索示例和解决方案,但由于英语不是我的母语,因此我无法确定要搜索的内容。

所以我的问题是使用什么算法和数据结构来解决这类问题?

最佳答案

您正在搜索关于所谓的“bin packing”(参见 http://en.wikipedia.org/wiki/Bin_packing_problem)的信息,更准确地说,是问题的 2D 版本,更具体地说,是“texture packing”。

你可能想看看那里:https://gamedev.stackexchange.com/questions/2829/texture-packing-algorithm (引用了几种算法和数据结构)

如果你真的有上进心,你也可以看看这方面的文章!

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.98.3502&rep=rep1&type=pdf

http://citeseerx.ist.psu.edu/search?q=texture+packing&submit=Search&sort=rel

关于algorithm - 网格上一组 block 的空间组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041683/

相关文章:

string - "Lexicographically minimal string rotation"与 "finding the lexicographical min suffix"相同吗?

algorithm - 从 "int"映射到相应的排列值?

mysql - 为什么mysql不利用这个空间索引呢?

sql-server - 如何保留计算的 GEOMETRY 或 GEOGRAPHY 列

vb.net - 使用光线转换算法对具有纬度/经度坐标的多边形中的点进行测试

algorithm - 2^n 复杂度算法

algorithm - 从分数列表生成标准比赛排名

java - 如果我想根据不同的属性以不同的方式搜索一个对象,应该使用什么数据结构?

data-structures - 如何计算时间复杂度?

c++ - 一种使用 O(1) 将所有条目复制和存储在平衡二叉搜索树中的方法