Sei sulla pagina 1di 4

 

Universidad de San Carlos de Guatemala 


Facultad de Ingeniería 
Escuela de Ciencias y Sistemas 
Estructura de Datos Sección A 
Catedrático: Ing. Jesús Guzmán 
Auxiliar: Ricardo Antonio Cutz Hernández 

Laboratorio: Clase 3 y 4 
APUNTES DE CLASE 

Matrices 
Una  matriz  es  una  estructura  de  datos  que  permite  organizar  la  información  en  forma  de  filas  y 
columnas.  Hasta  este  curso  las  matrices  que  han  utilizado  han  sido  estáticas,  esto  quiere  decir 
que sus dimensiones son ya definidas. 

Matriz Dispersa 
Es  una  estructura  de  datos  que  representa  una  matriz  con  la  característica  de  que  se  busca 
optimizar  la  memoria  utilizada  creando los espacios en la matriz que en realidad se necesitan. La 
implementación  de  esta  estructura  de  datos  es  mediante  listas  enlazadas.  Esta  estructura  de 
datos va creando los nodos y cabeceras conforme se va necesitando. 

 
 
 

Implementación 
La implementación del ejemplo en clase va a ser una matriz con coordenadas “x” y “y”, aunque la 
matriz bien se puede convertir en un cubo. Este ejemplo será la implementación basada en listas 
enlazadas y el lenguaje será Python. 

Clase Nodo: 

La  clase  nodo  de  la  matriz  en  este  caso  tendrá  cuatro  punteros:  ​siguiente,  anterior,  arriba  ​y 
abajo.    Estos  punteros  nos  ayudarán  a  movilizarnos  en  la  matriz  implementada.  Otros  datos 
adicionales que almacenaremos en el nodo es la coordenada “x” y coordenada “y”. 

Clase Matriz: 

En  la  clase  matriz  para  esta  implementación  inicializamos  un  nodo  que  nos  servirá  como  la  raíz 
de  las  cabeceras,  le  llamaremos  ​root​.  Esta  raíz  va  a  tener  las  cabeceras  de  las  columnas  que 
existen y la cabecera de filas que existen. 

Esta implementación es una sugerencia y no es la única forma de realizar una matriz dispersa 

 
 
 

Casos de Inserción 

Para  la  inserción  en  la  matriz  dispersa  existen  casos  de  inserción  que  se  deben  identificar  para 
saber los pasos que se deben de tomar: 

Caso 1: Fila y Columna No Existen 

El  primer  caso  de  inserción  se  da  cuando  se intenta insertar algún elemento en una coordenada 


que no existe en la matriz, entonces los pasos a seguir serían los siguientes: 

● Crear la cabecera de columna 


● Crear la cabecera de fila 
● Buscar  e  insertar  el  nuevo  nodo en la columna correcta (inserción ordenada en columnas 
basado en la coordenada x) 
● Buscar  e  insertar  el  nuevo  nodo en la columna correcta (inserción ordenada en columnas 
basado en la coordenada x) 

Caso 2: Columna no existe pero Fila Si 

Segundo  caso  de  inserción  en  donde no existe la columna especificada por la coordenada, pero 


si existe la fila. Los pasos a seguir son los siguientes: 

● Crear la cabecera de columna 


● Buscar  e  insertar  el  nuevo  nodo en la columna correcta (inserción ordenada en columnas 
basado en la coordenada x) 
● Buscar  e  insertar  el  nuevo  nodo en la columna correcta (inserción ordenada en columnas 
basado en la coordenada x) 

Caso 3: Columna existe pero Fila No 

Tercer  caso  de  inserción  en  la  matriz  que es como el contrario del caso 2, aunque los pasos son 


similares: 

● Crear la cabecera de fila 


● Buscar  e  insertar  el  nuevo  nodo en la columna correcta (inserción ordenada en columnas 
basado en la coordenada x) 
● Buscar  e  insertar  el  nuevo  nodo en la columna correcta (inserción ordenada en columnas 
basado en la coordenada x) 

Caso 4: Columna y Fila existen 

Ya que ambas existen lo único que queda es la inserción ordenada tanto en ​X ​y ​Y​.  

Implementación en Laboratorio 
 
 

Indexación de Arreglos Multidimensionales 


En  lenguajes  de  programación  se  manejan  lo  que  son  arreglos  multidimensionales  pero a pesar 
de  que  en  los  lenguajes  se  manejan  con  N  dimensiones,  en  memoria,  la  información  es 
almacenada  de  forma  lineal.  A  continuación  veremos una estrategia para linealizar un arreglo de 
N  dimensiones  utilizando:  ​Dimensiones,  Coordenada  y  El  Tamaño  de  Cada  Dimensión. ​Lo que 
buscamos es que a partir de la información anterior poder saber el índice lineal del elemento que 
se busca según la coordenada. 

Fórmula 
Esta  fórmula  es  basada  en  lo  que  se  enseña  en  el  curso de Compiladores 2 al momento de que 
enseñan  lenguaje  de  tres  direcciones (En estructura de datos esto debería de quedar claro), y es 
una estrategia para linealizar los arreglos de N dimensiones. 

I n = Coordenada n  

N n = Dimensión n  

D = # de Dimensiones  

I R = Índice Real Buscado  

● Para  D1 = 1   :  I R = I 0   Esto  quiere  decir  que en una sola dimensión el índice real es el 


mismo que la coordenada I 0  
● Para  D2 = 2 :  I R = (I0)(N 1) + I 1   Ahora  podemos  ver  que  el  índice  real  depende  de  el 
tamaño de la dimensión N1 y la coordenada I1 
● Para  D3 = 3 :   I R = [(I0)(N 1) + I 1]N 2 + I2  Ahora se puede ver mas claro el patrón para 
poder saber la fórmula para N dimensiones. 
● Encontrando  el  patrón  podemos  observar  que  para  D4 = 4 :  (D3)N 3 + I 3 ,  podemos  ver 
que depende del valor anterior calculado. 

Para  visualizar  ejemplos  prácticos  y  que  esto  quede más claro pueden dirigirse a ver el video de 


la explicación: 

Laboratorio 4