¿Existe un libro o sitio web que describa los problemas y luego le solicite la estructura de datos / algoritmos más apropiados necesarios para resolver el problema?

Sí, hay muchos, pero recomiendo estos dos:

1) CodeChef.com

Este sitio web es una iniciativa educativa de una compañía tecnológica llamada Directi. Muy recomendable para aquellos que desean mejorar sus habilidades de programación / análisis / algoritmos.

Tal como lo mencionó, este sitio le proporciona problemas bifurcados en niveles de dificultad, eso es fácil, medio y difícil.

Cada enunciado del problema que se requiere requiere que desarrolle / reutilice un algoritmo con modificaciones bastante pequeñas, así como que use sus habilidades matemáticas. Seguramente puedes comenzar desde el fácil.

Además, tienen un sistema de clasificación para cada pregunta. Por lo tanto, los envíos de código exitosos se clasificarán en función de su eficiencia, velocidad y corrección. Por lo tanto, las personas tienden naturalmente a usar las estructuras de datos más adecuadas, el código ordenado y los algoritmos más adecuados (en su mayoría modificados). Inicialmente, también puede buscar la sumisión de otras personas, ver las discusiones basadas en las preguntas para desarrollar habilidades algorítmicas aún mejores inspiradas por otros codificadores increíbles.

2) TopCoder.com

No he estado usando este últimamente, pero he escuchado a muchas personas decir que TopCoder es el lugar donde las grandes compañías pueden buscarlo y contratarlo si es lo suficientemente bueno en codificación y algoritmos. Así que también recomendaría este.

Además, recomendaría el libro “Introducción a los algoritmos”, coautor de Thomas Cormen, que es uno de los mejores libros escritos sobre análisis y diseño de algoritmos. Tiene alrededor de 955 ejercicios que puedes resolver.
Espero que esto ayude.