Com vaig guanyar 3 de cada 4 medalles d'or a l'Olimpíada d'Informàtica

Com vaig guanyar 3 de cada 4 medalles d'or a l'Olimpíada d'Informàtica

M'estava preparant per a les Finals del Campionat Mundial de Google HashCode 2017. Aquesta és la competició més gran amb problemes algorísmics organitzada per Google.

Vaig començar a aprendre C++ des de zero a novè grau. No sabia res de programació, algorismes o estructures de dades. En algun moment vaig escriure la meva primera línia de codi. Set mesos després, el concurs de programació es va veure a l'horitzó. Volia veure com funcionava el meu estil d'aprenentatge de programació. Va ser l'oportunitat perfecta.

Després de dos dies de competició, van arribar els resultats: vaig guanyar la medalla d'or.

Estava impactat. Vaig estar per davant dels competidors amb 5 anys d'experiència. Sabia que havia treballat molt, però aquest èxit va superar totes les meves expectatives. Em vaig adonar que la programació esportiva era el meu tema i m'hi vaig posar de cap.

Sé què em va portar a l'èxit i vull compartir-ho amb vosaltres.

Com vaig guanyar 3 de cada 4 medalles d'or a l'Olimpíada d'Informàtica

L'article va ser traduït amb el suport d'EDISON Software, que s'encarrega de la salut dels programadors i del seu esmorzarI desenvolupa programari personalitzat.

Quin llenguatge de programació triar

  • C++ - Molt recomanable! És molt ràpid. La implementació d'algorismes triga poc temps a causa de STL. C++ s'accepta a totes les competicions. Vaig escriure la meva primera línia de codi en C++.
  • C - Aprèn C++ gràcies a l'STL. Si coneixeu C, també podeu programar en C++.
  • Java és un llenguatge de programació lent. Té una classe Big Integer, però no us ajudarà gaire. Si una competició té un límit de temps, amb Java segur que el superaràs. Java no s'accepta en totes les competicions.

On pots practicar

Recomano Jutge en línia de Sphere (SPOJ). És un recurs eficaç quant a quantitat i qualitat. Els editors i les solucions estan disponibles en línia si us quedeu encallat en el procés de resolució de problemes. A més d'aquest lloc el recomano Kit d'eines SPOJ и classificador de problemes per a SPOJ.pl.

En primer lloc, heu de perfeccionar els vostres coneixements bàsics

Un cop us acostumeu a la sintaxi de la llengua, hi ha alguns problemes per superar. Comenceu amb problemes senzills que requereixin pràctica. En aquesta etapa, el més important és determinar el vostre estil de programació. Potser us agrada escriure codi amb molts espais en blanc, potser no. És possible que estigueu posant els parèntesis a la mateixa línia que el "si", o potser els esteu posant en línies separades.

Has de trobar el teu estil de programació perquè és el TEU estil.

Quan el cerquis, recorda dos principis bàsics:

  • El vostre codi hauria de ser fàcil d'implementar. Hauríeu de sentir-vos còmode implementant la solució que us proposeu. Per què? Perquè durant una competició, l'últim que vols és perdre't en el teu codi. Sempre és millor dedicar 5 minuts addicionals a pensar com simplificar la implementació del codi que passar 10 minuts intentant esbrinar-ho.
  • El vostre codi hauria de ser fàcil de llegir. Quan el codi és fàcil de llegir, és fàcil depurar. Admetem-ho: els errors passen tot el temps. Coneixes aquesta sensació quan et queden 10 minuts i no trobes el maleït error? És clar que sí. Per evitar aquesta situació, escriviu codi llegible. Un cop comenceu a depurar-lo, el codi semblarà natural i fàcil d'entendre.

Aquí teniu un exemple meu estil de programació.

Com millorar les teves habilitats de desenvolupament

Pràctica, pràctica i més pràctica. Us recomano que treballeu amb els primers 250 problemes més resolubles SPOJ. Resol-los en ordre. Dediqueu almenys una hora a pensar en la solució a cadascun d'ells.

No diguis: "Aquest problema és massa difícil per a mi, intentaré resoldre el següent". Així pensen els perdedors.

