C语言 三维二进制数组的递归分割,为每个等于1的条目创建位流



我试图将二进制(仅元素是01)动态分配的3D数组拆分为单独的较小的3D数组。下面的图让我们更容易理解:

http://img521.imageshack.us/img521/4296/splittingsteps.png

这是一个10000个元素的稀疏3D数组。对于数组中的每个1元素,我想创建一个唯一的比特流。获得的子域返回相应块中的若干1。然后将该数字转换为二进制并添加到位流中。

由于每次拆分操作都是相同的,首先在i方向拆分,然后在j方向拆分,然后在k方向(3个级别)拆分,我想递归地执行此操作。此外,由于我在ANSI C中工作,非递归工作将导致大量重复代码。

分割应该在空的子域终止,因此只包含0 (number_x =0)或当大小为[0..]1 . x [0..]1] x[0]。这些子域由霍夫曼代码处理。

更具体地说,它是一个3D数组,起始维度为:

I = [0 .. 511] x [0 .. 511] x [0 .. 31] 

我目前的前三个级别的代码可以在http://codepad.org/zGbAhKrC

找到。

分裂关卡#1产生两个三维数组:

I_w = [0 .. 255] x [0 .. 511] x [0 .. 31]
I_e = [256 .. 511] x [0 .. 511] x [0 .. 31]

number_w = 6505和number_e = 3495表示两个部分中1的个数。

分裂关卡#2产生四个三维数组:

I_sw = [0 .. 255] x [0 .. 255] x [0 .. 31]
I_nw = [0 .. 255] x [256 .. 511] x [0 .. 31]
I_se = [256 .. 511] x [0 .. 255] x [0 .. 31]
I_ne = [256 .. 511] x [256 .. 511] x [0 .. 31]

number_sw = 2141number_nw = 4364表示对应块中1的个数。number_se = 1745number_ne = 1750表示对应块中1的个数。

分裂关卡#3产生八个三维数组:

I_swm = [0 .. 255] x [0 .. 255] x [0 .. 15]
I_nwm = [0 .. 255] x [256 .. 511] x [0 .. 15]
I_swp = [0 .. 255] x [0 .. 255] x [16 .. 31]
I_nwp = [0 .. 255] x [256 .. 511] x [16 .. 31]
I_sem = [256 .. 511] x [0 .. 255] x [0 .. 15]
I_nem = [256 .. 511] x [256 .. 511] x [0 .. 15]
I_sep = [256 .. 511] x [0 .. 255] x [16 .. 31]
I_nep = [256 .. 511] x [256 .. 511] x [16 .. 31]

number_swm = 2141number_swp = 0表示1在相应块中的个数。number_nwm = 4364number_nwp = 0表示对应块中1的个数。number_sem = 1745number_sep = 0表示对应块中1的个数。number_nem = 1750number_nep = 0表示1在对应块中的个数。

谁可以帮助我与一些伪代码基于我目前的代码?

提前感谢!

查看wikipedia中的kd-tree示例

最新更新