Matrices y arreglos multidimensionales
miércoles 19 de agosto · 13:00–14:15 · hace 3 días
GUÍA 19-08-26 Estructuras de Datos
CN122 · miércoles 19/08/2026 · 13:00-14:15 · Sesión 4
Matrices y arreglos multidimensionales
CÓMO SE GUARDA UNA MATRIZ
La memoria es lineal, así que una matriz bidimensional se aplana. C usa orden por renglones: primero todo el renglón 0, luego el 1, y así.
- Para m[F][C], el elemento m[i][j] está en el desplazamiento i·C + j.
- En orden por columnas —Fortran, MATLAB— sería j·F + i. Importa al interoperar entre lenguajes.
LOCALIDAD DE REFERENCIA
Recorrer por renglones es mucho más rápido que por columnas, aunque el número de operaciones sea idéntico. La razón es la caché: al leer m[i][j] el procesador trae toda una línea de caché, que contiene los siguientes elementos del renglón. Recorrer por columnas desperdicia cada línea traída.
Es la primera vez en el curso en que la disposición física de los datos, y no el algoritmo, determina el desempeño. No será la última.
DECLARACIÓN DINÁMICA
- Arreglo de apuntadores: int **m = malloc(F * sizeof(int*)); y luego cada renglón por separado. Permite renglones de distinta longitud, pero pierde la contigüidad.
- Bloque único: int *m = malloc(F * C * sizeof(int)); con acceso m[i*C + j]. Conserva la localidad y es lo que conviene para cálculo numérico.
MATRICES DISPERSAS
Si la mayoría de los elementos son cero, guardar F·C celdas desperdicia memoria. Se guardan solo los no nulos como tercias (renglón, columna, valor). Se ahorra espacio y se paga con acceso más lento: otra vez el intercambio entre tiempo y espacio.
PRÁCTICA
Suma y multiplicación de matrices; medir la diferencia de tiempo entre recorrido por renglones y por columnas con matrices de 1000×1000.
Nada anotado en esta sesión todavía.