Comment j'ai remporté 3 médailles d'or sur 4 à l'Olympiade informatique

Comment j'ai remporté 3 médailles d'or sur 4 à l'Olympiade informatique

Je me préparais pour la finale du championnat du monde Google HashCode 2017. Il s'agit de la plus grande compétition de problèmes algorithmiques organisée par Google.

J'ai commencé à apprendre le C++ à partir de zéro en neuvième année. Je ne connaissais rien à la programmation, aux algorithmes ou aux structures de données. À un moment donné, j'ai écrit ma première ligne de code. Sept mois plus tard, le concours de programmation se profilait à l'horizon. Je voulais voir à quel point mon style d’apprentissage de la programmation fonctionnait. C'était l'occasion idéale.

Après deux jours de compétition, les résultats sont tombés : j'ai remporté la médaille d'or.

J'étais choqué. J'étais en avance sur les concurrents avec 5 ans d'expérience. Je savais que j'avais travaillé dur, mais cette réalisation a dépassé toutes mes attentes. J’ai réalisé que la programmation sportive était mon sujet et je me suis lancé à corps perdu.

Je sais ce qui m'a conduit au succès et je souhaite le partager avec vous.

Comment j'ai remporté 3 médailles d'or sur 4 à l'Olympiade informatique

L'article a été traduit avec le soutien d'EDISON Software, qui prend soin de la santé des programmeurs et de leur petit-déjeuneret développe des logiciels personnalisés.

Quel langage de programmation choisir

  • C++ – Fortement recommandé ! Il est très rapide. La mise en œuvre des algorithmes prend peu de temps grâce au STL. Le C++ est accepté dans tous les concours. J'ai écrit ma première ligne de code en C++.
  • C - Apprenez le C++ grâce à la STL. Si vous connaissez le C, vous pouvez également programmer en C++.
  • Java est un langage de programmation lent. Il a une classe Big Integer, mais cela ne vous aidera pas beaucoup. Si un concours a une limite de temps, avec Java vous la dépasserez sûrement. Java n'est pas accepté dans toutes les compétitions.

Où peut-on pratiquer

Je recommande Juge en ligne Sphère (SPOJ). C'est une ressource efficace en termes de quantité et de qualité. Des éditeurs et des solutions sont disponibles en ligne si vous êtes bloqué dans le processus de résolution de problèmes. En plus de ce site je recommande Boîte à outils SPOJ и classificateur de problèmes pour SPOJ.pl.

Tout d’abord, vous devez perfectionner vos connaissances sur les bases

Une fois habitué à la syntaxe du langage, il y a quelques problèmes à surmonter. Commencez par des problèmes simples qui nécessitent de la pratique. A ce stade, l'essentiel est de déterminer votre style de programmation. Peut-être que vous aimez écrire du code avec beaucoup d’espaces, peut-être pas. Vous pouvez placer les parenthèses sur la même ligne que le « si », ou vous pouvez les placer sur des lignes distinctes.

Vous devez trouver votre style de programmation car c'est VOTRE style.

Lorsque vous le recherchez, rappelez-vous deux principes de base :

  • Votre code doit être facile à mettre en œuvre. Vous devriez vous sentir à l’aise pour mettre en œuvre la solution que vous proposez. Pourquoi? Car lors d’une compétition, la dernière chose dont vous avez envie, c’est de vous perdre dans votre code. Il est toujours préférable de consacrer 5 minutes supplémentaires à réfléchir à la manière de simplifier la mise en œuvre du code plutôt que de passer 10 minutes à essayer de le comprendre.
  • Votre code doit être facile à lire. Lorsque le code est facile à lire, il est facile à déboguer. Soyons réalistes : des bugs surviennent tout le temps. Vous connaissez cette sensation lorsqu'il vous reste 10 minutes et que vous ne trouvez pas la foutue erreur ? Bien sûr, vous le faites. Pour éviter cette situation, écrivez du code lisible. Une fois que vous aurez commencé à le déboguer, le code semblera naturel et facile à comprendre.

Voici un exemple du mien style de programmation.

Comment améliorer vos compétences de développement

Pratiquez, pratiquez et encore pratiquez. Je vous recommande de travailler sur les 250 premiers problèmes les plus résolubles sur SPOJ. Résolvez-les dans l'ordre. Passez au moins une heure à réfléchir à la solution à chacun d’eux.

Ne dites pas : « Ce problème est trop difficile pour moi, je vais essayer de résoudre le prochain. » C’est ainsi que pensent les perdants.

Prenez une feuille de papier et un crayon. Pensez-y. Peut-être que vous pourrez trouver une solution, peut-être pas. Au minimum, vous développerez une pensée algorithmique. Si vous ne parvenez pas à trouver une solution en une heure, recherchez une solution toute faite sur le forum ou dans les articles.

