Mapeo multidimensional. Fórmula de mapeo para n dimensiones. (∏=+1 )] DB + lp [∑=1 DB = Dirección base. lp = Longitud de palabra. n = Número de dimensiones. i, j = Subíndices de las dimensiones. Aj = Tamaño de las dimensiones. ai = Celda que estoy buscando. Para que esta fórmula funcione, es indispensable que la memoria sea continua. La dirección de base está fuera de la sumatoria porque esta sólo debe ser sumada una vez, es decir, no es un factor en cada sumando. ¿Por qué se toma una dirección base? Porque la dirección base es la primer dirección de nuestro arreglo, entonces sabemos que las direcciones partirán de ahí. La longitud de palabra estará dada por el tipo de dato, pero es importante im portante recalcar que la longitud de palabra sólo debe ser tomada en cuenta para cálculos “humanos” ya que en código no se aumenta celda por celda, se aumenta celdas dependiendo del dato. El número de dimensiones es necesario como parámetro ya que como es una fórmula para un número indeterminado de dimensiones se necesita saber con cuantas se quiere trabajar. En el mundo que nosotros conocemos, de 3 dimensiones, es fácil darle un nombre a cada dimensión (Número de plano, número de renglón y número núm ero de columna), pero cuando te enfrentas a un número mayor de dimensiones no es práctico referirse a estas de esa forma, es por eso que en la fórmula se presenta Aj, así sin importar cuántas dimensiones sean se pueden representar representar aumentando el subíndice. Esta variable representa el tamaño o valor de la dimensión total, es decir, el número de celdas en cada dimensión. Por ejemplo, un cubo de rubik, el cual tiene un tamaño de: 3*3*3.
Analizando este cubo, sabemos que son 3 dimensiones, entonces n = 3, representándolo en Aj, quedaría así: //Para la primera dimensión, el subíndice j tomaría el valor de 1 y así sucesivamente tanto como en dimensión como en subíndice. A1 = 3, A2 = 3, A3 = 3. De Aj surge el ai, que suponiendo un mismo subíndice hacen referencia a la misma dimensión, con la diferencia que ai representa las coordenadas de la celda que estoy buscando, es decir, usando el mismo ejemplo podríamos buscar la celda en las coordenadas: a1 = 2, a2 = 3, a3 = 1.
Ejemplo: En un espacio de dimensiones, con valores de: A1 = 5, A2 = 3, A3 = 2 y queriendo buscar la celda (4, 2, 1). Con una dirección contigua empezando desde 1000, con tipo de dato entero de 2 bytes. Empezaremos con la fórmula general y después sustituyendo los valores. *Para i = 1
DB + (a1)
j = i + 1 = 2
DB + (a1)(A2)
//Aumenta j j = 3
DB + (a1)(A2*A3*lp)
//Aumenta i i=2
DB + (a1*A2*A3*lp) + (a2)
j = i + 1 = 3
DB + (a1*A2*A3*lp) + (a2)(A3*lp)
//Aumenta i i=3
DB + (a1*A2*A3*lp) + (a2*A3*lp) + (a3*lp)
Entonces quedaría: Loc[Arr(a1, a2, a3)] = DB + (a1*A2*A3*lp) + (a2*A3*lp) + (a3*lp) Sustituyendo: Loc[Arr(4, 2, 1)] = 1000 + (4*2*3*2) + (2*2*2) + (1*2) = 1058