Qué tal, recurro a ustedes debido a que estoy en medio de una tarea y a mi eso de las matemáticas no se me dan muy bien.
El problema en si es idear una formula para mapear la dirección de un elemento de un arreglo n-dimensional. Trataré de explicarme mejor:
Supongamos que en el lenguaje C declaro el siguiente arreglo: char arr[4][4]; esto nos denota un espacio de 16 bytes para guardar datos. Y en este caso hipotético el elemento [0][0] vive en la dirección 0, por lo que una representación grafica del arreglo y de este en memoria se vería como esto:

Ahora aquí lo importante sería cómo sabe la maquina en qué dirección de memoria vive el elemento [2][2] por ejemplo... Lo que vimos en clase es que C y cualquier otro lenguaje de programación tienen métodos para encontrar de manera rápida y eficiente la dirección de memoria donde vive un elemento determinado, el profesor le llamó mapeo.
Para este ejemplo de un arreglo de 2D nos sugirió la siguiente fórmula: \( \texttt{Loc}A(c,d) = \texttt{Direcci\'onBase} + (c*\texttt{colsize}+d)\cdot \texttt{Tama\~no del tipo de dato} \)
Tomando el ejemplo anterior para localizar [2][2] sería: \( \texttt{Loc}A(2,2) = 0 + (2 * 4 + 2) * 1 = 10 \) <-- Esa es la dirección donde vive [2][2] para este ejemplo hipotético.
Ahora el problema viene en idear una formula que permite calcular para n-dimensiones, el profesor nos indicó que llevaría una sumatoria y una multiplicatoria, después de pensar un rato y analizar los códigos que me enviaste y platicar con algunos compañeros llegué a está formula:
\( \texttt{Array}[n_1,n_2...n_d] = \texttt{Direcci\'onBase} + (\displaystyle\sum_{k=1}^d(\prod_{l=k+1}^d N_l)n_k) \cdot \texttt{Tama\~no del tipo de dato} \)
No sé... ¿qué opinan ustedes?