Cum am câștigat 3 din 4 medalii de aur la olimpiada de calcul

Cum am câștigat 3 din 4 medalii de aur la olimpiada de calcul

Mă pregăteam pentru Finala Campionatului Mondial Google HashCode 2017. Aceasta este cea mai mare competiție cu probleme algoritmice organizată de Google.

Am început să învăț C++ de la zero în clasa a IX-a. Nu știam nimic despre programare, algoritmi sau structuri de date. La un moment dat am scris prima mea linie de cod. Șapte luni mai târziu, competiția de programare se profila la orizont. Am vrut să văd cât de bine a funcționat stilul meu de a învăța programarea. A fost ocazia perfectă.

După două zile de competiție, au venit rezultatele: am câștigat medalia de aur.

Am fost socat. Am fost înaintea concurenților cu 5 ani de experiență. Știam că am muncit din greu, dar această realizare mi-a depășit toate așteptările. Mi-am dat seama că programarea sportivă era subiectul meu și am pătruns în ea.

Știu ce m-a condus spre succes și vreau să vă împărtășesc acest lucru.

Cum am câștigat 3 din 4 medalii de aur la olimpiada de calcul

Articolul a fost tradus cu sprijinul EDISON Software, care are grijă de sănătatea programatorilor și de micul dejun al acestorași dezvoltă software personalizat.

Ce limbaj de programare să alegeți

  • C++ - Recomand cu incredere! El este foarte rapid. Implementarea algoritmilor durează puțin din cauza STL. C++ este acceptat în toate competițiile. Am scris prima mea linie de cod în C++.
  • C - Învață C++ datorită STL. Dacă cunoașteți C, puteți programa și în C++.
  • Java este un limbaj de programare lent. Are o clasă Big Integer, dar nu te va ajuta prea mult. Dacă o competiție are o limită de timp, cu Java sigur o vei depăși. Java nu este acceptat la toate competițiile.

Unde poți exersa

Vă recomand Judecător Sphere Online (SPOJ). Este o resursă eficientă din punct de vedere cantitativ și calitativ. Editorii și soluțiile sunt disponibile online dacă rămâneți blocat în procesul de rezolvare a problemelor. Pe langa acest site il recomand Setul de instrumente SPOJ и clasificator de probleme pentru SPOJ.pl.

În primul rând, trebuie să-ți perfecționezi cunoștințele de bază

Odată ce te obișnuiești cu sintaxa limbii, există câteva probleme de depășit. Începeți cu probleme simple care necesită practică. În această etapă, principalul lucru este să vă determinați stilul de programare. Poate că îți place să scrii cod cu multe spații albe, poate că nu. Este posibil să puneți parantezele pe aceeași linie cu „dacă” sau le puteți pune pe rânduri separate.

Trebuie să-ți găsești stilul de programare pentru că este stilul TĂU.

Când îl cauți, amintește-ți două principii de bază:

  • Codul dvs. ar trebui să fie ușor de implementat. Ar trebui să te simți confortabil implementând soluția pe care ai venit. De ce? Pentru că în timpul unei competiții, ultimul lucru pe care ți-l dorești este să te pierzi în codul tău. Este întotdeauna mai bine să petreceți încă 5 minute gândindu-vă la cum să simplificați implementarea codului decât să petreceți 10 minute încercând să vă dați seama.
  • Codul dvs. ar trebui să fie ușor de citit. Când codul este ușor de citit, este ușor de depanat. Să recunoaștem – erorile apar tot timpul. Știi acel sentiment când mai ai 10 minute și nu găsești greșeala? Bineînțeles că faci. Pentru a evita această situație, scrieți cod lizibil. Odată ce începeți să-l depanați, codul va părea natural și ușor de înțeles.

Iată un exemplu de-al meu stilul de programare.

Cum să vă îmbunătățiți abilitățile de dezvoltare

Practică, practică și mai multă practică. Vă recomand să rezolvați primele 250 de probleme cele mai rezolvabile SPOJ. Rezolvă-le în ordine. Petreceți cel puțin o oră gândindu-vă la soluția pentru fiecare dintre ele.

Nu spune: „Această problemă este prea dificilă pentru mine, voi încerca să o rezolv pe următoarea”. Așa gândesc învinșii.

