¿Cómo se almacena una matriz 2D en la memoria?¿Cómo se almacena una matriz 2D dinámica en la memoria?
Pensé en el siguiente enfoque, donde las filas se almacenan como bloques contiguos de memoria.
| _ __ _ __ _ __ || _ __ _ __ _ __ | __ _ __ __ _ | _ __ _ __ _ _ | ... | _ __ _ __ _ __ |
Los elementos son accesados como (i, j) -> n * i + j, donde n es la dimensión de la matriz (suponiendo que sea nxn).
Pero, ¿qué sucede si quiero agregar una nueva columna al mismo? Tendría que actualizar cada elemento (n + 1) th en cada fila y también cambiarlos a la derecha, pero eso es muy costoso desde el punto de vista computacional.
Otra opción sería copiar la matriz en una nueva ubicación y actualizar las filas con los elementos de la nueva columna sobre la marcha. Pero eso tampoco es demasiado eficiente si la matriz es grande.
Y, finalmente, la tercera opción que pensé es asignar una cantidad fija de memoria para cada fila y cuando agregue una nueva columna, no es necesario que cambie las filas a la derecha.
No puedo tener espacios en la memoria, por lo que todos los bloques deben estar contiguos.
No estoy pidiendo una implementación en C usando punteros y la memoria RAM real, solo tengo curiosidad acerca de un enfoque teórico de almacenar una matriz dinámica 2d en la memoria para que sea fácil agregar nuevas filas o columnas para ello.
¿Hay otros enfoques más eficaces?
¿Con qué tamaños está trabajando? estamos hablando de 10 elementos de 1.000.000 de elementos? –
Más como milions. – flowerpower