J'essaie de diviser un binaire (les seuls éléments sont 0
y 1
) alloué dynamiquement en tableaux 3D distincts et plus petits. La figure suivante rend la compréhension un peu plus claire :
http://img521.imageshack.us/img521/4296/splittingsteps.png
Il s'agit d'un tableau 3D clairsemé de 10 000 éléments. Pour chaque 1
qui est un élément de mon tableau, je veux créer un flux binaire unique. Les sous-domaines obtenus me renvoient un nombre de 1 qui se trouvent dans le bloc correspondant. Ce nombre est ensuite converti en binaire et ajouté au flux binaire.
Étant donné que cette opération de fractionnement est la même à chaque fois, le premier fractionnement dans le cadre du i
puis dans la direction j
et ensuite dans la direction k
direction (3 niveaux) Je veux faire cela de manière récursive. De plus, comme je travaille en ANSI C, travailler de manière non récursive entraînerait une énorme quantité de code dupliqué.
Le fractionnement doit se terminer par des sous-domaines vides, c'est-à-dire ne contenant que 0 (nombre_x =0) ou lorsque la taille est [0..1] x [0..1] x [0]. Ces sous-domaines sont traités par un code de Huffman.
Plus précisément, il s'agit d'un tableau 3D avec des dimensions de départ :
I = [0 .. 511] x [0 .. 511] x [0 .. 31]
Mon code actuel pour les trois premiers niveaux se trouve à l'adresse suivante http://codepad.org/zGbAhKrC
Le niveau 1 fractionné donne lieu à deux tableaux de dimensions 3D :
I_w = [0 .. 255] x [0 .. 511] x [0 .. 31]
I_e = [256 .. 511] x [0 .. 511] x [0 .. 31]
nombre_w = 6505 et nombre_e = 3495 représentent le nombre de 1 dans les deux parties.
La division du niveau 2 donne lieu à quatre tableaux de dimensions en 3D :
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 = 2141
y number_nw = 4364
représentent le nombre de 1 dans le bloc correspondant. number_se = 1745
y number_ne = 1750
représentent le nombre de 1 dans le bloc correspondant.
Le niveau 3 fractionné donne lieu à huit tableaux de dimensions en 3D :
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 = 2141
y number_swp = 0
représentent le nombre de 1
dans le bloc correspondant. number_nwm = 4364
y number_nwp = 0
représentent le nombre de 1
dans le bloc correspondant. number_sem = 1745
y number_sep = 0
représentent le nombre de 1
dans le bloc correspondant. number_nem = 1750
y number_nep = 0
représentent le nombre de 1
dans le bloc correspondant.
Quelqu'un peut-il m'aider avec un pseudo code basé sur mon code actuel ?
Merci d'avance !