Luați o bucată de hârtie și un creion. Gandeste-te la asta. Poate gasesti o solutie, poate nu. Cel puțin, vei dezvolta gândirea algoritmică. Dacă nu poți veni cu o soluție într-o oră, caută o soluție gata făcută pe forum sau în articole.

Ce vei realiza cu această abordare? Învață să-ți implementezi rapid ideile folosind cod. Și studiază problemele și algoritmii clasici.

În al doilea rând, trebuie să stăpânești algoritmii și structurile de date

Urmați o abordare ierarhică. Ai început să alergi fără să știi să mergi? Nu. Poți construi un zgârie-nori fără o bază solidă? Nu din nou.

Nu poți ignora pașii de-a lungul căii de învățare. Dacă le ignori, vei rămâne cu lacune de cunoștințe. În timp, ele se vor înrăutăți.

Începeți cu algoritmi și structuri de date fundamentale

E greu să începi. Poate pentru că nu știi ce să studiezi mai întâi. De aceea Am creat un curs video „Algoritmi și structuri de date”. Când am creat acest curs, l-am bazat pe modul în care aș dori să fiu predat. Reacția a fost incredibilă! Peste 3000 de studenți din peste 100 de țări s-au înscris la curs în prima lună.

Dacă lucrezi la rezolvarea unor probleme ușoare, nu te vei îmbunătăți niciodată.

Cel mai eficient mod de a înțelege ceea ce nu știi este să-l experimentezi în practică. Așa am învățat. Am învățat multe tehnici noi despre care nu auzisem niciodată înainte, alegând o sarcină provocatoare.

Fiecare a treia problemă la care lucrați ar trebui să vă învețe ceva nou. Fii mai atent când alegi problemele. Alege probleme mai dificile!

Odată ce completați aceste 250 de probleme de la SPOJ, veți avea o înțelegere de bază a subiectelor de bază ale programării sportive. Cu o înțelegere profundă a logicii din spatele algoritmilor de bază, algoritmii de nivel înalt vor părea mai puțin complexi. În acest fel, puteți profita la maximum de cunoștințele dvs.

Aprofundați fiecare dintre temele principale

Iată o resursă valoroasă cu multe informatii. Acolo veți găsi primii 10 algoritmi și structuri de date pentru fiecare subiect. După 250 de probleme de la SPOJ, veți ști multe din această listă. Dar te vei împiedica și de multe lucruri despre care nu ai auzit niciodată până acum. Așa că începeți să studiați aceste subiecte în ordine crescătoare.

Dacă nu îți întăriști cunoștințele după ce ai învățat ceva nou, vei uita rapid totul.
Recomand ca după ce înveți un nou algoritm, să-l folosești în practică. Lucrați-l prin 2-3 sarcini. Căutați eticheta algoritm în SPOJ. Acolo veți găsi probleme care au nevoie de acest algoritm pentru a le rezolva. Abordați mai întâi aceste probleme.

Stăpânește programarea dinamică pentru că te va conduce la victorie
Din experiența mea, fiecare competiție are cel puțin o problemă programare dinamică. Mulți oameni îi doare capul când aud expresia „programare dinamică” pentru că nu o înțeleg deloc.

Și asta e bine. Pentru că dacă înțelegi programarea dinamică, atunci vei câștiga.

Îmi place programarea dinamică, este subiectul meu preferat. Secretul programării dinamice este de a face alegeri optime la nivel global, nu doar locale. Trebuie să împărțiți problema în sub-probleme mai simple. Rezolvați fiecare dintre aceste subprobleme o singură dată. Apoi creați o soluție care combină subproblemele rezolvate. Algoritm lacom - opusul programării dinamice. Este nevoie să faceți alegeri optime la nivel local la fiecare pas. Iar o alegere optimă la nivel local poate duce la o soluție globală proastă.

În timp ce învățați concepte noi, verificați Tutoriale TopCoder. Sunt foarte detaliate și ușor de înțeles. Datorită lor am putut să înțeleg arbori binari indexați.

Muncește din greu

Ați auzit vreodată de sportivi care câștigă Jocurile Olimpice fără ani de antrenament? Eu nu.

În fiecare an, pregătirile pentru Olimpiada de Calculatoare au început în septembrie și s-au încheiat în aprilie.

In fiecare zi in aceste 8 luni am exersat 5 ore.

