Estructuras de datos 101: matrices: una introducción visual para principiantes

Conozca las estructuras de datos que utiliza todos los días.

? ¡Bienvenido! Comencemos con un contexto vital. Déjame preguntarte esto:

✅ ¿Escuchas música en tu teléfono inteligente?

✅ ¿Mantiene una lista de contactos en su teléfono?

✅ ¿Alguna vez has visto una tabla de clasificación durante una competencia?

Si su respuesta es “sí” a cualquiera de estas preguntas, entonces es casi seguro que ha usado matrices y ni siquiera lo sabía. ? Las matrices son estructuras de datos muy poderosas que almacenan listas de elementos. Tienen un sinfín de aplicaciones. Son muy importantes en el mundo de la informática.

En este artículo, aprenderá los pros y los contras de las matrices, su estructura, operaciones y casos de uso.

¡Vamos a empezar! ?

? Profundización en la estructura básica de las matrices

Para comprender cómo funcionan, es muy útil visualizar la memoria de su computadora como una cuadrícula, como la que se muestra a continuación. Cada información se almacena en uno de esos pequeños elementos (cuadrados) que forman la cuadrícula.

Las matrices aprovechan esta estructura de "cuadrícula" para almacenar listas de información relacionada en ubicaciones de memoria adyacentes para garantizar una eficiencia extrema para encontrar esos valores. ????

Puedes pensar en matrices como esta:

Sus elementos están uno al lado del otro en la memoria. Si necesita acceder a más de uno de ellos, el proceso está extremadamente optimizado porque su computadora ya sabe dónde se encuentra el valor.

Impresionante, ¿verdad? ¡Aprendamos cómo funciona esto detrás de escena! ?

? Clasificación

Las matrices se clasifican como estructuras de datos homogéneas porquealmacenar elementos del mismo tipo .

Pueden almacenar números, cadenas, valores booleanos (verdadero y falso), caracteres, objetos, etc. Pero una vez que defina el tipo de valores que almacenará su matriz, todos sus elementos deben ser del mismo tipo. No puede "mezclar" diferentes tipos de datos.

? Valores de lectura: ¡comienza la magia!

El asombroso poder de las matrices proviene de su eficiencia para acceder a valores . Esto se consigue gracias a su estructura en forma de rejilla. Echemos un vistazo a esto con más detalle.

Cuando crea una matriz, usted:

- Asignarlo a una variable. ?

- Definir el tipo de elementos que almacenará. ?

- Definir su tamaño (el número máximo de elementos). ?

? Nota: El nombre que le asigne a esta variable es muy importante porque lo usará más adelante en su código para acceder a los valores y modificar la matriz.

Pero, ¿cómo puede decirle a la computadora a qué valor particular le gustaría acceder? ¡Aquí es donde los índices toman un papel vital!

1️⃣ Índices

Utiliza lo que se llama un "índice" ("índices" en plural) para acceder a un valor en una matriz. Este es un número que se refiere a la ubicación donde se almacena el valor.

Como puede ver en el diagrama siguiente, se hace referencia al primer elemento de la matriz mediante el índice 0. A medida que se desplaza hacia la derecha, el índice aumenta en uno por cada espacio en la memoria.

? Nota: Sé que al principio parece extraño comenzar a contar desde 0 en lugar de 1, pero esto se llama Numeración basada en cero. Es muy común en la informática.

La sintaxis general para acceder a un elemento es:[]

Por ejemplo:

Si su matriz está almacenada en la variable myArrayy desea acceder al primer elemento (en el índice 0), usaríamyArray[0]

2️⃣ Memoria

Ahora que sabe cómo acceder a los valores, veamos cómo se almacenan las matrices en la memoria de su computadora. Cuando define el tamaño de la matriz, todo ese espacio en la memoria se "reserva" a partir de ese momento para valores futuros que desee insertar.

? Nota: Si no llena la matriz con valores, ese espacio se mantendrá reservado y vacío hasta que lo haga.

Por ejemplo:

Digamos que define una matriz de tamaño 5 pero solo inserta un valor. Todo ese espacio restante estará vacío y "reservado" en la memoria, a la espera de futuras asignaciones.

Esto es clave porque las matrices son extremadamente eficientes para acceder a los valores porque todos los elementos se almacenan en espacios contiguos en la memoria. De esta manera, la computadora sabe exactamente dónde buscar para encontrar la información solicitada.

Pero ... hay una desventaja ? porque no es eficiente en la memoria . Está reservando memoria para futuras operaciones que pueden no ocurrir. Esta es la razón por la que se recomiendan las matrices en situaciones en las que se sabe de antemano cuántos elementos se van a almacenar.

? Operaciones - ¡Detrás de escena!

