30 votes

Algorithmes d'apprentissage : Je ne m'améliore pas. Comment apprendre plus vite

Je veux mettre en œuvre des algorithmes et des structures de données pour m'entraîner. J'ai un tas de manuels que je suis en train de parcourir et bien que je puisse comprendre l'idée et les théories, je n'arrive jamais à fermer le livre et à mettre en œuvre un code fonctionnel par moi-même, comme les gens le font dans les concours de programmation ACM.

Je peux apprendre à écrire une liste chaînée en C, et oublier comment le faire deux heures plus tard. Si j'utilise un langage de plus haut niveau comme le Python, j'ai des problèmes pour mettre en correspondance le psuedocode parce que certaines constructions comme les pointeurs n'existent pas. D'un autre côté, un langage comme le C est très compliqué et je fais constamment des erreurs.

Je veux vraiment améliorer mes compétences en algorithme, mais j'ai l'impression de ne jamais m'améliorer. Les algorithmes sont importants mais ils sont si difficiles ! Je dois faire quelque chose de mal. Je passe beaucoup de temps à étudier, mais les concepts ne semblent jamais s'imposer. Lorsque je me compare aux autres concours sur les tableaux d'affichage en direct, ils sont souvent 10 fois plus rapides que moi. Des conseils ?

41voto

Caffeine Coma Points 10544

Posez-vous cette question : malgré les difficultés inhérentes que vous rencontrez, prenez-vous plaisir à programmer/apprendre la CS ? Si ce n'est pas le cas, vous devriez peut-être vous demander si c'est vraiment quelque chose que vous souhaitez poursuivre à long terme. Je n'essaie pas de vous décourager, mais plutôt de vous épargner quelques maux de tête et de cœur.

La CS est un domaine difficile. Il y a certainement beaucoup de gens qui sont des programmeurs "nés", et tout leur est facile. Je ne faisais pas partie de ces personnes - j'ai dû me battre très fort dans mes cours de CS. D'un autre côté, je a aimé et même s'il était souvent difficile de mettre en œuvre les algorithmes assignés en classe, cela restait amusant pour moi. Si ce n'est pas amusant pour vous la plupart du temps, vous devriez peut-être reconsidérer votre engagement à long terme.

Si vous trouvez que cela vous plaît, ne vous préoccupez pas des personnes qui codent 10 fois plus vite que vous ; cela viendra en temps voulu. Concentrez-vous sur l'implémentation correcte des algorithmes plutôt que sur la rapidité ; vous développerez votre rapidité au fil du temps en acquérant plus d'expérience et en apprenant mieux les langages/API. Je vous déconseille également de lire le code des concours pour trouver de bons exemples d'algorithmes, à moins que les concours ne soient également jugés sur la qualité, la concision et la lisibilité. Vous pouvez vraiment apprendre beaucoup en lisant le code des autres, mais assurez-vous que le matériel dont vous vous inspirez n'est pas juste un hack rapide.

Une dernière recommandation : essayez d'implémenter dans votre langue de prédilection un algorithme dont vous avez déjà le code source, mais dans une autre langue. Par exemple, si vous avez le code source de Quicksort en Java, mais que vous connaissez bien Python, essayez de recoder l'algorithme en Python à partir du code source Java. Cela vous permettra de vous faire une idée de ce que fait réellement l'algorithme, tout en gardant un peu d'entraînement.

13voto

CookieOfFortune Points 8635

Essayez de résoudre les problèmes postés sur Projet Euler . Ils commencent assez facilement et peuvent constituer un bon entraînement. Cela commence assez facilement mais devient très vite difficile. Vous devrez mettre en œuvre de bons algorithmes pour les résoudre. Je vous recommande de rechercher certains des problèmes sur Google (certains ont tendance à être des variations de problèmes courants) et d'essayer d'implémenter les algorithmes que vous trouvez par vous-même, puis de vérifier la référence pour vous assurer qu'elle est correcte.

J'espère que cela vous aidera à vous mettre dans le bon état d'esprit lorsque vous réfléchirez aux algorithmes. Il n'est pas important de les mémoriser, il est beaucoup plus efficace de déterminer quel train de pensée vous devez suivre pour les comprendre.

C'est juste mon avis.

9voto

Svante Points 24355
  • Expliquez les algorithmes en langage naturel. Essayez de saisir l'idée qui se cache derrière.

  • Lorsque vous avez lu un algorithme et que vous pensez l'avoir compris, fermez le livre, prenez une feuille blanche et écrivez l'algorithme avec vos propres mots. Il s'agit d'une technique d'apprentissage très importante.

  • Parfois, il peut être utile de penser à la programmation d'une manière différente. Vous pouvez essayer de lire "Structure and Interpretation of Computer Programs" pour avoir un point de vue différent. Cela peut également vous aider à comprendre les langages de niveau supérieur.

5voto

Ryan Emerle Points 8073

Il faut juste pratique . La première bataille consiste à connaître les algorithmes existants et à savoir quand vous pouvez les utiliser. Lorsque le moment est venu de mettre en œuvre une solution, déterminez quel algorithme peut fonctionner, puis cherchez-le sur Google. (Ceci s'applique également aux modèles de conception (Decorator, Singleton, Facade, etc.).

Je doute que beaucoup de développeurs puissent écrire un tri de tas à partir de la mémoire Ils savent ce que c'est et ses avantages par rapport à d'autres algorithmes de tri, mais l'implémentation réelle peut facilement être glanée sur Internet à la demande.

4voto

Doc Points 4365

Les algorithmes sont juste une façon de en faisant quelque chose et les structures de données sont juste une façon de quantifier ou de décrire quelque chose.

Je suppose que cela dépend de votre style d'apprentissage, mais lorsque j'étais à l'école, cela m'a aidé de penser à des analogies pour ces choses. Par exemple, un algorithme de tri à bulles peut ressembler d'une certaine manière à un jeu de marelle, les piles à des distributeurs PEZ, les listes à double lien à des bureaucrates avec des téléphones, etc.

Prenez votre temps et avancez à votre propre rythme. Ne vous préoccupez pas de ce que font les autres. Restez au sommet de votre propre jeu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X