Qu’allez-vous réaliser avec cette approche ? Apprenez à mettre en œuvre rapidement vos idées à l’aide du code. Et étudiez les problèmes et les algorithmes classiques.

Deuxièmement, vous devez maîtriser les algorithmes et les structures de données

Suivez une approche hiérarchique. Vous avez commencé à courir sans savoir marcher ? Non. Peut-on construire un gratte-ciel sans fondation solide ? Pas encore.

Vous ne pouvez pas ignorer les étapes du parcours d’apprentissage. Si vous les ignorez, vous vous retrouverez avec des lacunes dans vos connaissances. Avec le temps, ils ne feront qu’empirer.

Commencez par les algorithmes fondamentaux et les structures de données

C'est difficile de démarrer. Peut-être parce que vous ne savez pas quoi étudier en premier. C'est pourquoi J'ai créé un cours vidéo « Algorithmes et structures de données ». Lors de la création de ce cours, je l'ai basé sur la façon dont j'aimerais être enseigné. La réaction a été incroyable ! Plus de 3000 100 étudiants de plus de XNUMX pays se sont inscrits au cours au cours du premier mois.

Si vous travaillez à résoudre des problèmes faciles, vous ne vous améliorerez jamais.

Le moyen le plus efficace de comprendre ce que vous ne savez pas est de le vivre en pratique. C'est comme ça que j'ai appris. J'ai appris de nombreuses nouvelles techniques dont je n'avais jamais entendu parler auparavant en choisissant une tâche stimulante.

Un problème sur trois sur lequel vous travaillez devrait vous apprendre quelque chose de nouveau. Soyez plus prudent lorsque vous choisissez des problèmes. Choisissez des problèmes plus difficiles !

Une fois que vous aurez terminé ces 250 problèmes du SPOJ, vous aurez une compréhension de base des sujets fondamentaux de la programmation sportive. Avec une compréhension approfondie de la logique derrière les algorithmes de base, les algorithmes de haut niveau sembleront moins complexes. De cette façon, vous pouvez tirer le meilleur parti de vos connaissances.

Approfondissez chacun des thèmes principaux

Voici une ressource précieuse avec beaucoup d'informations. Vous y trouverez les 10 meilleurs algorithmes et structures de données pour chaque sujet. Après 250 problèmes du SPOJ, vous en saurez beaucoup sur cette liste. Mais vous tomberez également sur de nombreuses choses dont vous n’avez jamais entendu parler auparavant. Commencez donc à étudier ces sujets par ordre croissant.

Si vous ne renforcez pas vos connaissances après avoir appris quelque chose de nouveau, vous oublierez rapidement tout.
Je recommande qu'après avoir appris un nouvel algorithme, utilisez-le dans la pratique. Travaillez-le à travers 2-3 tâches. Recherchez la balise d'algorithme dans SPOJ. Vous y trouverez des problèmes qui nécessitent la résolution de cet algorithme. Abordez ces problèmes en premier.

Maîtrisez la programmation dynamique car elle vous mènera à la victoire
D'après mon expérience, chaque compétition a au moins un problème programmation dynamique. Beaucoup de gens ont mal à la tête lorsqu'ils entendent l'expression « programmation dynamique » parce qu'ils ne la comprennent pas du tout.

Et c'est bien. Parce que si vous comprenez la programmation dynamique, alors vous gagnerez.

J'aime la programmation dynamique, c'est mon sujet préféré. Le secret de la programmation dynamique est de faire des choix optimaux à l’échelle mondiale, et pas seulement locaux. Vous devez décomposer le problème en sous-problèmes plus simples. Résolvez chacun de ces sous-problèmes une seule fois. Créez ensuite une solution qui combine les sous-problèmes résolus. Algorithme gourmand - le contraire de la programmation dynamique. Cela nécessite de faire des choix localement optimaux à chaque étape. Et un choix localement optimal peut conduire à une mauvaise solution globale.

Tout en apprenant de nouveaux concepts, consultez Tutoriels TopCoder. Ils sont très détaillés et compréhensibles. Grâce à eux j'ai pu comprendre arbres indexés binaires.

Travailler dur

Avez-vous déjà entendu parler d’athlètes qui remportent les Jeux olympiques sans années d’entraînement ? Pas moi.

Chaque année, les préparatifs de l'Olympiade informatique commençaient en septembre et se terminaient en avril.

Chaque jour pendant ces 8 mois, j'ai pratiqué pendant 5 heures.

