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

时间:2018-05-30 01:02:54

标签: compression quadtree

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

32x32,16x16,8x8,4x4

网格细分的次数以及细分发生的方式随机确定。

视觉上看起来像这样:

enter image description here

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

我的问题是:

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

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

因此,对于图形,存在4个分支水平(32x32,16x16,8x8,4x4),这将给出4 ^ 0 + 4 ^ 1 + 4 ^ 2 + 4 ^ 3个可能的组合,其等于85个组合。

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

Linear Quadtrees在存储效率方面是否相等,或者它们会占用更多还是更少的空间?

1 个答案:

答案 0 :(得分:0)

我通常不回答我自己的问题,但看到这个问题仍然没有得到回应,我会给出答案。

经过近2天的研究,我现在对线性四叉树的理解要好得多。

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

基本上只需选择要读取四叉树的特定“订单”并按顺序保存其值。

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

可以按顺序读取每个堆栈。

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

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

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

我真的问了一个错误的问题。你需要线性四叉树来表示四叉树,所以我真的应该被问到“压缩线性四叉树的最佳方法是什么”,我在问题中提出的想法是最好的方法。

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