Agafa un paper i un llapis. Pensa-hi. Potser pots trobar una solució, potser no. Com a mínim, desenvolupareu el pensament algorítmic. Si no podeu trobar una solució en una hora, busqueu una solució ja feta al fòrum o als articles.

Què aconseguiràs amb aquest plantejament? Apreneu a implementar ràpidament les vostres idees mitjançant codi. I estudiar problemes i algorismes clàssics.

En segon lloc, heu de dominar els algorismes i les estructures de dades

Seguiu un enfocament jeràrquic. Vas començar a córrer sense saber caminar? No. Es pot construir un gratacels sense una base sòlida? No un altre cop.

No podeu ignorar els passos del camí d'aprenentatge. Si els ignoreu, us quedareu amb llacunes de coneixement. Amb el temps només empitjoraran.

Comenceu amb algorismes i estructures de dades fonamentals

És difícil començar. Potser perquè no saps què estudiar primer. Aixo es perqué Vaig crear un curs de vídeo "Algoritmes i estructures de dades". Quan vaig crear aquest curs, el vaig basar en com m'agradaria que m'ensenyen. La reacció va ser increïble! Més de 3000 estudiants de més de 100 països es van apuntar al curs durant el primer mes.

Si treballes per resoldre problemes fàcils, mai milloraràs.

La manera més eficaç d'entendre allò que no saps és experimentar-ho a la pràctica. Així vaig aprendre. Vaig aprendre moltes tècniques noves de les quals mai havia sentit parlar abans escollint una tasca difícil.

Cada tercer problema en què treballeu us hauria d'ensenyar alguna cosa nova. Tingueu més cura a l'hora d'escollir problemes. Trieu problemes més difícils!

Un cop completes aquests 250 problemes de SPOJ, tindreu una comprensió bàsica dels temes bàsics de la programació esportiva. Amb una comprensió profunda de la lògica darrere dels algorismes bàsics, els algorismes d'alt nivell semblaran menys complexos. D'aquesta manera podràs aprofitar al màxim els teus coneixements.

Aprofundeix en cadascun dels temes principals

Aquí teniu un recurs valuós amb molta informació. Allà trobareu els 10 millors algorismes i estructures de dades per a cada tema. Després de 250 problemes de SPOJ, sabreu moltes coses d'aquesta llista. Però també et trobaràs amb moltes coses de les quals mai has sentit parlar abans. Així que comença a estudiar aquests temes en ordre ascendent.

Si no enforteixes els teus coneixements després d'aprendre alguna cosa nova, ho oblidaràs tot ràpidament.
Us recomano que, després d'aprendre un algorisme nou, l'utilitzeu a la pràctica. Fes-ho a través de 2-3 tasques. Cerqueu l'etiqueta d'algoritme a SPOJ. Allà trobareu problemes que necessiten aquest algorisme per resoldre. Abordeu aquests problemes primer.

Domina la programació dinàmica perquè et portarà a la victòria
Des de la meva experiència, cada competició té almenys un problema programació dinàmica. Moltes persones tenen mal de cap quan senten la frase "programació dinàmica" perquè no l'entenen gens.

I això és bo. Perquè si entens la programació dinàmica, guanyaràs.

M'agrada la programació dinàmica, és el meu tema preferit. El secret de la programació dinàmica és prendre decisions òptimes a nivell mundial, no només locals. Heu de dividir el problema en subproblemes més senzills. Resoleu cadascun d'aquests subproblemes només una vegada. A continuació, creeu una solució que combini els subproblemes resolts. Algoritme cobdiciós - el contrari de la programació dinàmica. Requereix prendre decisions localment òptimes a cada pas. I una elecció localment òptima pot conduir a una mala solució global.

Mentre apreneu nous conceptes, feu un cop d'ull Tutorials de TopCoder. Són molt detallats i comprensibles. Gràcies a ells vaig poder entendre arbres binaris indexats.

Treballa dur

Alguna vegada has sentit parlar d'atletes que guanyen els Jocs Olímpics sense anys d'entrenament? Jo no.

Cada any, els preparatius per a l'Olimpíada d'Informàtica van començar al setembre i van acabar a l'abril.

Cada dia durant aquests 8 mesos he practicat durant 5 hores.

