¿Por qué importan las estructuras de datos?
La palabra datos sirve para definir todo tipo de información que usamos al programar. Números, caracteres, cadenas de caracteres etc. Una estructura de datos no es más que una manera de agrupar estos.
Agrupamos datos porque están relacionados de alguna forma, igual que en el mundo real. Probablemente tengas un cajón para calcetines y otro para camisas.
Existen distintas formas de agrupar datos(array, set, stack etc.). Esto se debe a que no existe una forma suprema de agrupar datos para gobernarlos a todos. Las necesidades de un programa y su manera de manejar la información no serán las mismas que la de otro.
Tomemos como ejemplo el funcionamiento de un array que es una de las estructuras de datos más conocidas. Supongamos que tuviéramos una app para manejar listas de supermercados y que usáramos un array para almacenar la lista.
Los array tienen índices numéricos para identificar los elementos que contienen. En la mayoría de lenguajes de programación el primer elemento se posiciona en el índice cero. En nuestro ejemplo este primer elemento sería la cadena de caracteres ‘arroz’.
¿Cómo accede la computadora a esta información cuando alguien quiere su lista de supermercado? Podemos imaginar la memoria de una computadora como una cuadrícula gigante. Algunos espacios de la cuadrícula están vacíos y otros contienen datos.
Cada una de estas celdas tiene una dirección específica igual que los edificios en el mundo físico(Calle Enrique Segoviano #123). Solo que las direcciones en memoria están representadas por valores numéricos que van incrementando.
Cuando se crea el array que contiene la lista de supermercado la computadora toma una serie de direcciones consecutivas y almacena ahí la información:
La computadora puede acceder a cualquier dirección en memoria con solo un paso. Sería como manejar a un lugar físico, si tienes la dirección exacta no hay necesidad de ir a otros lugares antes de llegar a la Calle Enrique Segoviano #123.
Entonces si en tú código intentas acceder al índice 0 la operación tomaría solo un paso ya que la computadora sabe la dirección exacta de este elemento.:
Dejemos de lado la lista de supermercado e imaginemos que eres un profesional de la salud. Imaginemos que cuentas con un gran expertise en programación y necesitas hacer una lista de órganos vitales porque … porque sí.
Cuando declaramos el array vitalOrgans, en memoria se selecciona una serie de espacios consecutivos donde se almacena nuestra información.
Existen operaciones básicas que se podrían hacer sobre esta estructura. Leer, buscar, insertar y borrar información. La velocidad de una computadora para realizar estas operaciones puede ser diferente dependiendo de la estructura de datos que utilicemos.
Con velocidad me refiero a la cantidad de pasos para terminar una instrucción. No podemos utilizar tiempo para determinar velocidad porque esta es diferente dependiendo de qué computadora ejecute el programa. ¿Cuántos pasos se requieren para llegar a tu “corazón”?(perdón, mal chiste).
Entonces, está claro que un array es muy veloz cuando se trata de leer la información que contiene(1 paso). ¿Qué tan rápido es para insertar información nueva? Si queremos insertar al final del array sólo requerimos un paso.
Como ya tenemos la dirección del último espacio en memoria solo es cuestión de ir a la celda siguiente e insertar el dato.
Si quisiéramos insertar en medio o al principio no sería tan sencillo. ¿Por qué? Porque esas posiciones del array ya están ocupadas. Si quieres insertar información ahí la computadora necesitará realizar algunas operaciones.
Tomemos de nuevo vitalOrgans antes de que insertar “riñón”:
Para no complicarnos la vida vamos a asumir que quieres insertar “riñón” en el medio que es el índice 1 del array, donde se encuentra “cerebro”.
Necesitamos mover “cerebro” a la derecha pero ese espacio está ocupado por el valor “pulmón” entonces también tendremos que moverlo. Empecemos:
Mover “pulmón” a la derecha.
Ahora podemos mover “cerebro” a la derecha.
Por último insertamos “riñón”en el índice 1.
Está operación necesitó tres pasos para concretarse. Si hubiéramos insertado “riñón” en el lugar de “corazón” esta operación habría sido de 4 pasos. Ahora imagina que el array fuera de 100 elementos y tuvieras que insertar algo en el índice 0. El array no es muy eficiente en escenarios como este.
Esto no quiere decir que los array sean malas estructuras de datos. Recuerda que leer el valor de cualquier índice del array es una operación de un solo paso. Existen muchas estructuras de datos a tu disposición. Todas con distintos superpoderes que puedes utilizar según lo que necesites hacer.
Si tienes poco tiempo programando te recomiendo el libro “A common-sense guide to data structures and algorithms”. Me despido esperando que esta información te haya sido útil.