Și da, am petrecut aceste 5 ore doar rezolvând probleme algoritmice. Îmi amintesc de zilele în care exersam 8 și chiar 10 ore. De ce? Pentru că mi-a plăcut. În fiecare zi, când mă întorceam acasă de la școală, mergeam direct în dormitor, mă așezam la computer și începeam să analizez o nouă problemă. Sau învăţam un nou algoritm pe care trebuia să-l cunosc pentru a rezolva această problemă.

Dacă vrei să câștigi, trebuie să faci același lucru. Alegeți o problemă și rămâneți la ea. Gândiți-vă la asta când mergeți la supermarket sau când conduceți.

Cum am câștigat 3 din 4 medalii de aur la olimpiada de calcul

Știai că atunci când dormi, creierul tău defragmentează informațiile colectate în acea zi? Se pare că stivuiește cărți în ordine alfabetică pe un raft. În esență, creierul tău se gândește la diferitele probleme cu care te confrunți.

Acest lucru poate fi folosit cu pricepere. Înainte de a merge la culcare, citiți o problemă dificilă și amintiți-vă ce este nevoie pentru a o rezolva. În această etapă, nu trebuie să căutați soluția în sine. Se culcă. Creierul tău va începe să proceseze această problemă. Când te trezești, vei fi surprins să realizezi că ai găsit soluția în timp ce dormeai.

Incearca-l tu insuti. E ca o magie.

Am creat un blog video

Cum am câștigat 3 din 4 medalii de aur la olimpiada de calcul

Acest scurt paragraf nu are legătură cu programarea sportivă. Dacă ai douăzeci de ani și te întrebi cum văd eu lumea, s-ar putea să vrei să verifici blogul meu video pe Youtube. Vorbesc despre lume, viață și informatică în ea.

Muncește inteligent

Acesta este secretul succesului. Ai nevoie de obiective.

Suntem oameni și ne place amâna. Întotdeauna vrem să amânăm ceea ce trebuie făcut chiar acum. Vizionarea Netflix este întotdeauna mai plăcută decât a face față problemelor de programare dinamică. Știi asta și trebuie să-l repari.

Cum să învingi procrastinarea

Stabileste-ti obiective. Veți găsi întotdeauna probleme interesante din care puteți învăța ceva nou (consultați resursele pe care le-am menționat mai sus). Dar aceste probleme trebuie rezolvate, nu doar citite despre.

Așa că iată cum am depășit amânarea. Am început un calendar de hârtie și am umplut fiecare zi cu probleme pe care voiam să le rezolv. Am completat întotdeauna problemele cu două zile înainte. Așa că am știut să-mi gestionez timpul în zilele următoare.

Cum am câștigat 3 din 4 medalii de aur la olimpiada de calcul

Așa că am fost mereu motivat. Trebuia să rezolv niște probleme și să găsesc altele noi pe care să le completez zilele următoare în calendar. Înlăturarea problemelor rezolvate se simte grozav. Stiu ca si tie iti place.

Obțineți propriul calendar de hârtie. Nu creați o altă listă de lucruri de făcut pe telefon de care veți uita mâine.

Cum să depanați eficient

Vrei să devii profesionist? Dacă da, atunci trebuie să „depanați-l în minte”.
Aceasta este de departe cea mai eficientă tehnică de depanare pe care o cunosc, deoarece nu necesită deloc un depanator. Creierul dumneavoastră examinează mai multe ramuri de cod simultan și vă oferă o imagine de ansamblu mult mai amplă a codului în comparație cu depanator clasic.

Te poți compara cu un mare maestru care joacă șah și crede că 3 mișcări înainte.

Folosesc această tehnică doar ca linie inițială de apărare. Apoi folosesc un depanator real.

Pentru a învăța cum să-ți depanezi capul, trebuie să exersezi. Când validezi o soluție la o problemă și obții un „răspuns greșit”, nu mergi direct la butonul de depanare. Recitiți codul și gândiți-vă: „Ce se întâmplă în această linie?”, „Cum afectează „dacă” aici programul?”, „Când ieșim din buclă, care este valoarea iteratorului?”

În acest fel gândești pentru tine. În timp, veți învăța să scrieți cod și să-l depanați din mers.

Despre autor

Cum am câștigat 3 din 4 medalii de aur la olimpiada de calcul
Andrei Margeloiu este un programator pasionat, cu un interes pentru antreprenoriat, startup-uri și în aer liber. Îl poți contacta pe LinkedIn.

Traducere: Diana Sheremyeva

Sursa: www.habr.com

Adauga un comentariu