¿Cuál es una buena manera de leer CLRS? Me encuentro perdiendo interés después de leer un par de páginas seguidas, probablemente debido a que el texto es demasiado formal.

Siento tu dolor.

Sin embargo, he elegido un capítulo en particular para trabajar (qué capítulo es irrelevante).

Lo primero que hago es implementar todo en el capítulo en uno o más lenguajes de programación, incluido un exhaustivo conjunto de pruebas.

Luego lo hago un ejercicio a la vez, con el entendimiento de que muchos de los ejercicios (y gran parte del texto) dependen del material cubierto en los Capítulos 2, 3 y 4, no por casualidad lo menos inmediato práctico desde mi punto de vista. Tiendo a concentrarme en 1. los ejercicios súper fáciles primero para asegurarme de tener el concepto general, luego 2. trabajar a través de ejercicios que requieren implementación (o donde la implementación ayudaría), luego 3. los ejercicios matemáticos directos porque las matemáticas son divertidas, y finalmente 4. los ejercicios que requieren “mostrar” o “discutir” o probar esta o aquella propiedad.

Cuando llego a una parte del texto o un ejercicio que no entiendo (“mostrar” o “discutir” o probar), trabajo hacia atrás en las secciones relevantes de los capítulos anteriores. Por ahora, no me preocupa expresar argumentos o pruebas formalmente. En cambio, intento desenterrar los por qué y por qué, y discutirlo en inglés. Obtendré la precisión formal más tarde. He descubierto que intentar una precisión formal antes de comprender realmente mi argumento a menudo conduce a “pruebas” sin sentido (OTOH, a veces, intentar formalizar mi argumento conduce a una mayor comprensión. YMMV).

Debido a que generalmente estoy más ocupado que un hombre de una sola pierna, llevo un registro (Trac, en realidad) de lo que estoy trabajando, lo que incluye la asignación de requisitos previos. Por ejemplo, un ejercicio actual solicita el análisis del peor de los casos, por lo que agregaré la lectura y los ejercicios apropiados de Chs. 2, 3 y 4 como requisito previo.

Recapitulando, encuentro un tema interesante para profundizar, luego agrego la amplitud necesaria a medida que avanzo. En algún momento, dominaré todo el material de requisito previo y será mucho más fácil.

Probablemente ayude que no tenga ninguna prisa en particular, y que obtenga una patada del material una vez que lo descubra. También me gusta mucho convertir los algoritmos en componentes de software diseñados.

También agregué un desafío personal: tratar de encontrar una aplicación práctica para varios ejercicios. Estuve en la academia el tiempo suficiente para saber que los problemas realmente geniales provienen del campo, y estoy seguro de que muchos de los ejercicios se destilan de esos problemas. Sería muy interesante para mí poder combinar alguna técnica exótica que aproveche algunas propiedades, como se describe en un ejercicio, para su aplicación práctica. Esto no quiere decir que no aprecie la pureza por el bien de la pureza, sí, es genial saber la diferencia.

Ok, de vuelta al análisis del peor de los casos …

Recientemente hemos discutido este libro en la respuesta de Igor Markov a ¿Cuáles son los mejores libros sobre algoritmos y estructuras de datos? (ver también comentarios que defienden el libro).

En su caso, una opción es implementar los algoritmos que está leyendo en Java o C ++, luego probarlos e intentar modificarlos un poco. También puede probar un libro más conceptual, incluido el que mencioné en la discusión anterior.

También ayuda mucho discutir lo que lees con otros.

Respuesta práctica, probada en batalla: guarde una copia junto al trono.

Teníamos una copia de CLR y una copia del lenguaje de programación C ++ de Bjarne Stroustroupe. Ambos lo hicimos muy bien en nuestra clase de algoritmos y clases que usaron C ++ para la programación (y algunos lo hicieron).

No en serio. Eso no quiere decir que el material en sí sea aburrido, pero el hecho de que el libro tenga toda su atención puede garantizarle un tiempo de lectura de calidad.

Creo que algunas de las críticas sobre el libro que usa pseudocódigo pueden ser válidas, pero en mi opinión no son del orden superior cuando se trata de comprender algoritmos.

Es lo suficientemente bueno hasta el punto de que si no obtiene el material (al menos en la primera mitad, generalmente es un caso de no aplicarlo).

Es cierto que esto fue antes de la llegada de los teléfonos inteligentes, por lo que su kilometraje puede variar hoy.

Probablemente, lo más útil para la comprensión (y la motivación) es hacer los ejercicios. Eso te obliga a entender el texto sin saltarte, y también te da evidencia de que tienes. También puede convertirse en un ciclo de retroalimentación positiva, si disfruta de la satisfacción de completar un ejercicio. Esta es una forma en que puede ayudarlo a interactuar con el texto.