Para el siguiente arreglo: ARR[4 (filas), 5 (columnas)]. Asumiendo que tenemos informacion en las primeras 2 filas de la forma (Donde el par de numeros corresponde a fila,columna(11= fila 1, columna 1): {{11, 12,13,14,15},{21,22,23,24,25}}.
Para poder representar este arreglo de mas de 1 dimension en codigo 3D vamos a realizar Mapeo Lexicografico un tema que la mayoria maneja.
EL mapeo convertiria el arreglo anterior en:
Acceso por filas: {11,12,13,14,15,16,17,18,21,22,23,24,25}
Acceso por columnas: {11,21,31,41,12,22,32,42}
Ejemplo:
MAT[x,y] = 10 para MAT[1..10,1..3]. 10 filas, 3 columnas.
Acceso por Filas
formulaPos = ( x - 1)* tamCol + y
t1= x - 1
t2 = t1 * 3
t3 = t2 + y
MAT[T3] = 10
Acceso por Columnas
formulaPos = (y -1)* tamfila + x
t1 = y - 1
t2 = t1 * 10
t3 = t2 + x
MAT[t3] = 10
Formula Acceso por filas consecutivas: x + (y-1)tam1 + (z-1)*tam2*tam1
Formula Acceso por columnas consecutivas: (x-1)* tam1 + y + (z-1)* tam2*tam1
Otra Propuesta:
Formula Acceso por filas consecutivas : (x * tam1 + y) * tam2 + z
Escribir el codigo de 3 Direcciones de el la siguiente asignacion:
ARR[x,y,z] = ARR[ARR[a,b,c],y,z] Donde ARR[1..10,1..7,1..3] utilizando acceso por Columnas
Propuesta 1:
t1= x - 1
t2 = t1 * 10
t3 = t2 + y
t4 = z -1
t5 = t4 * 30
t6 = t3 + t5
t7 = a - 1
t8= t7 * 10
t9 = t8 + b
t10 = c - 1
t11 = t10 * 3
t12 = t11 + t9
t13 = ARR[t12]
t14 = t13 - 1
t15 = t14 * 10
t16 = t15 + y
t17 = z - 1
t18 = t17 * 30
t19 = t16+ t18
t20 = ARR[t19]
ARR[t6] = t20
Otra propuesta(la encontre en un cuaderno de un companiero aun no la entiendo):
t1 = x - 1
t2 = t1 * 7
t3 = t2 * 3
t4 = y - 1
t5 = t4 * 3
t6 = t3 + t5
t7 = t6 + z
t8 = a - 1
t9 = t8 * 7
t10 = t9 * 3
t11 = b - 1
t12 = t11 * 3
t13 = t10 + t12
t14 = t12 + c
t15 = t14 - 1
t16 = t15 * 7
t17 = t16 * 3
t18 = y - 1
t19 = t18 * 3
t20 = t17 + t19
t21 = t20 + z
t22 = ARR[t21]
ARR[t7] = t22
Si aun no entiendes puedes ver el siguiente blog donde explican de manera detallada los arreglos en 3 dimensiones : Arreglos
No comments:
Post a Comment