Muchos programadores jóvenes recorren la web tratando de encontrar respuestas a esta pregunta: ¿Cómo estudiar la estructura de Algoritmo y Datos? Ciertamente, un buen lugar para comenzar … Pero creo que una pregunta más relevante sería esta: ¿Qué son los algoritmos y las estructuras de datos, y por qué debería estudiarlos?
Algoritmo + Estructura de datos = Programa
La programación se trata de estructuras de datos y algoritmos.
- Cómo insertar un valor al final de una lista vinculada
- ¿Cuál es el algoritmo hash más popular para almacenar contraseñas?
- Cómo crear un sistema de clasificación que dependa de tres variables (nivel, resultado y tiempo) cuanto más altas sean las dos primeras, mejor, mientras que por un tiempo, un valor menor es mejor
- ¿Hay algún número cuyo producto y suma sea 121?
- ¿En qué paso de la prueba del algoritmo de Dijkstra utilizamos el hecho crucial de que los bordes no son negativos?
¿Qué es un algoritmo?
Wikipedia dice que “un algoritmo es un conjunto de operaciones paso a paso autónomo a realizar. Los algoritmos realizan las tareas de cálculo, procesamiento de datos y / o razonamiento automatizado “.
No hay necesidad de entrar en pánico al mirar estas palabras rígidas juntas. Tengo algunos ejemplos para ayudarte a entender. Y fácilmente también.
Tomemos un ejemplo simple.
Cuando estaba en su segundo grado, aprendió el algoritmo para la suma de dos números. Tal vez su maestro no lo hubiera llamado algoritmo, pero aprendió reglas definidas para transformar la entrada, es decir, dos números, en la salida, que es la suma. Se aprenden algunos algoritmos como la aritmética que acabas de ver. Algunos necesitan instrucciones escritas, digamos una receta para cocinar una hamburguesa. Y algunos otros, puede averiguar como buscar una dirección en un directorio.
Echemos otro vistazo a diferentes algoritmos.
Tiene una hoja de ruta y necesita encontrar el camino más corto desde el origen hasta el destino. Utiliza el algoritmo de “ruta más corta”. ( Puede usar Google para leer más sobre el algoritmo de Dijkstra ) .
¿Qué sucede si necesita ordenar una gran cantidad de datos? Puede usar cualquiera de los diversos algoritmos de clasificación.
Cuando se enfrenta a un gran problema, a menudo lo divide en partes, es decir, lo deconstruye y luego trabaja en él. Ese es un algoritmo codicioso para ti. Aquí, eliges lo que parece ser la opción más prometedora en ese momento. En estos casos, a sabiendas o sin saberlo usaste tu sentido común para encontrar la solución más optimizada mediante un método que aprendiste durante un período de tiempo. A diferencia de un programa que es un método específico, un algoritmo es un método general.
Aquí hay otro uso de la vida real de un algoritmo. (Sé que ya tienes la idea. Pero no puedo evitarlo. Simplemente me parece muy emocionante).
Supongamos que sabes que Clark Kent es de hecho Superman. También sabes que él estudia en tu universidad. Necesitas encontrarlo.
Puede usar cualquiera de los siguientes para hacer esto.
- Puede usar el método de fuerza bruta donde visita a cada persona en el campus y pregunta si alguno de ellos es Clark Kent.
- Miras los datos de la universidad (que alguien ha recopilado usando el algoritmo anterior) y miras cada nombre en el directorio hasta que encuentras el nombre y la dirección correctos.
- Encuentra una lista de datos ordenados o un directorio, lo divide en dos partes y busca el nombre en la parte que probablemente contenga el nombre y obtenga la información de contacto.
Mientras que el primer método te llevó un período de tiempo indefinido, el segundo estuvo mejor organizado y tomó menos tiempo. El tercer método apenas tomó tiempo. Fue bastante fácil encontrar a Clark Kent y decirle que sabes que es Superman.
¿Cómo se desarrollan los algoritmos?
Entonces, cuando crea un algoritmo, las siguientes son las preguntas que su algoritmo debe responder:
- ¿Es útil mi algoritmo y resuelve el propósito?
- ¿Utilizará los recursos de manera eficiente?
La gente aprende observando, al igual que los programadores. Aprendemos mirando la solución de otro o resolviendo el problema nosotros mismos. A través de la experiencia, encontramos un patrón definido para resolver cualquier problema en particular. Las personas se dan cuenta de que el proceso para resolver tareas similares es siempre el mismo. Y se acepta el que sea más eficiente y óptimo. Un conjunto de operaciones definidas por un procedimiento paso a paso para llegar a la mejor solución se denomina algoritmo.
Al estar expuestos a varias técnicas y algoritmos de resolución de problemas, tendemos a identificar el patrón algorítmico de resolución de un problema y percibir la mejor solución, o usamos un algoritmo previamente conocido para resolverlo, utilizando así nuestros recursos de manera eficiente.
Finalmente, un algoritmo le dice cómo operar y resolver un problema.
Siempre es importante entender cómo un algoritmo resuelve un problema. De lo contrario, nunca se puede ver desde una perspectiva más amplia. Todos los algoritmos no están destinados a todos los datos. Es decir, los datos para un “algoritmo de árbol” pueden ser diferentes de los de un “algoritmo gráfico”.
Para asegurarse de que un programador encuentre los datos correctos, debe comprender qué es la estructura de datos.
¿Qué es la estructura de datos y por qué estudiarla?
Una computadora es un conjunto de reglas lógicas. Estas reglas pueden denominarse algoritmo, pero las reglas solas son inútiles hasta que tengan datos a los que puedan aplicarse.
La estructura de datos es una forma de almacenar y organizar datos en la memoria para que puedan recuperarse y utilizarse de manera eficiente cuando sea necesario. Se usan varias estructuras de datos en diferentes aplicaciones y algunas están diseñadas para usarse solo para una tarea específica.
Para gestionar todos los datos y abordar la complejidad de un problema, los científicos informáticos utilizan la técnica del Tipo de datos abstractos (ADT) para ver la imagen más grande en lugar de solo la salida. Al crear modelos abstractos de datos, los científicos pueden usar formas mejores y más eficientes para resolver un problema en particular, en lugar de preocuparse por información irrelevante.
ADT es un modelo matemático donde los datos se ordenan en función de su comportamiento por parte del usuario. El modelo ADT no tiene en cuenta la implementación de esta información o la eventual construcción. Al proporcionar la abstracción, encapsulamos los datos que luego se procesan para un mejor uso.
Las estructuras de datos que tienen operaciones definidas para implementarse son ADT.
Elegir el conjunto correcto de estructuras de datos de cualquier base de datos para implementar un algoritmo es un componente clave para resolver un problema, sin el cual la información será incompleta o irracional.
Sin el conocimiento de la estructura de datos, no podrá organizar sus datos en un formato adecuado y eficiente. Sin el conocimiento de la estructura de datos, estará confundido acerca de qué estructura de datos usar, como si usar una matriz o una lista vinculada para un problema dado. La comprensión de estructuras de datos y algoritmos a veces se siente innecesaria cuando usa las funciones de la biblioteca. Pero cuando comienzas a lidiar con nuevos problemas, se vuelve imperativo.
Si lees este increíble artículo, puedes aprender a codificar mediante programación competitiva. Le explica por qué necesita aprender conceptos de estructura de datos y algoritmo para obtener mejores resultados y comprender el problema rápidamente.
También puede leer cómo los algoritmos se están apoderando de nuestro mundo y saber lo importante que es comprenderlos y aprenderlos.
Solo para reiterar, no se puede hacer una casa simplemente colocando un ladrillo sobre otro; necesita comprender un problema, su solución proyectada y una percepción de cómo va a resolverlo.
Puede leer otros blogs sobre algoritmos aquí: Algorithms Archives | Blog de HackerEarth