Comment apprendre les algorithmes et les structures de données? [fermé]

38

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.

sushil bharwani
la source
3
Cormen est votre ami :)
Lukasz Madon
1
@lukas: Je n'ai toujours pas fini, cependant, il y a pas mal de calculs dans lesquels je ne suis pas à l'aise. Ma connaissance des algorithmes, des structures de données et de leur analyse a été beaucoup plus bénéfique que toute autre source unique :)
Matthieu M.
Vous pouvez également essayer mon projet, qui décrit les algorithmes populaires et des structures de données plus que wikipedia et carrément contient des codes souce presque pour chaque article (structure, approche, algorithme) ... en.algoritmy.net
malejpavouk

Réponses:

40

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/

Hounshell
la source
vraiment très bonne réponse! J'aime la façon dont vous avez formulé vos conseils!
paxRoman
Je prends aussi des livres avec Sedgewick et Skienna partout avec moi! c'est probablement une autre raison pour laquelle j'ai adoré votre réponse!
paxRoman
et Cormen au mélange s'il vous plaît.
AruniRC
1
À l'ère d'une tendance croissante à l'information sur Internet, il est important d'ajouter: lisez des livres (pas exclusivement, bien sûr). A Good Thing ™ est une introduction cohérente et cohérente à un sujet de plus de 2-3 pages HTML séparées par une annonce . Ne le sous-estimez pas (et oui, bien sûr, les livres électroniques sont bons).
Joachim Sauer
1
D'accord. La cohérence est la clé. Il est difficile de créer des structures de données lorsque vous obtenez une ou deux sources parmi une douzaine de sources. Les livres ont aussi tendance à avoir de meilleurs diagrammes (certains blogs / sources en ligne en ont, mais en général, les livres sont meilleurs). Les livres de Sedgewick présentent un mélange particulièrement réussi de diagrammes, de code simple à suivre et de description.
Hounshell
10

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.

Michael Riley - AKA Gunny
la source
2

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 .

Stephen Furlani
la source
2

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.

Jason Baker
la source
Les solutions sont ici. Je trouve ça génial de les avoir quand on apprend seul: www2.algorithm.cs.sunysb.edu:8080/mediawiki/index.php/…
David Rinck
1

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.

Martijn Verburg
la source
Je suis diplômé en informatique et cela fait six ans depuis. Je ne me suis jamais concentré sur ces sujets. C’était le Web, la convivialité, le serveur client, qui m’attirait et je ne travaille que sur ces domaines mais j’ai l’impression que je devrais les apprendre aussi. Quelles sont vos pensées.
sushil bharwani
Retournez suivre un cours de recyclage :-)
Martijn Verburg
1

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.

Ernelli
la source
1

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.

Kurtis
la source
0

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.

RobotHumans
la source
0

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.

Venki
la source