¿Cuáles son las mejores y más eficientes formas de aprender algoritmos para principiantes?

Puede consultar este sitio web IDeserve: plataforma de aprendizaje única para mejorar las habilidades algorítmicas.

Lo que me pareció interesante de este sitio web es que muchos de los problemas se explican con la ayuda de videos que se presentan bien con ejemplos y animaciones. Esto hace que la comprensión de los algoritmos sea muy fácil y rápida.

Además, todos los problemas se explican con la ayuda de la Visualización de algoritmos en la que se puede ejecutar el código en una determinada prueba de datos.

Esto me ha ayudado a entender muchos conceptos algorítmicos muy fácilmente. Espero que esto le ayude también.

Puede hacer que la tarea para aprender algoritmos sea más interesante si establece un objetivo para usted. Por ejemplo,

Establezca una meta de completar x preguntas de números en un día y complete la meta que se ha fijado para usted.

Puede planear completar la siguiente lista de preguntas que comienza desde un nivel fácil a un nivel intermedio a uno difícil.

Listas enlazadas y problemas de pila:

Fusionar dos listas enlazadas ordenadas

Invertir una lista enlazada – Recursiva

Invertir una lista enlazada – Iterativa

Invierta todos los nodos k alternativos de una lista enlazada

Encuentre el nth Node desde el final de una lista enlazada

Suma de dos listas vinculadas usando pilas

Suma de dos listas vinculadas utilizando Recursión | Serie 1

Implementación de caché LRU

Detecta un bucle en una lista enlazada y encuentra el nodo donde comienza el bucle.

Convertir una lista ordenada de enlace doble en un árbol de búsqueda binaria equilibrada

Convertir un árbol binario en una lista doblemente enlazada

Encuentra la intersección de dos listas vinculadas

Encuentre la intersección de dos listas vinculadas: O (m + n) Complejidad de tiempo y O (1) Complejidad de espacio

Pila Mínima O (1)

Problemas con las cuerdas:

Invertir palabras en una cadena

Eliminar espacios de una cadena dada

Subcadena más larga con caracteres que no se repiten

Compruebe paréntesis equilibrados en una cadena

Evaluación de Expresión Postfix

Agrupe todos los anagramas de una determinada serie de cadenas | Serie 1

Primer carácter no repetitivo en una cadena.

Encuentra todas las permutaciones de una cadena

Problema de ruptura de palabras

Subconjunto del problema de suma

Palíndromo más corto

Palindrome Min Cut

Número mínimo de intentos para llegar desde la palabra de origen a la palabra de destino

La subcadena palindrómica más larga

Algoritmo de Manacher

Secuencia palindrómica más larga

La subcadena común más larga

La subsecuencia común más larga

Para imprimir el número máximo de Como usando cuatro claves dadas.

Encontrar secuencias de ADN repetidas de 10 letras.

Encuentra la distancia de edición mínima entre dos cadenas dadas

Distintas cadenas binarias de longitud n sin 1s consecutivos

El cálculo de matriz de sufijo de prefijo más largo en el algoritmo de coincidencia de patrones KMP.

El algoritmo de Knuth Morris Pratt para la comparación de patrones.

Arreglos de problemas:

Algoritmo de clasificación – Selección de selección

Algoritmo de clasificación – Ordenación por inserción

Algoritmo de clasificación – Bubble Sort

Fusionar clasificación

Clasificación de panqueques

Algoritmo de clasificación – Ordenación de pila

Girar una matriz

Número de Fibonacci

Combina dos matrices ordenadas sin usar espacio adicional

Suma máxima de subarreglos

Subarreglo promedio máximo de tamaño k

Subcadena más larga con caracteres que no se repiten

Líderes en una matriz

Encontrar la longitud mínima de sub array con suma K

Búsqueda binaria en una matriz ordenada

Busca una matriz ordenada

Reorganizar los elementos en una matriz para poner los elementos positivos y negativos en orden alterno

Encuentra el siguiente número mayor usando los mismos dígitos

Siguiente elemento mayor en una matriz

Primer carácter no repetitivo en una cadena.

Encuentra el ‘n’ número más frecuente en la matriz

Encuentra el número que falta en la secuencia creciente

Encontrar duplicados en una matriz entera

Encuentra elementos comunes en ‘n’ arreglos ordenados

Encuentra un elemento pico en una matriz

Distribuir problema de chocolates

Contar las frecuencias de los elementos de la matriz en el rango de 1 a n

Encuentra todas las permutaciones de una cadena

Encuentra pivote en una matriz rotada ordenada

Encuentra un elemento en una matriz rotada ordenada

Encuentre el elemento en la matriz rotada clasificada sin encontrar pivote

Compra y venta de acciones | Parte 2

Compra y venta de acciones | Parte 1

