¿Cuál es su revisión del libro de Algoritmo de Grokking?

De hecho, acabo de recibir una copia el otro día. Hasta ahora, me gusta, ya que está funcionando según las expectativas. He aquí por qué lo compré.

Necesitaba un texto para proporcionar un puente entre la introducción cuasi-técnica a los algoritmos proporcionados por CS50 y los análisis basados ​​en pruebas cubiertos por Tim Roughgarden en los Algoritmos de Stanford. Más importante aún, quería un texto para ayudarme con la preparación de la entrevista.

Solo estoy en el capítulo tres en este momento, sin embargo, el diseño es razonablemente formulado. Se introduce un algoritmo junto con estructuras de datos relacionadas que uno puede usar para implementarlo. Los ejemplos del mundo real ilustran el cuándo / por qué / cómo de la selección de la estructura de datos, además de las métricas de rendimiento Big-O. El autor hace un esfuerzo adicional para basar todo en un ejemplo tangible, o al menos relatable, para reducir el nivel de abstracción, y luego presenta un código de muestra para el algoritmo en consideración en Python.

Hacer que alguien analice un algoritmo en detalle y presente el código para su consideración es una excelente manera de cortar el material e infinitamente preferible al enfoque habitual, que es: “Aquí hay un pseudocódigo de alto nivel, ahora ve a noquearte durante cinco horas, hasta solo tienes una subrutina correcta o estás en la cúspide de la ira. ”Ejecutar el código del autor te permite 1) encontrar errores (cada libro tiene erratas), 2) ver el flujo de control en un depurador como PythonTutor y combinar el elementos visuales de la “historia” del algoritmo (cada algoritmo puede conceptualizarse como una historia), 3) determinar los efectos de las adiciones / eliminaciones, y 4) mejorar el código para captar casos de esquina y, efectivamente, personalizarlo.

Personalmente, tener un contexto cualitativo en el que puedo colocar material cuantitativo lo hace más memorable, y mantener una docena de los algoritmos más utilizados a su alcance clama por un gancho de memoria dos. Algunas partes del texto parecen un poco “tontas”, en relación con lo que ya sé sobre Big – O y las estructuras de datos de CS50, sin embargo, nunca se puede ver material fundamental demasiadas veces de muchas maneras.

Una negativa es una combinación de terminología C y Python. El autor utiliza el término “matriz”, aunque sé que el código presentado no utilizará una matriz numpy importada, sino más bien una lista estándar de Python. Además, si bien todos los puntos contrastados con una matriz y una lista vinculada son verdaderos, una lista de Python no tiene las mismas restricciones que una matriz en C, y las listas vinculadas en Python son animales diferentes, en ciertos aspectos, que están en C. En tales secciones, si no supiera de qué hablaba el autor, podría no saber de qué hablaba el autor, o salir con una falsa impresión de lo que se trataban las listas de Python.

Leeré “Grokking” en paralelo con partes relevantes del “Manual de diseño de algoritmos” más técnico. El atractivo del segundo texto es su aparente enfoque en la heurística, que es algo que pocas personas que discuten / enseñan algoritmos realmente hablan acerca de. Los supuestos expertos en algoritmos parlotean sobre la codificación competitiva como una forma de aprender algoritmos y libros canónicos que se supone que todos han leído, pero nadie quiere leer (he elegido DPV para ese propósito), pero eluden el tema de la heurística , como si los algoritmos fueran un tema basado en la memorización de la fuerza bruta, en lugar del reconocimiento de patrones internalizados.

Entonces, basado en una escala de calificación simple Satisfecho / Insatisfecho, diré: Satisfecho.