J'ai appris les algorithmes dans un cours universitaire il y a des années. Mais si vous voulez faire des algorithmes en utilisant un livre, alors vous en avez besoin d'un bon. Deux livres se distinguent pour moi comme le moyen d'entrer dans les algorithmes:
- Le manuel de conception d'algorithmes par Steven S. Skiena
- Introduction aux algorithmes par T Cormen, C Leiserson, R Rivest et C Stein
Le premier est peut-être plus un manuel pratique, tandis que le second ressemble plus à la Bible, mais avec des preuves.
La stratégie que vous pourriez suivre consisterait à lire, à faire les exercices théoriques, puis à mettre en œuvre autant que vous le pouvez, en vous concentrant sur les algorithmes / problèmes que vous trouvez intéressants ou difficiles, ou les deux. Essayez donc de couvrir tous les aspects des algorithmes, pas seulement de les implémenter. Cela comprendra l'étude de leur complexité temporelle et spatiale et la preuve de leur exactitude. L'étude des algorithmes va au-delà de la simple mise en œuvre d'algorithmes.
Après avoir acquis suffisamment d'expérience, commencez à vous spécialiser. Si vous vous intéressez à la géométrie informatique ou aux algorithmes non bloquants, par exemple, alors commencez à explorer des livres et des articles de recherche dans ce domaine.
La spécialisation est bonne, mais il est également bon d'échantillonner des techniques d'autres domaines, donc une lecture générale des algorithmes (et la mise en œuvre de ces algorithmes) est un bon moyen de maintenir un large éventail de compétences.
EDIT: Après avoir parcouru les algorithmes d'introduction, vous pouvez consulter des livres comme Randomized Algorithms de Motwani & Raghavan ou Approximation Algorithms de Vazirani . Ces livres sont une enquête (et dans une certaine mesure, un bon exercice d'apprentissage des techniques mathématiques) sur les techniques de conception d'algorithmes plus avancées. Ils élargissent également votre compréhension de nombreux autres domaines dans CS, tels que les graphiques et les réseaux, la conception et l'optimisation de la structure des données.