Encuentra el índice de 0 para reemplazar para obtener la secuencia continua más larga de 1s

O (n) enfoque de tiempo para encontrar el índice de 0 para reemplazar y obtener la secuencia continua más larga de 1s

Atrapando el agua de lluvia entre torres

El problema del horizonte

Número mínimo de monedas para hacer cambio.

Encuentra la ruta de costo mínimo en una matriz

Encuentra la longitud de la subsecuencia creciente más larga en una matriz

Secuencia creciente más larga O (n logn)

Encuentra la longitud de la subsecuencia bitónica más larga en una matriz

Dada una matriz con todos los elementos distintos, encuentre la longitud de la sub-matriz más larga que tiene elementos (no en ningún orden en particular) que podrían formar una secuencia contigua

Encuentre una matriz de enteros correspondiente a la cadena que especifica las transiciones de aumento y disminución

Problema de la mina de oro

Encuentra la mediana de dos matrices ordenadas

Encuentra el elemento mayoritario en una matriz

0-1 Problema de mochila

Contar todas las decodificaciones posibles de una secuencia de dígitos dada

Encuentra el número total de formas de hacer cambios usando un conjunto de monedas dado

Encuentra sub-secuencia creciente de longitud tres con producto máximo

Encuentra sub-secuencia creciente de longitud tres con producto máximo | Enfoque optimizado

Establecer problema de partición | Recursion

Establecer problema de partición | Programación dinámica

Problemas de árboles y gráficas:

Previa pedido de un árbol binario

Recorrido posterior de un árbol binario

En orden de travesía de un árbol binario

Nivel de árbol binario Orden transversal

Recorrido de orden de nivel espiral de un árbol binario | Serie 1

Imprimir la vista derecha de un árbol binario

Imprima todos los nodos de un árbol binario que no tengan hermanos

Imprimir todos los caminos de la raíz a la hoja de un árbol binario

Profundidad mínima de un árbol binario

Imprimir la vista izquierda de un árbol binario

Encuentra la suma de todas las hojas izquierdas de un árbol binario.

Encuentra la profundidad del nodo de hoja impar más profundo

Compruebe si un árbol binario es un árbol binario completo o no

Compruebe si un árbol binario está completo o no

Compruebe si dos nodos son primos en un árbol binario

Compruebe si dos árboles binarios son idénticos

Compruebe si todos los nodos internos de BST tienen un solo hijo sin árbol de construcción

Convertir el árbol n-ary dado a su imagen de espejo

Convertir un árbol binario a su árbol espejo.

Imprimir vista superior de un árbol binario

Imprima la vista superior de un árbol binario utilizando el orden de nivel transversal

Imprimir vista inferior de un árbol binario

Imprima la vista inferior de un árbol binario utilizando el orden de nivel transversal

Eliminar los nodos del árbol de búsqueda binario que están fuera del rango dado

Eliminar todos los nodos que se encuentran en la ruta con una suma menor que k

Eliminar todos los medios nodos de un árbol binario dado

Imprimir árbol binario en orden vertical

Rellenar vecinos correctos para todos los nodos en un árbol binario

El ancestro común más bajo de dos nodos en un árbol de búsqueda binario

Sucesor en orden de un nodo en un árbol binario

Recupere un árbol de búsqueda binario si se intercambian las posiciones de dos nodos.

Encuentre el piso y el techo de un elemento a partir del conjunto de datos dado utilizando el árbol de búsqueda binario

Suma diagonal de un árbol binario.

Crear un árbol de búsqueda binario equilibrado a partir de una matriz ordenada

Convertir una lista ordenada de enlace doble en un árbol de búsqueda binaria equilibrada

Convertir un árbol binario en una lista doblemente enlazada

Compruebe si un árbol binario está equilibrado o no

Compruebe si un árbol binario es un árbol de búsqueda binario

Compruebe si dos árboles de búsqueda binarios son idénticos dadas sus representaciones de matriz | Conjunto 2

Compruebe si dos árboles de búsqueda binarios son idénticos dadas sus representaciones de matriz

Compruebe si un árbol binario es un subárbol de otro árbol binario en el tiempo O (n)

Compruebe si un árbol binario es un subárbol de otro árbol binario en el espacio O (1)

Árbol binario de búsqueda | Inserción y Búsqueda

Árbol binario de búsqueda | Supresión

Compruebe si un árbol binario dado es un árbol simétrico o no

Compruebe si el árbol n-ario dado es un árbol simétrico o no

Número total de posibles árboles binarios de búsqueda con las teclas ‘n’

Encuentra el tamaño de BST más grande en un árbol binario

El ancestro común más bajo de 2 nodos en un árbol binario

Encuentre la altura del árbol binario de su representación matriz matriz

Convertir árbol binario a árbol binario de búsqueda

Construye el árbol binario a partir de su representación matriz matriz

