Ceci fait suite à ma question précédente où je demandais s'il était 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 par des expériences ou par une mission. Quelle est la bonne approche: bons livres, bons types de problèmes, bonnes ressources que je peux utiliser pour donner six mois, un an ou deux, à l'apprentissage des algorithmes et des structures de données? Je me suis aussi dit que les problèmes pourraient être liés aux structures de données et aux algorithmes.
self-improvement
algorithms
data-structures
sushil bharwani
la source
la source
Réponses:
Lis.
Non, vraiment, lisez.
Lisez tout sur les algorithmes et la conception que vous pouvez trouver. Il existe des livres phénoménaux. Les algorithmes de Sedgewick sont bons. Le manuel de conception d'algorithmes de Skiena est également utile. Ensemble, ces livres me suivent sur toutes les étagères de chaque travail auquel je vais, ainsi que The Mythical Man-Month.
Puis demander.
Parlez aux 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 seront toujours en mesure de vous dire "J'ai choisi de faire X parce que c'est mieux que A, B de cette façon. J'aurais pu partir avec C, mais j'estimais que c'était un meilleur choix pour cette raison".
Ensuite, fais.
Construire des choses. Construisez des choses que vous n'utiliserez jamais. Construisez des objets dont vous n'aurez jamais besoin. Allez écrire un programme qui résout un puzzle de sudoku. Maintenant, recommencez. Et encore. Construisez-le de 5 manières complètement différentes. Construisez un programme qui génère des puzzles de Sudoku et l'introduisez dans les solveurs. Trouvez quel solveur est le plus rapide. Et alors...
J'ai trouvé pourquoi.
Le "quoi" n'a presque jamais d'importance. Je veux dire, oui, il est essentiel de terminer le projet en cours, mais à la fin, si vous connaissez le "quoi" sans savoir le "pourquoi", vous pouvez aussi bien ne jamais l'avoir fait au départ. Vous avez un point 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 à parcourir cet exercice avec une tonne de puzzles 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/
la source
Algorithmes
J'ai pris des cours de magie en groupe quand j'avais douze ans. Le magicien s'appelait Joe Carota. Il a fait un tour une fois et j'ai lâché: "Comment as-tu fait ça?" Il a dit quelque chose ce jour-là qui me tient toujours depuis.
La réponse de Joe: "Michael, si tu veux vraiment savoir comment cette astuce est faite, tu dois trouver un moyen de le faire toi-même."
Bien sûr, ce n’est pas ce que je voulais entendre, mais je me suis concentré sur la résolution de problèmes. C'était la résolution de problème de mon point de vue. Si ma première tentative de résolution du problème prenait dix-sept étapes et était vraiment klunky, la bonne nouvelle était que je réglais le problème.
Ensuite, en regardant la solution que j'avais développée et en cherchant des moyens de l'affiner, j'apprendrais comment rationaliser le résultat final. Plus tard dans ma vie de programmation informatique, j'ai découvert que ce processus s'appelait «Raffinement pas à pas». Je pense qu’aujourd’hui ils appellent cela la refactorisation.
Cela a fonctionné alors cela fonctionne toujours maintenant.
la source
Ici, le lien suivant vous redirige vers l’une des classes de DS et d’algorithmes les plus réussies du MIT que j’ai jamais suivie.
http://academicearth.org/courses/introduction-to-algorithms
J'espère que vous apprécierez cette série de vidéos. Bonne chance !!!
la source
Voyez si vous pouvez suivre un cours en ligne ou suivre des cours. À défaut, cela est apparu dans une recherche rapide sur Google. Je viens juste de prendre un cours dessus le printemps dernier (pour la première fois, je suis passé du logiciel EE au logiciel) et ce n’était pas si difficile à maîtriser si vous compreniez bien les indicateurs .
la source
Si vous ne pouvez pas suivre de cours sur ce sujet, je recommanderais le manuel de conception d'algorithmes. Il y a un PDF gratuit ici , mais cela vaut la peine d'obtenir le livre lui-même si vous envisagez de programmer de manière professionnelle.
la source
Essayez de vous inscrire à un cours de premier cycle en structures de données et algorithmes, il est toujours bon d'apprendre ces concepts aux côtés d'autres.
la source
Commencez à travailler sur la résolution de problèmes classiques, par exemple, sphère en ligne , le site pourrait ne pas sembler très chic, mais ce sont des problèmes classiques de programmation qui nécessitent bon nombre des structures de données et des algorithmes importants utilisés de nos jours.
Les solutions peuvent être soumises dans une variété de langages de programmation allant de C / C ++ à JavaScript, Lisp, Smalltalk, assembleur et quelque 40 autres. Vous pouvez ainsi vous consacrer entièrement à la résolution du problème, quel que soit le langage de programmation avec lequel vous vous sentez à l'aise.
la source
CLRS
C'est de loin ma ressource préférée. Je l'ai utilisé dans mon cours d'algorithme en informatique de premier cycle et j'ai fini par acheter le livre 4 ans plus tard pour le lire seul afin de préparer mes cours de MS Comp Sci. Ce n'est pas facile à lire, mais si vous travaillez à comprendre certaines des maths / preuves présentées et que vous implémentez ensuite le pseudo-code dans votre / vos langue (s) préférée (s), cela vaut bien le prix un peu élevé. Le Manuel de conception d'algorithmes mentionné par d'autres est également une excellente ressource pour l'apprentissage de l'identification des problèmes, mais j'ai trouvé que le CLRS était préférable pour les détails purs.
la source
Vous pouvez toujours essayer quelque chose comme ceci: http://codekata.pragprog.com/
J'ai toujours mieux appris en réfléchissant par opposition à la lecture. Cependant, vous devriez avoir de la documentation / lecture disponible pour chercher des réponses.
la source
Achetez ce livre , prêtez-le ou volez-le! Le reste suivra :)
Introduction aux algorithmes par Rivest et Cormen.Il sera très difficile de suivre au début une fois que vous aurez dépassé l'explication de Mergesort dans l'introduction. Tout se déroule à vous magnifiquement.
De plus, vous irez mieux si vous résolvez les problèmes décrits dans le livre. Je n'ai jamais vraiment voulu me séparer du livre, même après avoir obtenu mon diplôme d'études supérieures. C'est ce bon.
la source