¿Desde dónde puedo aprender algoritmos practicando problemas?

La introducción a los algoritmos es como el queso azul. Algunas personas lo odian absolutamente, otros lo aman. Es realmente matemáticamente riguroso, ningún detalle dejado atrás. Esto deja a algunas personas aturdidas y confundidas. Personalmente, me pareció mejor saltear inicialmente las matemáticas e intentar entender el algoritmo. (Recomiendo volver a las matemáticas después de haber entendido correctamente el algoritmo)

Personalmente no pude entender algunos algoritmos o incluso argumentar su corrección simplemente leyendo la prueba matemática de corrección o el análisis del tiempo de ejecución. La forma más efectiva que he podido encontrar es rastrear el algoritmo a mano . Esto puede sonar cliché pero funcionó muy bien para mí.

Tomaría un bolígrafo y papel, tomaría algo al azar y me convertiría en la máquina. Ejecutaría cada línea de código a mano, viendo el estado de todas las variables en cada paso, descubriendo cada transición. Luego, repetiría este procedimiento con múltiples entradas hasta que estuviera convencido.

Una vez que estoy “convencido”, puedo argumentar su corrección y tiempo de ejecución sin siquiera mirar la prueba, pero lo más importante, puedo codificar una implementación correcta sin mirar nuevamente el libro de texto . Ahí es cuando lo has entendido.

Hasta ahora, me referí a tu comentario pero no a tu pregunta como tal. Según lo que puedo decir, estás tratando de entender algunos algoritmos clásicos. Para esto, el mejor recurso que conozco sería HackerRank. Tienen problemas agrupados por categorías e incluso tienen problemas que requieren la implementación de varios algoritmos clásicos como Djikstra o Prim o estructuras de datos como Tries, BST. Entonces, si desea probar sus implementaciones, este es el lugar. Siempre hay editoriales para la mayoría de los problemas en caso de que te quedes estancado.

Pero no recomiendo codificarlo y probarlo si no lo comprende. Para ser honesto, es muy probable que lo entiendas mientras lo pruebas, ver dónde está fallando o pasando te ayudará a tener una intuición de por qué está sucediendo eso, pero luego se convierte en un caso de éxito y prueba . Como todos mis guías / maestros siempre me han dicho, nunca recurra al éxito y al juicio . Te hará daño en algún lugar del camino. Créeme, lo he intentado.

Volviendo a Introducción a los Algoritmos, si encuentra que el texto es insuficiente o poco claro, le recomiendo encarecidamente las conferencias del curso Introducción a Algoritmos de Erik Demaine y Srini Devadas 6.006 del MIT. Este es un curso basado en el libro del mismo nombre. Es un curso brillante, tanto Erik como Srini son excelentes maestros. Erik ocasionalmente puede hacer algunas cosas específicas de Python en el psuedocode, pero para ser honesto, Python no está muy lejos de psuedocode.

MIT 6.006 Introducción a los algoritmos, otoño de 2011

Ahora, si este está un nivel por debajo de lo que está buscando, tal vez esté buscando algo como la optimización del casco convexo o algo más avanzado, no temas, MIT al rescate. Subieron el próximo curso de la serie Algorithms, 6.046, Advanced Algorithms de los mismos profesores (con la incorporación de la Prof. Nancy Lynch )

MIT 6.046J Diseño y Análisis de Algoritmos, Primavera 2015

EDITAR 1 : Como un conjunto de alternativas al contenido del MIT, también puede ver lo siguiente de la Universidad de Stanford.

Un segundo curso en algoritmos (CS261, invierno 2016) (Algoritmos avanzados)

Colección de conferencias | Programación de abstracciones (algoritmos básicos)

Esto debería ser suficiente para la mayoría de los casos. Ahora, por supuesto, si realmente desea practicar el diseño de algoritmos, que puede involucrar algunos algoritmos no clásicos, sino paradigmas de diseño de algoritmos como la Programación dinámica, entonces no hay límites en los recursos. Puede ir a CodeChef o TopCoder o SPOJ u otros cientos de sitios web.

Casi lo olvido. Las páginas de capacitación de USACO son realmente geniales, ¡léalas también!

¡Buena suerte!

PD: Ya sea que estés haciendo solo el libro o el curso MIT, haz las tareas . Aprenda Python si lo necesita para las tareas del curso. No debería tomar más de una semana, y créeme, Python vale más que la pena.

¿Puedes escribir un algoritmo? Probar esto. El usuario puede ingresar cualquier número del 1 al 1000 y su programa debe convertir los números a inglés escrito. p.ej.

Ip: 564

Op: quinientos sesenta y cuatro.

¿Puedes hacer algo simple? Use c, c ++, java, su deseo.

Para los conceptos y la teoría, diría que codeshef.com es bueno. Enseñan y te permiten codificar y competir. Hackathon también es bueno. También puede explorar codeacademy.com para más práctica.

Primero vaya a cursos gratuitos de eDx o videos de neptal en Internet … aprenda de los conceptos básicos de algoritmos y estructuras de datos … YouTube puede ser de gran ayuda … toma algún tiempo entender el concepto … solo siga aprendiendo …. Havard University) puede ser de gran ayuda para comenzar …

More Interesting

¿Por qué la programación dinámica se llama programación dinámica?

¿Cómo podemos verificar si un punto (digamos el origen) se encuentra en un casco convexo 6-D (o ND) y qué tan lejos está el punto de cualquiera de los lados (facetas) del casco convexo?

¿Cómo planificarías un campamento de algoritmos y estructuras de datos de un mes?

¿Qué debo aprender a usar el algoritmo AlphaGo Zero para otras aplicaciones con conjuntos de datos y reglas?

¿Quién sabe qué hay detrás de la API de Google Nearby Search? ¿Qué algoritmo usan? ¿Cómo encuentra Google una estación de servicio cercana?

¿Por qué no puede haber un algoritmo de clasificación que tenga el mejor y el peor caso de N tiempo de ejecución (por ejemplo, lineal)?

¿Cómo las aplicaciones como el Partometer 3D calculan la longitud en 3D usando la cámara y la entrada táctil?

Cómo convertir el ciclo while en declaraciones if

¿Cuáles son algunos programas / algoritmos recursivos interesantes (como la Torre de Hanoi y N-Queens)?

¿Qué estructura de datos es mejor para implementar una guía telefónica: Trie o Hash? ¿Por qué?

¿Cuáles son los algoritmos utilizados por Google para SEO?

¿Qué algoritmo de búsqueda usan los sitios de matrimonio en línea en India?

Cómo determinar la complejidad temporal de cualquier código de manera fácil y eficiente

Cómo entender cómo funcionan los algoritmos

¿Cuáles son algunas habilidades de programación, algoritmos o marcos que se ven muy bien pero que son muy simples?