Construir árbol binario a partir de recorridos inorder y preorder

Construir árbol binario a partir de recorridos inorder y postorder

Árbol AVL | Lo esencial

Árbol AVL | Inserción

Árbol AVL | Supresión

Estructura de datos Trie | Insertar y buscar

Estructura de datos Trie | Borrar

Ajuste de patrones utilizando Trie

Coincidencia de prefijos más larga utilizando Trie

Dada una secuencia de palabras, agrupa todos los anagramas e imprímelos.

Serializar y Deserializar un árbol binario de búsqueda

Serializar y deserializar un árbol de búsqueda binario utilizando el recorrido de orden posterior

Amplia primera búsqueda en una gráfica.

Clasificación topológica de una gráfica acíclica dirigida.

Número mínimo de intentos para llegar desde la palabra de origen a la palabra de destino

Problema de círculos de amigos – Teoría de grafos

El algoritmo de ruta más corta de Dijkstra

Algoritmo de Bellman-Ford

Problemas de programación dinámica:

Número de Fibonacci

Suma máxima de subarreglos

Problema de ruptura de palabras

Número total de posibles árboles binarios de búsqueda con las teclas ‘n’

Subconjunto del problema de suma

Palíndromo más corto

Palindrome Min Cut

Número mínimo de intentos para llegar desde la palabra de origen a la palabra de destino

Número mínimo de monedas para hacer cambio.

Encuentra la ruta de costo mínimo en una matriz

La subcadena palindrómica más larga

Secuencia palindrómica más larga

Encuentra la longitud de la subsecuencia creciente más larga en una matriz

Secuencia creciente más larga O (n logn)

La subcadena común más larga

La subsecuencia común más larga

Encuentra la longitud de la subsecuencia bitónica más larga en una matriz

Para imprimir el número máximo de Como usando cuatro claves dadas.

Problema de la mina de oro

Encuentra la distancia de edición mínima entre dos cadenas dadas

0-1 Problema de mochila

Distintas cadenas binarias de longitud n sin 1s consecutivos

Contar todas las decodificaciones posibles de una secuencia de dígitos dada

Encuentra el número total de formas de hacer cambios usando un conjunto de monedas dado

Establecer problema de partición | Programación dinámica

Espero que esto te ayude también.

Publicaciones similares:

La respuesta de Ankita Duggal a ¿Cómo puedo aprender el algoritmo DS de forma más interesante y eficiente sin distraerme de otras cosas?

La respuesta de Ankita Duggal a Estoy luchando con mis algoritmos y clase de estructuras de datos. ¿Hay un recurso de tutoría en línea para esto?

La respuesta de Ankita Duggal a ¿Cómo empiezo a aprender o a fortalecer mi conocimiento de las estructuras de datos y los algoritmos?

Recopilar conocimiento es una cosa y la aplicación de ese conocimiento es otra. En primer lugar, intente resolver tantos problemas como pueda en jueces en línea como TopCoder, SPOJ, Codechef, Codeforces, etc.

¿Qué entendemos por resolver un problema?
Primero lea el problema 2 o 3 veces para entender lo que está tratando de transmitir. La mayoría de las veces nos apresuramos a resolver el problema y aquí es donde perdemos. Luego intente pensar en una solución al ver la explicación de los casos de prueba de muestra o de otra manera. Una vez que esté convencido con su solución, codifíquelo. Antes de enviar, intente ejecutar su código en algunos casos de esquina que pueda imaginar.
No renuncies a un problema antes de intentarlo. Si no puede resolverlo, lea el editorial y luego intente resolverlo nuevamente. Intenta incorporar la estrategia utilizada en la editorial y codifícala.
Los tutoriales de TopCoder están muy bien escritos y son fáciles de entender. También etiquetan preguntas relacionadas con el tema del tutorial. Lea un tutorial y resuelva esas preguntas antes de continuar con el siguiente.

Lo más importante de comenzar con algoritmos es generar el interés requerido en el tema.

Este interés solo se acumulará si usted comprende la aplicación y la importancia de la misma.

