¿Qué necesito aprender antes de poder entender un algoritmo?

Hay muchos niveles para entender un algoritmo. Hay muchos algoritmos que utilizo donde no conozco las complejidades de cómo funcionan, pero sé que si le doy una entrada, obtendré algo de salida. En esta comprensión de nivel de superficie de un algoritmo, es clave para comprender principalmente qué son la entrada y la salida. Esta es la clave si está utilizando un paquete o programa en el que no tiene acceso al código fuente.

Por ejemplo, muchos de nosotros usamos un motor de búsqueda. Hay algunos algoritmos diferentes sobre cómo funciona un motor de búsqueda, pero a menos que esté diseñando un motor de búsqueda, no son tan importantes para usted. Para utilizar de manera efectiva el motor de búsqueda, necesita saber el tipo de entrada que toma y cuál será la salida. Como respuesta básica, podemos decir que la entrada será generalmente una cadena y la salida será una lista de páginas web. ¿Entonces hay preguntas como se permiten las expresiones regulares? ¿Hay formas de eliminar resultados? ¿Limitar solo a tipos de archivos específicos? restringido a ciertos dominios? Entender cómo funciona el motor de búsqueda en diferentes tipos de entrada le dará una mejor comprensión del algoritmo. Y, en general, entender cómo se comporta el algoritmo que está tratando de entender en diferentes entradas le dará una mejor comprensión.

En otro nivel está la comprensión de cómo funciona el algoritmo. Si bien el ejemplo anterior trata al algoritmo de alguna manera como una “caja negra” donde no tiene acceso al interior, este enfoque implica más información acerca de desarmar la caja / algoritmo y comprender lo que hace cada línea o paso. Para esto, lo mejor es un buen maestro. Desafortunadamente, los mejores escritores de algoritmos no siempre son los mejores maestros de esos mismos algoritmos. Hay algunos conceptos que es útil comprender: bucles, condicionales, funciones, estructuras de datos, codiciosos, retroceso, división y conquista, etc.

Sin embargo, para un principiante, es mejor encontrar un autor que pueda explicar el algoritmo en un algoritmo usando términos laicos, solo un breve resumen de lo que hace el algoritmo sin la charla elegante y las palabras que describí anteriormente. Por ejemplo, saber Algoritmos codiciosos y Programación dinámica ayudará con el algoritmo de Dijkstra, pero el algoritmo en sí es tan hermoso y simple que puede explicarse con un lenguaje sencillo.

Pero como los buenos maestros son difíciles de encontrar, la mejor manera de aprender un algoritmo es simplemente codificarlo. Así que trato de encontrar algunas fuentes alternativas que describan el algoritmo: si alguien realmente se tomó el tiempo para escribir pseudocódigo, eso es aún mejor. En general, lo que busco son casos de prueba, como describí en el ejemplo del motor de búsqueda, que muestra cómo pasamos de la entrada A a la salida B. Si puedo escribir un programa que funcione correctamente en estos casos de entrada, es probable que entiendo mejor ese algoritmo, y mientras más casos de prueba pueda hacer correctamente, más probabilidades tengo de entender el algoritmo. Del mismo modo, si hago un caso de prueba incorrectamente, entonces puedo obtener cierta comprensión al ver dónde difiere mi programa (es decir, mi comprensión del algoritmo) del algoritmo real.

Eso dependerá mucho de qué algoritmo le gustaría aprender.

En general, necesita comprender la declaración del problema resuelto por el algoritmo, los algoritmos, las técnicas algorítmicas y las estructuras de datos utilizadas como subcomponentes del algoritmo, y si el algoritmo es un refinamiento de un algoritmo anterior o está inspirado en un algoritmo anterior. Es posible que necesites aprender ese algoritmo anterior.

Por lo general, las buenas presentaciones de algoritmos te dicen en qué ideas se basa el algoritmo en la introducción. Los trabajos generalmente incluirán una sección de Trabajo relacionado con esta información.