Dependerá del nivel de educación que tenga actualmente y de cuán exhaustivo quiera ser. Cuando comencé con esto, tenía poca comprensión matemática, por lo que la mayoría de los libros me eran imposibles de penetrar. Siendo 100% autodidacta, y ahora enseño estructuras de datos y algoritmos a personas sin experiencia y muchos reciben ofertas de las principales empresas de tecnología. Desde ese ángulo, hay un cierto subconjunto que debes conocer en la práctica frente a la increíble profundidad que se enseña en la mayoría de los libros y las escuelas.
Si no tienes una sólida formación matemática, te recomendaría estos libros. Estos fueron los que me enseñaron lo que necesito saber (y tengo alrededor de 50 libros de algoritmos en mi estante de los que era difícil aprender, mucho más avanzados que donde estaba, incluso para un primer libro en el tema). Si lo hiciera hoy, iría en orden numérico (1 – 5 a continuación):
- Invitación a la informática 5ta – más barata que la 6ta
- Descubriendo la informática: una introducción a la informática / programación pero IMO, establece un contexto adecuado sobre por qué hacemos informática en lugar de simplemente aprender a codificar o sobre algoritmos
- Estructuras de datos con C (Thareja): es increíblemente talentoso para hacer que las cosas sean fáciles de aprender
- Algoritmos 4º – Muy práctico
Entonces:
- ¿Cuál es la diferencia entre un problema formal y solo un problema?
- ¿Cómo se creó el 'algoritmo' de la evolución biológica?
- ¿Qué atajos, términos y algoritmos deben saber los programadores junior para progresar?
- ¿Cuáles son los mejores algoritmos de partición de gráficos para gráficos grandes?
- ¿Puedo aplicar la optimización de algoritmos genéticos en un problema multivariable con 2 entradas frente a 2 salidas?
- El manual de diseño de algoritmos
Las siguientes son alternativas o suplementos realmente buenos (a los que me refiero con bastante frecuencia) (no en ningún orden en particular)
- Estructuras de datos usando C (Tenenbaum): más antiguo pero increíblemente perspicaz
- Estructuras de datos fáciles: un buen libro, muy visual, no me importa la respuesta inmediatamente después del enfoque de la pregunta, pero es un buen libro práctico destinado a la preparación de entrevistas para aquellos que no tienen experiencia con algoritmos
- Estructuras de datos y ALGORITMOS en C ++ 4th
- Desafíos de programación
- Pensar recursivamente en Java: un libro centrado exclusivamente en la recursividad
Para estructuras de datos más avanzadas o especializadas, me gustan los siguientes libros:
- Algoritmos y estructuras de datos: la caja de herramientas básica. En realidad, acabo de comprar este libro la semana pasada, pero soy adicto.
- Estructuras de datos avanzadas: no es un buen primer, segundo o tercer libro, pero es un buen libro una vez que esté listo para leerlo. Lo uso para fortalecer mi práctica con gráficos
- Fundamentos de Algoritmos 5to
- Algoritmos: los revisores de Amazon se quejaron de este libro, pero lo encontré esclarecedor y útil incluso antes de entender lo que es un buen libro de algoritmos. Lo compré para la sección de algoritmos en cadenas
- Manual de estructuras y aplicaciones de datos: lo compré solo para el capítulo sobre Análisis Amortizado, que encuentro 100 veces más esclarecedor que el triste capítulo sobre el libro CLRS (que todo el mundo parece copiar si lo mencionan) y CLRS no está en la lista de libros que recomiendo a los autoaprendices)
A medida que te acerques a lo teórico, estos libros serán muy esclarecedores:
- Cómo demostrarlo 2º: una introducción suave a las matemáticas necesarias para un aprendizaje más riguroso
- Cómo pensar en algoritmos: no es otro libro de algoritmos, sino que este enseña la mentalidad adecuada y cómo pensar (correctamente) al resolver algoritmos. Lo estoy revisando ahora y aprendiendo un montón mientras corrijo mi enfoque sobre ellos
- Análisis de algoritmos: un enfoque de aprendizaje activo 2º: un enfoque relativamente aplicado para estudiar algoritmos, pero no demasiado imposible para un autodidacta. También pasando por esto al mismo tiempo que lo anterior, pero mucho más casualmente
Fuera de eso, algunos otros libros que encontré particularmente interesantes y semi accesibles
- Razonamiento Matemático 2do
Para aprender las matemáticas, recogí (todos) los libros y el manual de soluciones de:
- http://artofproblemsolving.com
Y:
- Matemáticas discretas con aplicaciones 4º – No lo intente hasta que pase por artofproblemsolving y cómo probarlo (se proporcionan enlaces a ambos) o si ya tiene una sólida formación en matemáticas. Este tipo de libros es extremadamente difícil porque no puede obtener las soluciones fácilmente para verificar su comprensión.
Soy dueño de todos los libros anteriores (y toneladas más). He revisado algunos de ellos y he hecho referencia a otros. Sigo pasando por ellos. El (primer) libro # 3 de Thareja es realmente el único libro de introducción que necesita. Para aprenderlos correctamente (y cómo lo enseño): aprenda a visualizar cómo se ve la estructura en la memoria de la computadora y practique implementarlos una y otra vez y mezclar y combinar hasta que sea una segunda naturaleza. Por ejemplo, implemente un vector (matriz dinámica) utilizando matrices y listas doblemente vinculadas cuando llegue a él. Hágalo de manera procesal (pase el almacenamiento) y nuevamente usando OOP donde está contenido en el objeto. Mezcla y combina. No solo memorices.
Muchos de los libros implementarán un pseudocódigo del algoritmo y luego harán muchas preguntas sobre las matemáticas detrás de esto y podría dejarlo con la tarifa de que no aprendió nada. Eso es lo que me gusta de todos los libros que recomiendo anteriormente: se centran más en aprender los algoritmos que en las matemáticas (y a veces omiten las matemáticas por completo). Ese es un enfoque lo suficientemente bueno como para superar las entrevistas, pero tal vez no sea su clase de CS.