Disfrutarás el proceso para convertirte en un gran algoritmo si sigues este proceso:

  • Comprenda la importancia de los algoritmos e intente ponerse en contacto con personas que comparten el mismo entusiasmo por el tema. Preferiblemente, elija personas que también estén comenzando o que estén en la fase inicial de los algoritmos de aprendizaje.
  • Comienza a participar en el desafío de CodeChef que se realiza una vez al mes. Te encontrarás capaz de resolver 1–3 problemas suponiendo que tienes habilidades básicas de codificación. Recuerde que debe intentar los siguientes 2 problemas que no pudo resolver con éxito.
  • Lea los tutoriales para los problemas que no pudo resolver. Se publican cuando el concurso finaliza después de 10 días. Entiéndelos. Ve y lee el algoritmo / estructura de datos involucrados.
  • Sigue haciendo esto durante los primeros 6 meses. Te encontrarás haciendo mejor con cada concurso.
  • Felicidades. Ahora eres un algoritmo novato. Ahora es el momento de recoger un curso sobre DS y algoritmos. El curso IITD-NPTEL por el Prof. Naveen Garg es un buen punto para comenzar.
  • También necesitas resolver problemas y leer texto. Su enfoque principal debe ser la resolución de problemas y no solo la cobertura del texto. Introducción a los algoritmos (libro de Cormen, Leiserson, Rivest y Stein) es un buen punto para empezar.
  • Mientras tanto estás haciendo esto, sigue participando en largos desafíos.
  • Si eres capaz de resolver 4-5 problemas en un desafío largo, es hora de comenzar con concursos de tiempo corto. Codeforces, CodeChef, los desafíos cortos son los concursos con los que debes comenzar.
  • Recuerde, debe estar en contacto con las personas de ideas afines en todo momento. Esto mantendrá su interés vivo.
  • Una vez que tenga la confianza suficiente, comience con el software MIT para algoritmos de Erik Demaine. Estoy casi seguro de que te sentirás cómodo con eso.
  • Sigue explorando nuevos blogs y otras fuentes en línea mientras tanto.

¡Buena suerte!

Puede tomar no solo un curso, sino toda una Especialización en “Estructuras de datos y algoritmos” en Coursera, incluido el curso “Caja de herramientas algorítmicas” sobre técnicas de construcción de algoritmos generales, “Estructuras de datos”, “Algoritmos en gráficos”, “Algoritmos en cadenas” , “Algoritmos y complejidad avanzados” y un Proyecto Capstone para aplicar su conocimiento ya sea para reunir genomas de millones de piezas pequeñas o para encontrar los caminos más cortos en las redes de carreteras y redes sociales. Además de conferencias de video, pruebas y más de 70 tareas de programación, tiene referencias a libros y otros recursos.

Discutamos primero los diferentes enfoques para descubrir la mejor forma y la más eficiente (la forma óptima) de aprender Algoritmos para principiantes:

$ / Brute Force -> Para reducir la forma óptima, puedes probar todas las combinaciones posibles de aprendizaje y descubrir cuál es la mejor para ti, es decir, la forma óptima. La complejidad del tiempo para este enfoque sería muy alta, ya que tiene que descubrir cada combinación posible de aprendizaje.

Enfoque $ / codicioso -> Un enfoque codicioso sería hacer una elección optimizada localmente, es decir, elegir la forma que usted cree que sería la mejor para usted en ese momento y asumir que conduce a una elección optimizada globalmente (la forma óptima ) . Sin embargo, será difícil probar la corrección. Este enfoque tomaría un tiempo proporcional al número de optimizaciones que necesita para alcanzar la manera óptima. Por lo tanto, si decimos que hay que hacer optimizaciones `n`, entonces este enfoque tomaría O (n) tiempo.

$ / Dividir y conquistar -> Para aplicar un enfoque de dividir y conquistar necesitamos hacer una observación. (1) La forma óptima no es siempre la misma para todos. Teniendo eso en cuenta y teniendo en cuenta la forma óptima de un programador, puede dividir (trabajar en partes específicas de la forma dada) y conquistar (averiguar si esa parte funciona o no o necesita algunas modificaciones). Finalmente, fusiona los subproblemas para obtener su forma óptima. Este enfoque tomaría tiempo O (nlogn) independientemente de las modificaciones requeridas. La complejidad del espacio sería alta para este enfoque

$ / Programación dinámica -> Explore todas las diferentes formas de aprendizaje de algoritmos, tome la que mejor se adapte a usted. Este enfoque toma tiempo exponencial O (2 ^ n) donde `n` es el número de formas, por lo tanto, este enfoque tomaría tiempo pero le daría la manera óptima. Finalmente, un enfoque de DP para obtener la forma óptima sería simplemente aplicar lo que hizo, excepto que tiene que usar la memorización, es decir, recordar las optimizaciones (formas) que funcionaron para usted y las que no . Esto reduciría la complejidad del tiempo del tiempo exponencial al tiempo polinomial, alrededor de O (n ^ 2).

Entonces, ¿cuál sería la mejor y la forma más eficiente ?

Como se ha observado, la forma óptima no siempre es la misma para dos programadores. Por lo tanto, no puedo darte, tu forma óptima.

Pero, puedo darle el enfoque a través del cual la mayoría de los programadores encontraron su manera óptima. Creo que, la mayoría de nosotros, los programadores, utilizamos el enfoque codicioso combinado con la técnica de DP. Y confía en mí, funciona muy bien 🙂

