¿Qué consejos y técnicas puedo aprender para retener mi comprensión de algoritmos y estructuras de datos?

Un consejo que debería ayudar es pensar en los algoritmos como pruebas matemáticas, en lugar de una secuencia de pasos dados a una computadora.

Pensar en los algoritmos como pruebas matemáticas le ayuda a comprender por qué funcionan los algoritmos. Cuando piensa en los algoritmos como una secuencia de pasos, se ve obligado a memorizar los pasos y seguramente olvidará estos pasos. Pero cuando piensa en los algoritmos como pruebas matemáticas, obtiene una comprensión más profunda del algoritmo.

Además, cada vez que te encuentres con un nuevo algoritmo, no te digas a ti mismo: “¡Oye! Este es un enfoque genial. Ahora déjame aprender eso”. En lugar de eso, dite a ti mismo: “¡Oye! Esto es genial. Ahora, ¿cómo demuestro que es correcto?” Tener esta visión orientada a la prueba hacia los algoritmos es muy importante si desea obtener una comprensión intuitiva de los algoritmos. De hecho, diré que nunca debe intentar memorizar un algoritmo, sino que siempre debe probar (o refutar) su corrección (u otras propiedades del algoritmo).

Además, cada vez que quiera crear un nuevo algoritmo, no se diga “¿Qué secuencia de pasos le daré a una computadora para resolver este problema?” Más bien, pregúntese “¿Qué propiedad matemática puedo probar y explotar para resolver este problema?” Siempre esté atento a las propiedades matemáticas, como las invariantes, cuando piense en algoritmos.

Pensar en los algoritmos como pruebas matemáticas es la clave para comprender los algoritmos IMO. No sorprende que muchos libros de texto de algoritmos contengan muchas pruebas matemáticas.

Otro punto que es algo útil es darse cuenta de que muchos algoritmos combinatorios pueden considerarse como pruebas inductivas. Comprender la inducción matemática es muy esencial para comprender los algoritmos. No se puede separar la inducción de los algoritmos, ya que están estrechamente relacionados entre sí.

Recomiendo leer este documento de Udi Manber, y este libro también del mismo autor. El documento y el libro muestran cómo puede pensar en muchos algoritmos como pruebas matemáticas (pruebas inductivas en particular). El libro también explica lo que he dicho aquí, por lo que debería ser una buena lectura.

Si tiene algo de tiempo libre, le sugiero que lea los primeros tres capítulos del libro de Arthur Engel Estrategias para resolver problemas. Es un libro sobre estrategias de resolución de problemas matemáticos, pero algunas de estas ideas también se transfieren al mundo de los algoritmos. Ideas como la invariancia y el principio extremo surgen mucho al pensar en algoritmos.

¡Buena suerte en tu estudio!

Uno de los enfoques favoritos de Manuel Blum para ver patrones y atacar problemas es la ejemplificación: probar el problema con algunos pequeños ejemplos. En general, he descubierto que la implementación de estructuras de datos y algoritmos en ejemplos pequeños y triviales me ayuda a desarrollar la intuición hasta el punto en que puedo usar dicha estructura de algoritmo / datos para resolver un nuevo problema. Si se trata de algo complicado (por ejemplo, los montones de Fibonacci), no estaría de más seguir las notas de implementación en línea o de un libro de texto como CLRS.

Una vez que complete una primera implementación de algo, puede intentar extenderla para resolver algún problema que tenga en mente o un problema que haya resuelto anteriormente. Esto último es especialmente útil porque ya tiene una idea del problema y es libre de pensar en cómo su nuevo conocimiento (en forma de estructura de datos o algoritmo) interactúa con lo que entiende sobre el problema.

Hay una gran diferencia entre memorizar la descripción de un algoritmo e implementarlo. Es similar al problema de memorizar las notas de una pieza musical en lugar de tocarlas realmente. Debes hacer ambas cosas para lograr el dominio.

Si bien es un requisito previo importante leer sobre el algoritmo, escribir el algoritmo es una parte esencial del proceso. Se activa y enseña el modo de “creación” del cerebro, que la memorización no.

En resumen, debes usarlo para saberlo. Escribe algunos programas de juguetes que usen el algoritmo. Descubrirá que hay muchos pequeños detalles del algoritmo que realmente no “conocía”, y una vez que los resuelva, tendrá un conocimiento mucho más profundo. Resolver estos pequeños mini problemas también lo ayudará a ver que hay muchas formas de implementar cualquier algoritmo dado, y las compensaciones serán más claras.

