Después de haber aprendido, y quiero decir realmente aprendido, de muchos algoritmos, empiezas a notar patrones y obtienes la capacidad de llenar espacios en blanco mediante la improvisación.
Esta comprensión intuitiva es difícil de ganar; debe hacer algo como trabajar con la mitad de los algoritmos de CLRS hasta el punto de poder ejecutarlos manualmente y codificarlos.
Entonces tu modelo mental puede ser comprimido a algo como esto:
- búsqueda binaria: divide y vencerás, elige un elemento en el medio y decide si parar, recuperar a la izquierda o repetir a la derecha
- ordenar fusionar: divide y vencerás, divide la lista, ordena recursivamente cada mitad, fusiona la cremallera
- zipper merge: greedy, mira el primer elemento de cada lista y elige el menor
- ordenación rápida: divide y vencerás, elige un pivote aleatorio, agrega recurse ( pivote)
- Exploración de Graham: ordene en el sentido de las agujas del reloj, examine los tríos de puntos consecutivos, mantenga los que se inclinan hacia la derecha
Ninguno de estos es suficiente como definiciones de algoritmos porque omiten tantos detalles esenciales. Por ejemplo, no hay una explicación de cómo identificar y manejar los casos base de cualquiera de los algoritmos de dividir y vencer. La descripción de la combinación de la cremallera no explica qué hacer cuando una lista se queda vacía antes que la otra. El pseudocódigo correcto debe especificar este tipo de cosas con precisión.
- Cómo olvidar lo que me hizo mi hermana.
- ¿Alguien puede recordar fácilmente un lenguaje que había olvidado?
- ¿Cuáles son las mejores maneras de preservar los recuerdos dorados?
- Puedo leer un libro entero y no recordar nada de eso. Tengo que “refrescar” mi memoria leyendo un par de oraciones del libro. ¿Cómo puedo mejorar esto?
- ¿Qué proceso tiene lugar en el cerebro cuando recuperas los recuerdos mientras miras fotos antiguas?
Pero cuando haya alcanzado el nivel de dominio que describí anteriormente, no necesita recordar ese tipo de detalles, porque puede ordenarlos a pedido si alguna vez lo necesita.
Este es el principio de la fragmentación aplicada a los algoritmos. La primera vez que empiezas a aprender, cada minuto de detalle y línea de pseudocódigo es un micro-fragmento, por lo que estás limitado a recordar tal vez un algoritmo completo a la vez. A través del aprendizaje, patrones como dividir y conquistar, codiciosos, manejar casos básicos, manejar listas vacías, etc. se convierten en macro-fragmentos, de modo que puede recordar docenas de algoritmos a la vez.