Aunque sería difícil demostrar la exactitud al hacer una elección optimizada localmente 😛

PD Para obtener enlaces para conocer los algoritmos, puede obtenerlos de las otras respuestas a esta pregunta.

Gracias,

Arunava

El rey Ptolomeo I de Grecia quería aprender geometría del trabajo seminal de Euclides, los Elementos . Pero el rey estaba aburrido. Era demasiado duro, demasiado trabajo. El rey le preguntó a Euclides si había una manera más fácil. La famosa respuesta de Euclides se refleja a través de las edades: “Señor, no hay Royal Road to Geometry”.

Lo mismo se aplica a los algoritmos o cualquier otro tema que requiera comprensión y dominio. No hay atajos. Claro, puede haber cosas que te funcionen mejor que otras. Algunos aprenden mejor de las conferencias que leyendo, y otros aprenden mejor haciendo que leyendo. Pero estas son cosas que necesitas resolver por ti mismo. Nadie te puede decir cuál es la mejor manera de aprender algo.

Pruebe las recetas del borrador del libro de recetas de TopCoder (foros de TopCoder), están dirigidas especialmente a los principiantes y van acompañadas de implementaciones de muestra. También puedes ver Algo Tutorials (Tutoriales de algoritmos).

Si eres un principiante en programación, te sugiero que aprendas los conceptos básicos de cualquier lenguaje de programación y construyas algo sin aprender primero los algoritmos.

Hay mucho que puedes construir sin aprender realmente algoritmos.

Pero el conocimiento de los algoritmos es importante [1], y debe planificar el aprendizaje de estructuras de datos y algoritmos lo antes posible.

Hay un montón de recursos disponibles, y creo que lo mejor es ir a la vieja escuela con un buen libro de texto como CLRS [2].

Mantener la motivación es la parte más difícil.

Hacer un horario. 1 programa al día. O si estás ocupado, 1 a la semana. Incluso si puede hacer solo 1 por semana, ¡eso es 52 programas en un año!

Un punto importante es mantener los programas que está escribiendo de manera organizada.

Intente usar los programas que ha usado antes cuando resuelva problemas más difíciles. De esa manera, no solo terminará escribiendo código reutilizable, sino que también ahorrará tiempo al no tener que reconstruir las soluciones que ha creado anteriormente.

Notas al pie

[1] Por qué todo programador debería aprender a optimizar algoritmos

[2] Introducción a los algoritmos.

¡Hola!

Debe comenzar por elegir un idioma y aprender la lógica detrás de los algoritmos y tener una idea de cómo funciona la codificación. No abarrotes todo. No irás tan lejos como esto y es un camino difícil de seguir.

Déjame decirte lo que tiene que decir el mejor en el campo!

El equipo de Holberton School presenta un enfoque innovador de Progressive Education en su sistema para inculcar mejor las habilidades de programación de computadoras en sus estudiantes. ¡Es una escuela sin profesores formales ni conferencias! Se centran no solo en los mejores métodos de aprendizaje, sino que también los relacionan con lo que la industria del software requiere en la actualidad.

El co-fundador de la Escuela de Ingeniería de Software Holberton en San Francisco, Sylvain Kalache da los siguientes consejos:

  • Encuentra un mentor: El mundo del software es grande, y con tanta información disponible en Internet es fácil perderse y no saber por dónde empezar, o qué hacer para explorar. Encuentre a alguien que haya estado en la industria por un tiempo y que se mantenga actualizado. Define un plan con esta persona sobre lo que debes estudiar
  • Obtenga el código revisado : la mejor manera de acelerar el aprendizaje y mejorar es referirse a su mentor. Revisa tu trabajo y asegúrate de que vas en la dirección correcta. Internet tiene muchos recursos pero están lejos de ser perfectos. Tu mentor sabrá mejor lo que mejor se adapte a ti.
  • Aprender haciendo: leer libros y tutoriales es bueno, pero hacer es rey. El software es como un oficio, es practicando que lo dominarás. Al hacerlo, puedes convertirte en un buen desarrollador, pero para ser realmente bueno, necesitarás 3 habilidades: Tener un conocimiento completo de la pila. Ser capaz de aprender por ti mismo.

Consulte la escuela Holberton y vea de qué se trata en la Escuela de Ingeniería de Software de Holberton en San Francisco

Te deseo lo mejor en tus futuros proyectos.

Echa un vistazo a la categoría de Teoría de la Computación Coursera.
En particular, recomiendo los cursos de Robert Sedgewick.

  • Algoritmos, Parte I
  • Algoritmos, Parte II

Ambos son excelentes. La serie de Princeton sobre Algoritmos continúa con el Análisis de algoritmos y la combinatoria analítica, pero son extremadamente difíciles y matemáticamente exigentes. Estos últimos cursos son, de hecho, a su propio ritmo y sin calificación debido a su dificultad inherente y la dificultad de calificarlos.

