Algoritmo: ¿Cómo debo comenzar el estudio de algoritmos?

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.

¿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.

  1. 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.
  2. 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.
  3. 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

En primer lugar, es bueno estar de vuelta. En segundo lugar volviendo a su pregunta.

Los algoritmos son solo una forma de resolver preguntas, matemáticas o lógicas. El único concepto para aprender sobre ellos es cómo hacerlos más eficientes en términos de gastos de espacio-tiempo.

# En primer lugar, debe tener el conocimiento de todos los conceptos básicos como estructuras de datos, condicionales, bucles, manipulación de bits, etc.

# En segundo lugar, necesita algunas fuentes para recopilar problemas de algoritmos e intente resolverlos por su cuenta. Al principio tomará algún tiempo resolver los problemas, pero con un poco de práctica conseguirá que su cerebro lógico funcione.

# Trata de acostumbrarte a resolver al menos dos o tres preguntas a diario.

# Después de sentir que puede, por cualquier método, resolver problemas y continuar con el pensamiento lógico, comience a aprender formas de hacer que sus algoritmos sean más eficientes.

Para aprender todo lo que hay sobre algoritmos, introducción a algoritmos por clrs . Es una lectura obligada. Se considera como la Biblia para los algoritmos, si desea comprar, compre la última edición, que creo que es la tercera edición. O puede descargar la versión PDF muy rara que es casi imposible de encontrar en la red (psst … Obtuve la versión PDF).

Otro libro de lectura obligada está despejando la entrevista de codificación . Por Gayle Laakmann McDowell. Consiste en todo lo relacionado con descifrar la entrevista de codificación en gigantes de software como Google, Amazon, etc. También cubre algunas preguntas interesantes sobre cada tema.
También puede obtener preguntas de sitios web como hackerearth, hackerrank, code chef, etc. O puede encontrar algunas fuentes propias.

Todo lo mejor.

La forma en que lo hice (aún aprendiendo) es que compré Introducción a los algoritmos, 3a edición, por Thomas Cormen y otros 3 autores (el libro se conoce comúnmente como CLRS, debido a los nombres de los cuatro autores). Confía en mí, el libro es simplemente excelente. Los ejercicios pueden ser difíciles, pero no te preocupes por eso. Cuando no entiendo un concepto, uso el curso en MIT OpenCourseware para entenderlo.

Me está funcionando bien 🙂

Editar: dado que usted dice que es un principiante completo, le sugiero que pase un poco de tiempo familiarizándose con conceptos como punteros. Estos serán ampliamente utilizados a través de algoritmos. Además, probablemente debería tener alguna idea de estructuras de datos simples como listas vinculadas, pilas y colas.

Usted comienza su viaje como un niño y toma clases según sea necesario para aprender sus idiomas. No tiene suficiente conocimiento de sí mismo o del campo para hacer juicios informados sobre el orden de aprendizaje, ni las recomendaciones de los maestros de campo lo posicionan exactamente. Puede realizar este plan de varios años para fundaciones en su objetivo y ajustarlo a medida que aprende. Es el edificio que desea construir en analogía directa con el conocimiento y la habilidad de la programación con la que sueña, ya que cuanto más fuerte sea la base, por supuesto, mayor será su estructura. Por lo tanto, tómese el tiempo para hacer las cosas bien al principio y acumule el tiempo acumulado para convertirse en un maestro.

More Interesting

¿Qué estructuras de datos usa MS Word para almacenar elementos del documento en la memoria?

¿Cuáles son algunos de sus mejores algoritmos de C ++ o C que está orgulloso de haber escrito?

¿Cuál es una manera simple de implementar la paginación en una matriz en Javascript?

¿Cómo analizar la complejidad de caso promedio de un algoritmo? ¿Hay alguna fuente para aprenderlo paso a paso de lo básico?

Dadas las coordenadas de 3 puntos, cómo encontrar el centro del círculo formado por estos puntos con alta precisión. Para lograr una alta precisión, debe haber algún proceso de división. ¿Hay alguna forma de hacerlo?

¿Cómo explica la localidad de caché el hecho de que la ordenación rápida suele ser más rápida que la ordenación por fusión?

¿Cuál crees que es el algoritmo de aprendizaje automático más inteligente?

Cómo hacer para recolectar datos de entrenamiento para un algoritmo de aprendizaje automático

¿Qué significa si un futuro programador apesta u odia los algoritmos de aprendizaje y las estructuras de datos?

¿Cuál es el tipo de algoritmo de programación utilizado por WhatsApp?

Si hay una matriz de 101 números que consiste en números del 1 al 100 con el número repetido, ¿cómo encuentra el número repetido en el número mínimo de iteraciones (en el programa C)?

¿Qué es el algoritmo Google Panda?

¿El uso de algoritmos en una clave de contraseña típica de 256 bits que siempre está cambiando pero que aún se muestra al usuario (como en un teléfono, por ejemplo) para crear código requeriría supercomputadoras más rápidas disponibles para superarlo?

Cómo realizar una operación de revolución usando un treap

¿Es mejor representar aristas en un gráfico que sale de un vértice como miembros de una matriz dinámica o una lista vinculada?