Ahora que sabe qué son las matrices cuando se utilizan y cómo almacenan elementos, profundizaremos en sus operaciones, como la inserción y la eliminación.

1️⃣ Inserción - ¡Bienvenido!

Digamos que tenemos una matriz de tamaño 6 y todavía hay un espacio vacío. Queremos insertar un elemento "e" al principio de la matriz (índice 0), pero este lugar ya lo ocupa el elemento "a". ¿Qué debemos hacer?

Para insertar en matrices , movemos todos los elementos ubicados a la derecha del sitio de inserción, un índice a la derecha. El elemento "a" ahora estará en el índice 1, el elemento "b" estará en el índice 2 y así sucesivamente ...

? Nota: Deberá crear una variable para realizar un seguimiento del último índice que contiene elementos. En el diagrama anterior, la matriz se llena hasta el índice 4 antes de la inserción. De esta manera, puede determinar si la matriz está llena y qué índice debe usar para insertar un elemento al final.

Después de hacer esto, nuestro elemento se inserta correctamente. ?

⚠️ ¡Espera un minuto! ¿Qué sucede si la matriz está llena?

¿Qué crees que pasará si la matriz está llena e intentas insertar un elemento? ?

En este caso, debe crear una nueva matriz más grande y copiar manualmente todos los elementos en esta nueva matriz. Esta operación es muy costosa y requiere mucho tiempo. ¡Imagínese lo que sucedería si tuviera una matriz con millones de elementos! Eso podría tardar mucho en completarse. ⏳

? Nota: La única excepción a esta regla, cuando la inserción es muy rápida, es cuando inserta un elemento al final de la matriz (en el índice ubicado a la derecha del último elemento) y todavía hay espacio disponible. Esto se hace en tiempo constante O (1).

2️⃣ Supresión— ¡Adiós, adiós!

Ahora digamos que desea eliminar un elemento de la matriz.

Para mantener la eficiencia del acceso aleatorio (pudiendo acceder a la matriz a través de un índice extremadamente rápido) los elementos deben almacenarse en espacios contiguos de memoria. No puede simplemente eliminar el elemento y dejar ese espacio vacío.

Debe mover los elementos que vienen después del elemento que desea eliminar un índice a la izquierda.

Y finalmente, tienes esta matriz resultante ?. Como puede ver, "b" se ha eliminado correctamente.

? Nota: La eliminación es muy eficaz cuando elimina el último elemento. Dado que necesita crear una variable para realizar un seguimiento del último índice que contiene elementos (en el diagrama anterior, índice 3), puede eliminar directamente ese elemento utilizando el índice.

3️⃣ Encontrar un elemento

Tiene tres opciones para encontrar un elemento en una matriz:

  • Si sabe dónde se encuentra , use el índice.
  • Si no sabe dónde se encuentra y sus datos están ordenados , puede utilizar algoritmos para optimizar su búsqueda, como la búsqueda binaria.
  • Si no sabe dónde está ubicado y sus datos no están ordenados , deberá buscar en cada elemento de la matriz y verificar si el elemento actual es el elemento que está buscando (consulte la secuencia de diagramas a continuación).

? En resumen ...

  • Las matrices son estructuras de datos extremadamente poderosas que almacenan elementos del mismo tipo. El tipo de elementos y el tamaño de la matriz son fijos y definidos cuando la crea.
  • La memoria se asigna inmediatamente después de que se crea la matriz y está vacía hasta que asigna los valores.
  • Sus elementos están ubicados en ubicaciones contiguas en la memoria , por lo que se puede acceder a ellos de manera muy eficiente (acceso aleatorio, O (1) = tiempo constante) mediante índices .
  • Los índices comienzan en 0 , no en 1 como estamos acostumbrados.
  • Insertar elementos al principio o en el medio de la matriz implica mover elementos hacia la derecha. Si la matriz está llena, se crea una nueva matriz más grande (que no es muy eficiente). Insertar al final de la matriz es muy eficiente, tiempo constante O (1).
  • Eliminar elementos del principio o del medio del arreglo implica mover todos los elementos hacia la izquierda para evitar dejar un espacio vacío en la memoria. Esto garantiza que los elementos se almacenen en espacios contiguos en la memoria. Eliminar al final de la matriz es muy eficiente porque solo elimina el último elemento.
  • Para encontrar un elemento , debe verificar toda la matriz hasta encontrarlo. Si los datos están ordenados, puede utilizar algoritmos como la búsqueda binaria para optimizar el proceso.
“Aprende del ayer, vive el hoy, espera el mañana. Lo importante es no dejar de cuestionar."

- Albert Einstein

? ¡Gracias!

Realmente espero que les haya gustado mi artículo. ❤️

Sígueme en Twitter para encontrar más artículos como este. ?