Estoy muy interesado en los algoritmos. ¡Tengo buen dominio de las matemáticas! ¿Qué libro es mejor para aprender algoritmos para mí?

Las estructuras de datos puramente funcionales de Chris Okasaki tiene una inclinación matemática muy agradable. Un beneficio real de su enfoque es que a menudo se puede ver la derivación de estructuras de datos a partir de los conceptos matemáticos subyacentes.

Por ejemplo, la conversión de sistemas numéricos a estructuras de datos para listas de acceso aleatorio binarias sesgadas.

Pasa mucho tiempo cubriendo los métodos bancarios y físicos para amortizar estructuras, y los trucos de Tarjan para convertir esos límites amortizados en los peores casos.

Es posible que desee comenzar con algo más tradicional como Introducción a los algoritmos, si está comenzando desde cero.

Otra opción si viene de un fondo matemático sería tomar un punto de vista algo pragmático como contrapunto a sus inclinaciones naturales.

Los algoritmos clásicos de Robert Sedgewick son un libro de texto. ¡Recomiendo la vieja segunda edición en Pascal, no la novedosa monstruosidad de C ++ que ha estado coautor bajo ese título durante los últimos 10 años! ¿Por qué? Principalmente porque la nueva versión se atasca mucho en los detalles del lenguaje C ++ y pierde la sensación de explorar estructuras de datos. Su libro es un buen ejemplo de un libro de texto de algoritmos que hace todo lo posible para enseñarle los tipos de trucos y optimizaciones simples de bajo nivel que siguen el código de alguien que ha implementado los mismos algoritmos una y otra vez y ha los sintonizó para que funcionen bien. En su mayoría, son cosas simples, agregar centinelas a las listas, mover el cheque a otra parte de la función, etc., pero los efectos compuestos de hacerlo correctamente en todas partes realmente se suman.

Si realmente está interesado en aprender más sobre algoritmos, puede consultar los cursos en línea ofrecidos por Coursera. Están bien estructurados, han grabado conferencias, ejercicios, tareas de programación semanal, pruebas, un panel de discusión en línea y la ayuda de TA. Los requisitos previos son, en su mayoría, matemáticas de secundaria y dominio básico del lenguaje de programación en el que se imparte el curso (principalmente Java).

Hay alrededor de cinco o seis cursos sobre Algoritmos, algunos centrados en la implementación, otros en análisis. Los cursos más avanzados se basan en los básicos, y generalmente se ofrecen justo después de los cursos básicos. En algunos casos, también obtienes un certificado después de completar el curso. Sé que algunos de ellos comienzan a partir de enero de 2014. Aquí hay algunos enlaces:

Coursera – Algoritmos I
Coursera – Algoritmos II
Coursera – Análisis de algoritmos

Pruebe la serie “El arte de la programación de computadoras” de Donald Knuth. Aquí hay un enlace al primer volumen: Algoritmos fundamentales.

Art of Computer Programming, Volumen 1: Algoritmos fundamentales (3a edición): Donald E. Knuth: 0785342896831: Amazon.com: Libros

Este, probablemente el libro más desconocido, es la mejor introducción a Algoritmos de la historia. Cómo resolverlo por computadora (Prentice-Hall International Series in Computer Science): RG Dromey: 9780134340012: Amazon.com: Libros

A diferencia de cualquier otro libro de algoritmos, este libro se centra en lo que hace que la programación (y los algoritmos) sean divertidos en primer lugar. Todos los otros libros de texto de algoritmos (incluidos los mencionados en otras respuestas) son pesados ​​en comparación.

Si realmente está buscando los desarrollos recientes en estructuras de datos y algoritmos, siga el curso 6.851 en el MIT impartido por Erik Demaine. Nunca lo encontrarás en ninguno de los libros mencionados. Porque cubre una amplia variedad de temas y también les da un tratamiento matemático riguroso. La versión Spring 12 del curso es Advanced Data Structures (6.851).

      Introducción a los algoritmos
      Libro de Charles E. Leiserson, Ronald Rivest, Thomas H. Cormen y Clifford Stein