web-dev-qa-db-fra.com

Comment apprendre les algorithmes et les structures de données?

C'est dans la continuité de ma question précédente où j'ai demandé s'il est nécessaire d'apprendre des algorithmes et des structures de données. Je pense que oui.

Maintenant, je travaille dans un environnement où je n'aurai jamais la chance de l'apprendre en expérimentant ou pratiquement ou dans n'importe quelle tâche. Quelle est la bonne approche comme les bons livres, le bon type de problèmes, le bon type de ressources que je peux parcourir pour donner six mois ou un an ou deux pour apprendre des algorithmes et des structures de données? Et aussi façonner mon esprit de manière à pouvoir relier les problèmes aux structures de données et aux algorithmes.

38
sushil bharwani

Lire.

Non, vraiment, lisez.

Lisez tout sur l'algorithme et la conception que vous pouvez trouver. Il existe des livres phénoménaux. Les livres d'algorithmes de Sedgewick sont bons. Le manuel de conception d'algorithmes de Skiena est également bon. Ensemble, ces livres me suivent sur chaque étagère à chaque travail que je vais, avec le Mythical Man-Month.

Alors demandez.

Parlez à des gens que vous respectez. Demandez-leur quels points de décision ils avaient et pourquoi ils ont pris les décisions qu'ils ont prises. Les bons pourront toujours vous dire "J'ai choisi de faire X parce que c'est mieux que A, B de cette façon. J'aurais pu choisir C, mais j'ai senti que c'était un meilleur choix à cause de ça".

Ensuite, faites.

Construisez des trucs. Créez des trucs que vous n'utiliserez jamais. Créez des trucs dont vous n'aurez jamais besoin. Allez écrire un programme qui résout un puzzle Sudoku. Maintenant, recommence. Et encore. Construisez-le de 5 manières complètement différentes. Construisez un programme qui génère des puzzles Sudoku et introduisez-le dans les solveurs. Trouvez le solveur le plus rapide. Et alors...

Découvrez pourquoi.

Le "quoi" n'est presque jamais important. Je veux dire, oui, il est essentiel de terminer le projet en cours, mais à la fin, si vous savez le "quoi" sans connaître le "pourquoi", vous pourriez tout aussi bien ne jamais le faire en premier lieu. Vous avez une puce sur votre CV. Allez chercher un cookie et félicitez-vous. Le "pourquoi" est tellement plus important que le "quoi".

Et pour mémoire, Sudoku était un exemple. J'ai passé beaucoup de temps libre à faire cet exercice avec une tonne d'énigmes logiques sur Kongregate et j'ai beaucoup appris en chemin.

http://www.Amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/http://www.Amazon.com/Algorithm-Design -Manual-Steven-Skiena/dp/1848000693 /http://www.Amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/

40
Hounshell

Des algorithmes

J'ai pris des cours de magie en groupe lorsque j'avais douze ans. Le nom du magicien était Joe Carota. Il a fait un tour une fois et j'ai laissé échapper: "Comment avez-vous fait ça?" Il a dit quelque chose ce jour-là qui m'est resté depuis.

La réponse de Joe, "Michael, si vous voulez vraiment savoir comment ce truc est fait, vous devez comprendre comment vous le feriez vous-même."

Bien sûr, ce n'est pas ce que je voulais entendre, mais cela m'a permis de me concentrer sur la résolution de problèmes. C'était la résolution de problèmes de mon point de vue. Si ma première tentative de résolution du problème a pris dix-sept étapes et a été vraiment maladroite, la bonne nouvelle est que j'ai résolu le problème.

Ensuite, en examinant la solution que j'avais développée et en cherchant des moyens d'affiner cette solution, j'apprendrais à rationaliser le résultat final. Plus tard dans ma vie de programmation informatique, j'ai découvert que ce processus s'appelait "raffinement par étapes". Je pense qu'aujourd'hui, ils appellent cela du refactoring.

Ça a marché alors ça marche encore maintenant.

ici, le lien suivant vous redirige vers l'une des classes DS et Algorithms les plus réussies de MIT que j'ai jamais suivies).

http://academicearth.org/courses/introduction-to-algorithms

J'espère que vous apprécierez cette série de vidéos. Bonne chance !!!

9
Tharindu Rusira

Voyez si vous pouvez suivre un cours en ligne ou vous faire encadrer. À défaut, cela est apparu dans une recherche rapide sur Google. Je viens de suivre un cours sur ce sujet au printemps dernier (tout d'abord, je suis passé d'EE au logiciel) et ce n'était pas trop difficile à prendre si vous comprenez bien les pointeurs .

2
Stephen Furlani

Si vous n'êtes pas en mesure de suivre un cours à ce sujet, je recommanderais le manuel de conception d'algorithmes. Il y a un PDF ici gratuit, mais cela vaut la peine d'obtenir le livre réel si vous prévoyez de programmer professionnellement).

2
Jason Baker

Commencez à travailler sur la résolution de problèmes classiques, par exemple sphère en ligne , le site peut ne pas sembler aussi sophistiqué que garçon, ce sont des problèmes de programmation classiques qui nécessitent de nombreuses structures de données et algorithmes importants utilisés aujourd'hui.

Les solutions peuvent être soumises dans une variété de langages de programmation de C/C++ à JavaScript, LISP, Smalltalk, assembleur + environ 40 autres. Vous pouvez donc vous concentrer entièrement sur la résolution du problème avec le langage de programmation avec lequel vous vous sentez à l'aise.

1
Ernelli

CLRS

C'est de loin ma ressource préférée. Je l'ai utilisé dans mon cours d'algorithmique en informatique et j'ai fini par acheter le livre 4 ans plus tard pour le lire par moi-même afin de préparer mon M.S. Cours de Comp Sci. Ce n'est pas facile à lire, mais si vous travaillez pour comprendre certaines des mathématiques/preuves présentées, puis implémentez le pseudo-code dans votre (vos) langue (s) préférée (s), cela vaut bien le prix quelque peu élevé. Le manuel de conception d'algorithmes que d'autres ont mentionné est également une excellente ressource pour l'apprentissage de l'identification des problèmes, mais j'ai trouvé que le CLRS était meilleur pour les détails purs.

1
Kurtis

Essayez de vous inscrire à un cours de premier cycle sur les structures de données et les algorithmes, il est toujours bon d'apprendre ces concepts aux côtés d'autres.

1
Martijn Verburg

Vous pouvez toujours essayer quelque chose comme ça: http://codekata.pragprog.com/

J'ai toujours mieux appris en y réfléchissant plutôt qu'en lisant. Cependant, vous devriez avoir de la documentation/du matériel de lecture à disposition pour chercher des réponses.

0
RobotHumans

Achetez ceci livre , prêtez ceci ou volez ceci! Le reste suivra :)

Introduction aux algorithmes par Rivest et Cormen. Il sera très difficile de suivre initialement une fois que vous aurez passé l'explication du Mergesort dans l'introduction. Tout se déroule magnifiquement.

De plus, vous irez mieux si vous résolvez les problèmes mentionnés dans le livre. Je n'ai jamais vraiment voulu me séparer du livre même après avoir obtenu mon diplôme. C'est si bon.

0
Venki