Comment mieux connaître les algorithmes en profondeur

8

J'ai lu ce site avec beaucoup d'intérêt, mais j'en trouve beaucoup qui me dépasse. Cela m'a donné envie d'en apprendre beaucoup plus sur les algorithmes et le CS en général. Pour autant que je puisse en juger par mes recherches, il existe deux façons principales de procéder.

  1. Je peux par un joli gros livre épais et progresser lentement mais sûrement.

  2. Je peux "apprendre en faisant" et par un beau livre, mais au lieu de le lire de bout en bout, je passe aux parties qui m'intéressent et je travaille à la mise en œuvre et à l'application d'algorithmes que j'aime.

  3. ?

Ma question est la suivante: laquelle avez-vous utilisée et recommanderiez-vous la même approche à quelqu'un d'autre?

Daniel Gratzer
la source
1
Vous pourriez trouver ma réponse sur cstheory utile.
Dai

Réponses:

15

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.

Dave Clarke
la source
J'ai commencé à lire une copie du manuel de conception d'algorithmes en ligne et je l'adore jusqu'à présent! Merci!
Daniel Gratzer
3
Je reformulerais légèrement une phrase: L'étude des algorithmes ne concerne qu'incidemment la mise en œuvre d'algorithmes.
JeffE
13

Enseignez une classe d'algorithmes.

Ou peut-être encore mieux:

écrire un manuel d'algorithmes.

JeffE
la source
3
+1. J'ai d'abord considéré cela comme une blague, mais je l'ai reconsidéré et j'ai réalisé que rien ne vous permet de comprendre quelque chose en profondeur comme lorsque vous êtes obligé d'aider quelqu'un d'autre à apprendre les mêmes concepts. Bien sûr, cela comprend, pour un professeur, les deux cours d'enseignement, la préparation des notes de cours, des notes et bien sûr, la rédaction des manuels scolaires ;-) Mes deux cents: la préparation des exercices aide beaucoup aussi. Pour un étudiant, je suis d'accord avec la stratégie proposée par @Dave Clarke.
Massimo Cafaro
Non, @vzn, cette réponse est complètement sérieuse.
JeffE
eh bien, j'en avais peur - alors une réponse appropriée / adaptée à toute personne qui n'est pas un enseignant ou un professeur (qui est un sous-ensemble très restreint de la population) pourrait être "enseigner l'algorithme à votre ami" ou "écrire une description de la algorithme de la mémoire et
demandez à
5
Ne sois pas si rigide. Pourquoi faut-il être payé pour enseigner (ou écrire) afin d'enseigner (ou écrire)? Enseignez à vos collègues. Enseignez à vos enfants. Bénévole dans une école secondaire ou un collège communautaire local. Créez des vidéos YouTube lors de vos jours de congé. Démarrez un algorithmes Pechakucha Night.
JeffE
touche. suppose que cela fonctionne si "manuel" est aussi vaguement considéré comme "écrit dans un cahier à reliure spirale, non publié"
vzn
2

Essayez de résoudre des problèmes basés sur un algorithme dès que vous en lisez un. De plus, pour mieux comprendre les algorithmes et les implémenter, vous devez avoir une meilleure compréhension des structures de données. Il y a un très beau livre de structures de données écrit par Sahni. Vous pouvez l'utiliser et pour les algorithmes, vous pouvez résoudre les problèmes de programmation des défis. Les questions sont plutôt sympa là-bas.

Lina Clark
la source
1

Si vous n'avez pas appris les algorithmes à l'université, je vous recommande de suivre l'un des cours en ligne, vous pouvez envisager de vous inscrire à l'un des cours sur coursera.org ou de suivre des vidéos publiées par l'Université de Stanford.

marque
la source
Udacity propose également un cours sur udacity.com/overview/Course/cs215 .
jonsca