En un lugar más informal (y muy entretenido), puedo recomendar el Diseño de programas de computadora: Principios de programación de Peter Norvig. Aunque no es un curso sobre algoritmos per se , sino más sobre principios de diseño, es a la vez desafiante y divertido, y puede ser útil para obtener la esencia de la programación y los algoritmos, aprender algunos trucos avanzados de Python y encontrar algunas soluciones generales agradables para problemas y rompecabezas. de diferente dificultad.

También es bueno (aunque de nuevo, no es un curso específico sobre Algoritmos, sino más sobre complejidad computacional), con algunos conceptos teóricos sutiles presentados de una manera clara y amena, la Introducción a la Ciencia Informática Teórica de Sebastian Wernicke.

Puedes concentrarte en lo que importa, pero te golpearás la cabeza con algoritmos menos obvios. Debería centrarse en el contenido de la mayoría de los libros de texto universitarios de nivel inferior sobre algoritmos y estructuras de datos.

¿Por qué digo la universidad de secundaria, en lugar de una universidad de cuatro años?

CLRS es una gran referencia para programadores que trabajan, pero no puedo recordar la última vez que necesité algo como la secuencia más larga y común en la vida real: ( diff hace ya.

Elegí LCS a propósito, porque escribí la mayor parte de la página de Wikipedia sobre este tema en 2006 y 2007. Lo sé bien. Cuando realice su selección, solo tenga en cuenta algunas reglas básicas, y debería estar bien en la vida real.

La respuesta de Marcas Neal a ¿Los desarrolladores profesionales practican algoritmos preguntas cada día?

  • El manual de diseño de algoritmos de Steven Skiena
  • Introducción a los algoritmos: un enfoque creativo: Udi Manber
  • Diseño del algoritmo: Jon Kleinberg, Éva Tardos

son tres libros de científicos de renombre que se esfuerzan por presentar algoritmos de una manera aplicada y basada en problemas reales. Si estos libros no te interesan, te sugiero que consideres seriamente estudiar un tema diferente.

Solo puedo decirte lo que funcionó para mí y para algunos otros. Es un camino directo:

  • Toma al menos un curso de DS y Algo en tu universidad o MOOC. Recomiendo el MOOC de Stanford (Parte 1 y Parte 2) y Princeton (Parte 1 y Parte 2) en Coursera
  • Lea CLRS. Es uno de los mejores libros para aprender algoritmos básicos. ¿Qué piensa Ashish Kedia sobre el libro ‘Introduction To Algorithms by CLRS’? ¿Cómo ha estudiado el libro?
  • Resuelve muchos problemas mientras aprendes teoría. Implementar estructuras de datos desde cero. Puede programar en cualquier idioma de su elección. Participa en el concurso de programación si es posible. Al menos unos pocos. Puede dejarlos si no le gusta. Hay un montón de jueces en línea para este fin: competencia de programación, concurso de programación, programación de computadora en línea, HackerRank, etc.
  • Por último, deja de pensar y empieza a hacer. El algoritmo no es un tema fácil. Algunas personas son inteligentes y pueden aprender algoritmos rápidamente, mientras que otras necesitan quemar el aceite de medianoche. No pienses en irte a mitad de camino porque estás luchando.

Publicaciones relacionadas que podrían ser útiles – Aprendizaje de estructuras de datos y algoritmos de Ashish Kedia sobre la vida de un depurador

¡Mantenlo práctico! Aprende en profundidad las estructuras de datos y los algoritmos de búsqueda más populares.

Curso Link – Estructuras de datos prácticas y algoritmos en Java + HW: Aprenda en profundidad las estructuras de datos más populares y los algoritmos de búsqueda

Descripción del curso por instructor

Si tuviera que elegir el tema más importante en el desarrollo de software, serían las estructuras de datos y los algoritmos. Piense en ello como las herramientas fundamentales disponibles para todos los programadores de computadoras. Cuanto mejor consigas con estas herramientas, más seguro se volverá un programador. El desarrollo de software es un vasto campo que requiere todo tipo de conjuntos de habilidades, pero ser bueno en este tema único es un gran avance en su viaje de programación y sin duda allanará el camino para una carrera de programación exitosa.

Los temas de este curso cubrirán estructuras de datos como listas, pilas, colas, árboles y algunos de los algoritmos de clasificación, búsqueda y gráficos más potentes que han revolucionado el campo de la computación. A lo largo del curso mantengo las cosas prácticas y proporciono ejemplos de la vida real de cómo funcionan todos estos algoritmos y cuándo y dónde se pueden aplicar para escribir programas informáticos eficientes.

Me moveré a un ritmo lento y constante introduciendo cada tema seguido de una asignación de programación PRÁCTICA para que pueda aplicar inmediatamente lo que aprendió. Todas las tareas asignadas en el curso se acompañarán con videos de soluciones paso a paso que desmitificarán cada problema a medida que codifico las soluciones. Mi objetivo es asegurarme de que, después de completar este curso, se sienta completamente seguro de participar en una entrevista de codificación porque habrá construido una base sólida en la programación de computadoras. Así que adelante, apúntate y te veré en el curso.

¿Quién es el público objetivo?

  • Si está harto de los cursos centrados en la academia sobre Estructuras de datos y algoritmos, y quiere comprender de manera intuitiva y práctica cómo implementar y los algoritmos y estructuras de datos más populares en software.
  • Si no le gustan las matemáticas y desea aprender algoritmos y estructuras de datos populares a un nivel profundo

¿Qué aprenderé?

  • Obtener confianza para codificar entrevistas
  • Aprenda las estructuras de datos y los algoritmos más prácticos y populares en profundidad en lugar de un curso apresurado de informática.
  • Practique la traducción de sudo code y la implementación de algoritmos con Asignaciones y Soluciones
  • Obtenga una comprensión intuitiva de cómo se comportan muchos de los algoritmos y estructuras de datos populares

Requerimientos

  • Los conceptos básicos de la programación, como sentencias if / else, bucles y métodos en algunos lenguajes de programación

Curso Link – Estructuras de datos prácticas y algoritmos en Java + HW: Aprenda en profundidad las estructuras de datos más populares y los algoritmos de búsqueda

Primero entiendo la complejidad de las aplicaciones de nivel empresarial y la necesidad de algoritmos. En matemáticas y ciencias de la computación, un algoritmo es una especificación inequívoca de cómo resolver una clase de problemas. Los algoritmos pueden realizar tareas de cálculo, procesamiento de datos y razonamiento automatizado. Hay muchas formas de aprender sobre los algoritmos … pero puedo sugerirle los mejores cursos en línea sobre algoritmos.

  • Algoritmos integrales
  • Aprende los conceptos básicos de algoritmos en poco tiempo.

Aquí puedes ir con el 2º.

Este curso te ayuda a construir una base sólida en algoritmos a partir de conceptos básicos

En este curso, aprenderá todos los algoritmos básicos y las estructuras de datos, requeridos mientras implementa estos algoritmos. También aprenderá cómo calcular las complejidades de tiempo y cómo abordar cualquier problema aplicando un algoritmo paso a paso. Algunos algoritmos avanzados y complejos también se explican con posibles formas simples. Sin embargo, no es obligatorio tener ningún conocimiento experto de programación para aprender estos algoritmos, sin embargo, algunos conocimientos básicos de matemáticas podrían ser una ventaja para entenderlos rápidamente. Lo que más se requiere es un poco de trabajo duro y algo de dedicación. Si tienes ambos; Nadie puede impedir que seas un muy buen programador.

puedes aprender

  • Domina los fundamentos de los algoritmos.
  • Comprender situaciones donde aplicar los conceptos de algoritmo.
  • Resuelva cualquier problema usando un enfoque paso a paso con un algoritmo
  • Aprenda conceptos de algoritmos avanzados fácilmente utilizando este curso como base.

Recursos adicionales :-

  • Estructuras de datos y algoritmos a través de C en profundidad

¿Quieres aprender algo bien? Intenta enseñarlo. Tome el material de aprendizaje del algoritmo, vuelva a escribirlo en sus propias palabras de manera que alguien que no esté familiarizado con él lo pueda entender.

Comparte fragmentos de código y crea un ejemplo. Úsalo para mostrarlo y aclararlo para que alguien lo entienda.

El beneficio será que ahora ha publicado algo que otros pueden usar como referencia, y como está escrito con sus propias palabras, si comienza a olvidar, puede volver fácilmente a su publicación y actualizarse (y quizás agregar un poco más como anda tu).

Especialmente útil si mucho de lo que puede hacer día tras día no necesariamente tiene mucho que ver con los algoritmos, pero desea mantenerse fresco.

Tangente
Mira esto: http://qiao.github.io/PathFindin…

Algo como esto sería tanto una gran herramienta de aprendizaje como algo divertido de emular para obtener una buena comprensión de varios algoritmos y poder ver visualmente cómo funcionan.

Como principiante comienza a aprender de lo básico. En matemáticas y ciencias de la computación, un algoritmo generalmente significa un pequeño procedimiento que resuelve un problema recurrente. Cada algoritmo también tiene un costo diferente y un tiempo de viaje diferente. Y es fácil aprender de los recursos en línea. También puedo sugerirle los mejores cursos en línea sobre algoritmos.

# 1. Aprende los conceptos básicos de algoritmos en poco tiempo.

En este curso, aprenderá todos los algoritmos básicos y las estructuras de datos, requeridos mientras implementa estos algoritmos. También aprenderá cómo calcular las complejidades de tiempo y cómo abordar cualquier problema aplicando un algoritmo paso a paso. Algunos algoritmos avanzados y complejos también se explican con posibles formas simples. Sin embargo, no es obligatorio tener ningún conocimiento experto de programación para aprender estos algoritmos, sin embargo, algunos conocimientos básicos de matemáticas podrían ser una ventaja para entenderlos rápidamente. Lo que más se requiere es un poco de trabajo duro y algo de dedicación. Si tienes ambos; Nadie puede impedir que seas un muy buen programador.

Cualquier duda o pregunta que pueda tener mientras realiza el curso, no dude en publicarlo en las discusiones del curso. Los instructores responderán a sus preguntas y le darán explicaciones claras lo antes posible. Seguiremos agregando nuevas conferencias a este curso. Sigue visitando regularmente

Comience su preparación y tome el primer paso para mejorar sus habilidades de algoritmo de inmediato.

# 2. Algoritmos integrales

Este curso proporciona una visión global de los conceptos de análisis y desarrollo de algoritmos. Intenté hacer el curso lo más sencillo posible, hasta el punto en que no se requiera experiencia previa en el análisis de algoritmos o la educación formal en informática. Los videos revisan algoritmos populares como la clasificación de mezcla, la clasificación de radix, la codificación de Huffman y muchos más, junto con algunas de las estructuras de datos que se utilizan en combinación con estos algoritmos, como las colas y las pilas. También reviso una serie de algoritmos de gráficos y hago introducciones a conceptos adicionales de análisis de algoritmos avanzados.

Desarrollé este curso mientras cursaba un curso de análisis de algoritmos a nivel de postgrado de la Texas Tech University, y estos son todos los temas principales que discutimos.

Al final de este curso, comprenderá a fondo algunos de los algoritmos y estructuras de datos más populares.

Cursos adicionales:

  • Estructuras de datos y algoritmos a través de C en profundidad

Tuve esta clase de Análisis de Algoritmo el año pasado. Es uno de mis cursos favoritos, así que vamos a responder tu pregunta.

¿Cuáles son las mejores y más eficientes formas de aprender algoritmos para principiantes?

En primer lugar, si desea aprender algoritmos desde el principio, debe tener los siguientes elementos:

  • Análisis y diseño de algoritmos (libro) : este libro comienza con ejemplos sencillos de algoritmos y cómo se mejoran paso a paso. O bien, puede encontrar su propio libro de algoritmos y comenzar desde el principio, por lo que no debe desmotivarse.

  • Tenga un bolígrafo o un lápiz con un cuaderno y anote cada ejercicio y piense en mejorarlo a su manera antes de pasar a la página siguiente para encontrar la solución. Le ayudará a pensar en diferentes posibilidades y una comprensión profunda de los problemas para que pueda pensarlo muy claramente. También nota será ayudarlo a revisar su trabajo.
  • Si no entendió ninguno de los problemas en el libro, intente buscarlos en Google o YouTube para encontrar una explicación más fácil, pero manténgase al tanto del libro que es su mapa.
  • Escribir programas . Estoy seguro de que usted es un programador, de lo contrario no se molestaría en hacer esta pregunta. Si convierte su algoritmo en un programa, lo entenderá completamente y verá su aplicación en el mundo real.
  • Vaya paso a paso , no se precipite para convertirse en gurú de algoritmos en un día, relájese y concéntrese en su progreso y trate de aprender paso a paso: es la clave del éxito para que los estudiantes vayan paso a paso.

La mejor de las suertes

La mejor manera de aprender algoritmos es diseñarlos y codificarlos. Puede comenzar resolviendo desafíos en sitios que enseñan Algoritmos, como algunos sitios de educación grandes o mi sitio de programación, Learneroo. (Por ejemplo, vea Recursión básica o árboles).

Después de que conozca los conceptos básicos, debe realizar un proyecto en el que esté interesado e involucre algoritmos, como crear una IA para jugar juegos.

(Ver también mi respuesta a ¿Cuáles son los recursos más fáciles de aprender para aprender sobre algoritmos?)

Simplemente la respuesta puede ser por ti mismo.

Pero el medio al que puedes acercarte es el siguiente sitio web, ya que me ayudó a aprender de manera eficiente:

InterviewBit (para DS y Algo)
HackerRank (para DS, ALgo, implementación lógica)
CodeChef (para DS, ALgo, implementación lógica)
Videos de las clases de Durga en youtube (Conceptos de Java en profundidad)
JavaTPoint (Java)

y GeeksForGeeks. (Para DS, ALgo, Implementación lógica)

Cuanto más tiempo dediques a ellos, aprenderás mucho más rápido.
Buena suerte, feliz codificación.