Comprender (comprender) un algoritmo es lo suficientemente bueno. La industria está cambiando tan rápido que nadie debería perder el tiempo “aprendiendo a retener” (como recordar las cosas de memoria). Lo que necesita aprender es dónde se encuentra la biblioteca manual y luego aprender a navegarla. En el mundo conectado en red de hoy, ¡todas las respuestas que necesita son solo una búsqueda eliminada!

Si desea ser un programador por la pura alegría de la codificación, haciendo que la máquina baile a su ritmo, desarrollará una comprensión intuitiva más rápido de lo que piensa (lo más probable es que ya lo tenga).

Un libro que realmente recomiendo es The New Hacker’s Dictionary , la mayoría está en línea en The Hacker’s Dictionary.com (Ver también el archivo de jerga de Wikipedia). Y no , no estoy sugiriendo nada malo: hacker es un término de honor (los malos son crackers), un Hacker es un individuo que disfruta codificando para el desafío intelectual puro involucrado, ¡un programador entusiasta! Los medios de comunicación han usado mal el término hasta el punto de que hoy, muchos piensan que los hackers son crackers, no lo son.

Impleméntelos. Intenta idear tu propia forma de implementarlos y sigue enfrentando nuevos problemas. Intentar descubrir cómo funciona un algoritmo es más fácil si sabes por qué no funciona de una manera diferente. Al menos así es como trato de aprenderlos.

Aparte de eso, dedique tiempo a leer el material que tiene, busque preguntas sobre el algoritmo, haga preguntas sobre cosas sobre las que no está seguro aquí y sobre el desbordamiento de la pila. Trata de entender las matemáticas detrás de esto. Una vez que realmente lo entiendas, lo recordarás. También trabaje con los algoritmos, no necesariamente implementándolos, pero considere qué algoritmo o estructura de datos es mejor para un propósito dado.

Tengo el mismo problema 🙂

Piense en los algoritmos como las palabras en el diccionario. Puedes memorizar todo el diccionario, pero eso no te ayudará a hablar un idioma. Todo es práctica y entrena tu cerebro, cuándo usar qué palabra espontáneamente. Se puede hacer el mismo argumento para aprender a conducir o nadar.

Intenta resolver algunos problemas de concurso de programación y deja que tu cerebro te dé la sensación de que los algoritmos son herramientas como otras habilidades que necesitas para manejar en la vida. Debes convencer a tu cerebro de que necesitas algoritmos.

Si se está enfocando en una implementación específica del lenguaje del algoritmo o estructura de datos, probablemente esté estresando a su cerebro con detalles sobre las palabras clave específicas del lenguaje y ornamentos similares.

Al aprender ASD, sugiero usar lápiz y papel y resolver la magia sin codificar. De esta manera, se centrará más en lo que hace el algoritmo específico o cómo funciona la estructura de datos.

Codificarlos, una vez que haya entendido completamente cómo funcionan en general, será más fácil ya que no tiene que recordar los pasos de manera mnemotécnica.

Hay algunas visualizaciones agradables de muchas estructuras de datos y algoritmos en YouTube que podrían ayudar.
Lo que me ayudó en ese entonces fue leer una parte del algoritmo y escribir esa parte en papel con mis propias palabras y luego continuar con la siguiente parte y así sucesivamente.
Después de eso repite con trozos cada vez más grandes.

Primero, practique usarlos en la lista cada trimestre del año, trate de pensar en los problemas donde corresponde.
Otra forma podría ser ingresar algunos desafíos de programación en los que podría usar su conocimiento y mantenerlo actualizado.

Ok, entonces una buena manera de retener un algoritmo es entender por qué cada cosa es como es. Por ejemplo, tomemos el tipo de fusión. (Genérico lo sé)

Ahora en Merge sort hay dos cosas clave:

1. Caso base
2. Recursion

Ahora profundice y comprenda por qué necesitamos el caso base (para que el ciclo se detenga) y cómo se construye y con qué lógica

Ahora comprenda por qué necesitamos la recursividad, cómo y por qué está diseñada de la manera en que está (por qué estamos tomando la mitad de la matriz, cambiando los índices, lo que sea)

Solo recordar no es suficiente, debes saber por qué las cosas son como son solo entonces realmente aprenderás.