I sí, vaig dedicar aquestes 5 hores només a resoldre problemes algorítmics. Recordo els dies en què practicava 8 i fins i tot 10 hores. Per què? Perquè em va agradar. Cada dia, quan tornava a casa de l'escola, anava directament al dormitori, m'asseia davant l'ordinador i començava a analitzar un nou problema. O estava aprenent un algorisme nou que necessitava saber per resoldre aquest problema.

Si vols guanyar, has de fer el mateix. Trieu un problema i ateneu-vos-hi. Penseu-hi mentre aneu al supermercat o conduïu.

Com vaig guanyar 3 de cada 4 medalles d'or a l'Olimpíada d'Informàtica

Sabíeu que quan dorms, el teu cervell desfragmenta la informació recollida aquell dia? Sembla que està apilant llibres en ordre alfabètic en una prestatgeria. Bàsicament, el teu cervell pensa en els diferents problemes als quals t'enfrontes.

Això es pot utilitzar amb habilitat. Abans d'anar a dormir, llegiu un problema difícil i recordeu què cal per resoldre'l. En aquesta fase, no cal que busqueu la solució en si. Vés al llit. El vostre cervell començarà a processar aquest problema. Quan et despertes, et sorprendrà adonar-te que has trobat la solució mentre dormia.

Prova-ho tu mateix. És com màgia.

Vaig crear un blog de vídeo

Com vaig guanyar 3 de cada 4 medalles d'or a l'Olimpíada d'Informàtica

Aquest breu paràgraf no està relacionat amb la programació esportiva. Si tens vint anys i et preguntes com veig el món, potser voldries fer una ullada el meu blog de vídeo a Youtube. Parlo del món, de la vida i de la informàtica.

Treballa intel·ligent

Aquest és el secret de l'èxit. Necessites objectius.

Som persones i ens agrada procrastinar. Sempre volem posposar el que cal fer ara mateix. Veure Netflix sempre és més agradable que tractar problemes de programació dinàmica. Ho saps i ho has de solucionar.

Com vèncer la procrastinació

Fixeu-vos objectius. Sempre trobareu problemes interessants dels quals podreu aprendre alguna cosa nova (consulteu els recursos que he esmentat més amunt). Però cal resoldre aquests problemes, no només llegir-ne.

Així que aquí és com vaig superar la procrastinació. Vaig començar un calendari en paper i vaig omplir cada dia de problemes que volia resoldre. Sempre vaig omplir els problemes amb dos dies d'antelació. Així que vaig saber gestionar el meu temps els dies següents.

Com vaig guanyar 3 de cada 4 medalles d'or a l'Olimpíada d'Informàtica

Així que sempre vaig estar motivat. Necessitava resoldre alguns problemes i trobar-ne de nous per omplir els propers dies al calendari. Tallar els problemes resolts és fantàstic. Sé que a tu també t'agrada.

Aconsegueix el teu propi calendari en paper. No creeu una altra llista de tasques pendents al vostre telèfon que oblidareu demà.

Com depurar eficaçment

Vols ser un professional? En cas afirmatiu, haureu de "depurar-ho a la vostra ment".
Aquesta és, amb diferència, la tècnica de depuració més eficient que conec perquè no requereix cap depurador. El vostre cervell examina diverses branques de codi alhora i us ofereix una visió general molt més àmplia del codi en comparació amb depurador clàssic.

Pots comparar-te amb un gran mestre que juga als escacs i pensa 3 moviments per davant.

Utilitzo aquesta tècnica únicament com a línia inicial de defensa. Llavors faig servir un depurador real.

Per aprendre a depurar el vostre cap, heu de practicar. Quan valideu una solució a un problema i obteniu una "resposta incorrecta", no aneu directament al botó del depurador. Torneu a llegir el codi i penseu: "Què està passant en aquesta línia?", "Com afecta el "si" aquí al programa?", "Quan sortim del bucle, quin és el valor de l'iterador?"

D'aquesta manera penses per tu mateix. Amb el temps, aprendràs a escriure codi i depurar-lo sobre la marxa.

Sobre l’autor

Com vaig guanyar 3 de cada 4 medalles d'or a l'Olimpíada d'Informàtica
Andrei Margeloiu és un àvid programador amb interès per l'emprenedoria, les startups i l'aire lliure. Pots contactar amb ell a LinkedIn.

Traducció: Diana Sheremyeva

Font: www.habr.com

Afegeix comentari