Estoy tratando de dividir un archivo binario (solo los elementos son 0
y 1
) matriz 3D asignada dinámicamente en matrices 3D separadas y más pequeñas. En la siguiente figura hace que sea un poco más claro de entender:División recursiva de matriz binaria 3D para crear un flujo de bits para cada entrada que equivale a 1
http://img521.imageshack.us/img521/4296/splittingsteps.png
Es una matriz 3D escasa de 10.000 elementos. Para cada 1
que es un elemento de mi matriz, quiero crear un flujo de bits único. Los subdominios obtenidos me devuelven un número de 1s que están en el bloque correspondiente. Ese número se convierte luego en binario y se agrega al flujo de bits.
Dado que esta operación de división es la misma cada vez, primera división en la dirección i
, a continuación, en la dirección j
y luego en los k
de dirección (3 niveles) Quiero hacer esto de forma recursiva. Además, dado que estoy trabajando en ANSI C, el trabajo no recursivo resultaría en una gran cantidad de código duplicado.
La división debe terminar en los subdominios que están vacíos, por lo que solo contiene 0 (número_x = 0) o cuando el tamaño es [0..1] x [0..1] x [0]. Estos subdominios son manejados por un código de Huffman.
Más específicamente, es una matriz 3D con dimensiones van desde:
I = [0 .. 511] x [0 .. 511] x [0 .. 31]
Mi código actual para los primeros tres niveles se puede encontrar en http://codepad.org/zGbAhKrC
de Split nivel # 1 resultados en dos matrices 3D de dimensiones :
I_w = [0 .. 255] x [0 .. 511] x [0 .. 31]
I_e = [256 .. 511] x [0 .. 511] x [0 .. 31]
number_w = 6505 y number_e = 3495 representan el número de 1 en ambas partes.
de dos niveles # 2 resultados en cuatro matrices en 3D de dimensiones:
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
representan el número de 1 de en el bloque correspondiente. number_se = 1745
y number_ne = 1750
representan el número de 1 en el bloque correspondiente.
de dos niveles # 3 resultados en ocho arrays 3D de dimensiones:
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
representan el número de 1
s en el bloque correspondiente. number_nwm = 4364
y number_nwp = 0
representan el número de 1
s en el bloque correspondiente. number_sem = 1745
y number_sep = 0
representan el número de 1
s en el bloque correspondiente. number_nem = 1750
y number_nep = 0
representan el número de 1
s en el bloque correspondiente.
¿Alguien que pueda ayudarme con algún pseudo código basado en mi código actual?
¡Gracias de antemano!
+1 simplemente por el inmenso esfuerzo en presentar esto de manera precisa (incluidos los gráficos) y las más de 950 líneas de código incluso antes de pasar a SO. Me dejó alucinado al intentarlo brevemente, así que solo deseo desafortunadamente. – gnometorule