线性四叉树是存储网格划分数据的最有效方法吗

Are Linear Quadtrees the most efficient way to store grid division data

假设您有一个 32x32 的网格,可以使用以下任何块大小随机细分:

32x32、16x16、8x8、4x4

网格被细分多少次以及细分发生的方式是随机确定的。

视觉上看起来像这样:

此类数据可以用 quad tree 表示。

我的问题是:

如果我尝试使用尽可能少的字节来表示上图,线性四叉树是否是最有效的方法?

我能想到的唯一其他选择是制作图形的所有可能组合,并使用单个数字表示每个组合。

所以对于图形有 4 个级别的分支(32x32、16x16、8x8、4x4)这会给我们 4^0 + 4^1 + 4^2 + 4^3 可能的组合,等于 85组合。

因此,我能想到的存储图形的最小方法是使用 7 位(1010101 是二进制数字 85)来表示可能的组合。

在存储效率方面 Linear Quadtrees 会等于这个,还是会占用更多或更少 space?

我一般不回答我自己的问题,但看到这个问题仍然有意见没有回应我会给出我的答案。

经过将近 2 天的研究,我现在对什么是线性四叉树有了更好的理解。

线性四叉树只是按特定遍历顺序编写的四叉树的数组表示。

基本上只需选择您要读取四叉树的特定 "order" 并按该顺序保存它的值。

因此,例如,在问题中使用的图表中,有 4 层堆栈,因为有 4 种块大小(32、16、8、4)。

每一叠都可以按顺序阅读。

所以假设整个图都填充了一个 32x32 的块,树的 "root"(我们读取的第一个节点)将填充一个“1”来表示我们需要那个块,而所有根的子节点将为“0”,因为不再需要块,因为图已满。

所以线性四叉树在二进制中看起来像这样“10000000000000....(84 个 0)”

这显然比我在问题中提到的 7 位要多,但那是因为没有对这个线性四叉树应用压缩。

我真的问错了。你需要线性四叉树来表示四叉树,所以我真的应该被问到 "What is the best way to compress a linear quad tree",我在问题中给出的想法是最好的方法。

创建一个包含所有不同四叉树组合的查找 table,并使用一个数字来表示每个组合。