Et oui, j'ai passé ces 5 heures uniquement à résoudre des problèmes algorithmiques. Je me souviens des jours où je pratiquais pendant 8 et même 10 heures. Pourquoi? Parce que j'ai aimé ça. Chaque jour, quand je rentrais de l'école, j'allais directement dans la chambre, je m'asseyais devant l'ordinateur et commençais à analyser un nouveau problème. Ou j'apprenais un nouvel algorithme que j'avais besoin de connaître pour résoudre ce problème.

Si vous voulez gagner, vous devez faire de même. Choisissez un problème et respectez-le. Pensez-y en marchant jusqu'au supermarché ou en conduisant.

Comment j'ai remporté 3 médailles d'or sur 4 à l'Olympiade informatique

Saviez-vous que lorsque vous dormez, votre cerveau défragmente les informations recueillies ce jour-là ? Il semble empiler des livres par ordre alphabétique sur une étagère. Essentiellement, votre cerveau réfléchit aux différents problèmes auxquels vous êtes confrontés.

Cela peut être utilisé habilement. Avant de vous coucher, lisez un problème difficile et rappelez-vous ce qu'il faut pour le résoudre. A ce stade, vous n’avez pas besoin de chercher la solution elle-même. Aller au lit. Votre cerveau commencera à traiter ce problème. À votre réveil, vous serez surpris de réaliser que vous avez trouvé la solution pendant que vous dormiez.

Essayez-le vous-même. C'est comme de la magie.

J'ai créé un blog vidéo

Comment j'ai remporté 3 médailles d'or sur 4 à l'Olympiade informatique

Ce court paragraphe n'est pas lié à la programmation sportive. Si vous avez la vingtaine et que vous vous demandez comment je vois le monde, vous voudrez peut-être jeter un œil mon blog vidéo sur Youtube. J'y parle du monde, de la vie et de l'informatique.

Travailler intelligement

C'est le secret du succès. Vous avez besoin d'objectifs.

Nous sommes des gens et nous aimons ça remettre à plus tard. Nous voulons toujours reporter ce qui doit être fait maintenant. Regarder Netflix est toujours plus agréable que de faire face à des problèmes de programmation dynamique. Vous le savez et vous devez y remédier.

Comment vaincre la procrastination

Fixez-vous des objectifs. Vous trouverez toujours des problèmes intéressants à partir desquels vous pourrez apprendre quelque chose de nouveau (consultez les ressources que j'ai mentionnées ci-dessus). Mais ces problèmes doivent être résolus, et pas seulement lus.

Voici donc comment j'ai surmonté la procrastination. J'ai commencé un calendrier papier et rempli chaque jour de problèmes que je voulais résoudre. J'ai toujours rempli les problèmes deux jours à l'avance. J’ai donc su gérer mon temps les jours suivants.

Comment j'ai remporté 3 médailles d'or sur 4 à l'Olympiade informatique

J’ai donc toujours été motivé. J'avais besoin de résoudre certains problèmes et d'en trouver de nouveaux pour remplir les prochains jours du calendrier. Rayer les problèmes résolus fait du bien. Je sais que tu l'aimes aussi.

Obtenez votre propre calendrier papier. Ne créez pas une autre liste de tâches sur votre téléphone que vous oublierez demain.

Comment déboguer efficacement

Vous souhaitez devenir professionnel ? Si oui, alors vous devez « le déboguer dans votre esprit ».
C'est de loin la technique de débogage la plus efficace que je connaisse car elle ne nécessite aucun débogueur. Votre cerveau examine plusieurs branches de code à la fois et vous donne un aperçu beaucoup plus large du code par rapport à débogueur classique.

Vous pouvez vous comparer à un grand maître qui joue aux échecs et pense 3 coups d'avance.

J'utilise cette technique uniquement comme ligne de défense initiale. Ensuite, j'utilise un vrai débogueur.

Pour apprendre à déboguer dans votre tête, vous devez vous entraîner. Lorsque vous validez une solution à un problème et obtenez une "mauvaise réponse", n'allez pas directement sur le bouton du débogueur. Relisez le code et réfléchissez : « Que se passe-t-il dans cette ligne ? », « Comment le « si » ici affecte-t-il le programme ? », « Quand nous sortons de la boucle, quelle est la valeur de l'itérateur ? »

De cette façon, vous pensez par vous-même. Au fil du temps, vous apprendrez à écrire du code et à le déboguer à la volée.

À propos de l'auteur

Comment j'ai remporté 3 médailles d'or sur 4 à l'Olympiade informatique
Andrei Margeloiu est un programmeur passionné qui s'intéresse à l'entrepreneuriat, aux startups et au plein air. Vous pouvez le contacter sur Linkedin.

Traduction : Diana Sheremyeva

Source: habr.com

Ajouter un commentaire