Si fitova 3 nga 4 medaljet e arta në Olimpiadën e Informatikës

Si fitova 3 nga 4 medaljet e arta në Olimpiadën e Informatikës

Po përgatitesha për finalet e Kampionatit Botëror të Google HashCode 2017. Ky është konkursi më i madh me probleme algoritmike të organizuar nga Google.

Fillova të mësoj C++ nga e para në klasën e nëntë. Nuk dija asgjë për programimin, algoritmet apo strukturat e të dhënave. Në një moment shkrova rreshtin tim të parë të kodit. Shtatë muaj më vonë, konkurrenca e programimit u shfaq në horizont. Doja të shihja se sa mirë funksiononte stili im i të mësuarit të programimit. Ishte mundësia perfekte.

Pas dy ditësh garë erdhën rezultatet: fitova medaljen e artë.

Unë u trondita. Isha përpara konkurrentëve me 5 vite përvojë. E dija se kisha punuar shumë, por kjo arritje i tejkaloi të gjitha pritjet e mia. E kuptova që programimi sportiv ishte tema ime dhe u futa në të me kokë.

Unë e di se çfarë më çoi drejt suksesit dhe dua ta ndaj me ju.

Si fitova 3 nga 4 medaljet e arta në Olimpiadën e Informatikës

Artikulli është përkthyer me mbështetjen e EDISON Software, i cili kujdeset për shëndetin e programuesve dhe mëngjesin e tyreDhe zhvillon softuer të personalizuar.

Cila gjuhë programimi të zgjidhni

  • C++ - Rekomandohet shumë! Ai është shumë i shpejtë. Zbatimi i algoritmeve kërkon pak kohë për shkak të STL. C++ pranohet në të gjitha garat. Kam shkruar rreshtin tim të parë të kodit në C++.
  • C - Mësoni C++ për shkak të STL. Nëse dini C, mund të programoni edhe në C++.
  • Java është një gjuhë programimi e ngadaltë. Ka një klasë Big Integer, por nuk do t'ju ndihmojë shumë. Nëse një konkurs ka një kufi kohor, me Java-n me siguri do ta tejkaloni atë. Java nuk pranohet në të gjitha konkurset.

Ku mund të praktikoni

Rekomandoj Gjyqtari Sphere Online (SPOJ). Është një burim efektiv për sa i përket sasisë dhe cilësisë. Redaktorët dhe zgjidhjet janë të disponueshme në internet nëse ngecni në procesin e zgjidhjes së problemeve. Përveç kësaj faqeje unë rekomandoj SPOJ Toolkit и klasifikuesi i problemit për SPOJ.pl.

Së pari, duhet të përmirësoni njohuritë tuaja për bazat

Pasi të mësoheni me sintaksën e gjuhës, ka disa probleme për të kapërcyer. Filloni me probleme të thjeshta që kërkojnë praktikë. Në këtë fazë, gjëja kryesore është të përcaktoni stilin tuaj të programimit. Ndoshta ju pëlqen të shkruani kod me shumë hapësira të bardha, ndoshta jo. Ju mund t'i vendosni kllapat në të njëjtën linjë me "nëse", ose mund t'i vendosni ato në rreshta të veçantë.

Ju duhet të gjeni stilin tuaj të programimit, sepse është stili juaj.

Kur e kërkoni, mbani mend dy parime themelore:

  • Kodi juaj duhet të jetë i lehtë për t'u zbatuar. Ju duhet të ndiheni rehat duke zbatuar zgjidhjen që keni dalë. Pse? Sepse gjatë një konkursi, gjëja e fundit që dëshironi është të humbni në kodin tuaj. Është gjithmonë më mirë të shpenzoni 5 minuta shtesë duke menduar se si të thjeshtoni zbatimin e kodit sesa të shpenzoni 10 minuta duke u përpjekur ta kuptoni atë.
  • Kodi juaj duhet të jetë i lehtë për t'u lexuar. Kur kodi është i lehtë për t'u lexuar, është e lehtë të korrigjohet. Le ta pranojmë - defektet ndodhin gjatë gjithë kohës. E njeh atë ndjesinë kur të kanë mbetur edhe 10 minuta dhe nuk mund ta gjesh gabimin e mallkuar? Sigurisht që po. Për të shmangur këtë situatë, shkruani kod të lexueshëm. Pasi të filloni korrigjimin e tij, kodi do të duket i natyrshëm dhe i lehtë për t'u kuptuar.

Këtu është një shembull i imi stil programimi.

Si të përmirësoni aftësitë tuaja zhvillimore

Praktikoni, praktikoni dhe më shumë praktikë. Unë ju rekomandoj që të punoni me 250 problemet e para më të zgjidhshme SPOJ. Zgjidhini ato sipas renditjes. Kaloni të paktën një orë duke menduar për zgjidhjen e secilit prej tyre.

Mos thuaj: "Ky problem është shumë i vështirë për mua, do të përpiqem ta zgjidh problemin tjetër". Kështu mendojnë humbësit.

Merrni një copë letër dhe një laps. Mendoni për këtë. Ndoshta ju mund të gjeni një zgjidhje, ndoshta jo. Në minimum, ju do të zhvilloni të menduarit algoritmik. Nëse nuk arrini të gjeni një zgjidhje brenda një ore, kërkoni një zgjidhje të gatshme në forum ose në artikuj.

Çfarë do të arrini me këtë qasje? Mësoni të zbatoni shpejt idetë tuaja duke përdorur kodin. Dhe studio problemet dhe algoritmet klasike.

Së dyti, ju duhet të zotëroni algoritmet dhe strukturat e të dhënave

Ndiqni një qasje hierarkike. Filluat të vraponi pa ditur të ecni? Nr. A mund të ndërtoni një rrokaqiell pa një themel të fortë? Jo perseri.

Ju nuk mund të injoroni hapat përgjatë rrugës së të mësuarit. Nëse i shpërfillni, do të mbeteni me boshllëqe njohurish. Me kalimin e kohës ato vetëm do të përkeqësohen.

Filloni me algoritmet themelore dhe strukturat e të dhënave

Është e vështirë për të filluar. Ndoshta sepse nuk dini çfarë të studioni më parë. Kjo është arsyeja pse Kam krijuar një kurs video "Algoritmet dhe strukturat e të dhënave". Kur krijova këtë kurs, e bazova atë në mënyrën se si do të doja të mësoja. Reagimi ishte i pabesueshëm! Më shumë se 3000 studentë nga mbi 100 vende u regjistruan për kursin në muajin e parë.

Nëse punoni për zgjidhjen e problemeve të lehta, nuk do të përmirësoheni kurrë.

Mënyra më efektive për të kuptuar atë që nuk dini është ta përjetoni atë në praktikë. Kështu mësova. Mësova shumë teknika të reja për të cilat nuk kisha dëgjuar kurrë më parë duke zgjedhur një detyrë sfiduese.

Çdo problem i tretë me të cilin punoni duhet t'ju mësojë diçka të re. Tregohuni më të kujdesshëm kur zgjidhni problemet. Zgjidhni probleme më të vështira!

Pasi të plotësoni këto 250 probleme nga SPOJ, do të keni një kuptim bazë të temave thelbësore të programimit sportiv. Me një kuptim të thellë të logjikës prapa algoritmeve bazë, algoritmet e nivelit të lartë do të duken më pak komplekse. Në këtë mënyrë ju mund të shfrytëzoni sa më shumë njohuritë tuaja.

Gërmoni më thellë në secilën nga temat kryesore

Këtu është një burim i vlefshëm me shumë informacion. Aty do të gjeni 10 algoritmet kryesore dhe strukturat e të dhënave për secilën temë. Pas 250 problemeve nga SPOJ, do të dini shumë nga kjo listë. Por do të pengoheni edhe në shumë gjëra për të cilat nuk keni dëgjuar kurrë më parë. Pra, filloni t'i studioni këto tema në rend rritës.

Nëse nuk i forconi njohuritë tuaja pasi mësoni diçka të re, do të harroni shpejt gjithçka.
Unë rekomandoj që pasi të mësoni një algoritëm të ri, ta përdorni në praktikë. Punoni me 2-3 detyra. Kërkoni etiketën e algoritmit në SPOJ. Aty do të gjeni probleme që kanë nevojë për zgjidhjen e këtij algoritmi. Fillimisht trajtojini këto çështje.

Zotëroni programimin dinamik sepse do t'ju çojë drejt fitores
Nga përvoja ime, çdo garë ka të paktën një problem programim dinamik. Shumë njerëzve u dhemb koka kur dëgjojnë shprehjen “programim dinamik” sepse nuk e kuptojnë fare.

Dhe kjo është e mirë. Sepse nëse kupton programim dinamik, atëherë do të fitosh.

Më pëlqen programimi dinamik, është tema ime e preferuar. Sekreti i programimit dinamik është të bësh zgjedhje optimale globalisht, jo vetëm ato lokale. Ju duhet ta zbërtheni problemin në nënprobleme më të thjeshta. Zgjidheni secilën nga këto nënprobleme vetëm një herë. Më pas krijoni një zgjidhje që kombinon nënproblemet e zgjidhura. Algoritmi i pangopur - e kundërta e programimit dinamik. Kërkon marrjen e zgjedhjeve optimale në nivel lokal në çdo hap. Dhe një zgjedhje optimale në nivel lokal mund të çojë në një zgjidhje të keqe globale.

Ndërsa mësoni koncepte të reja, shikoni Tutoriale TopCoder. Ato janë shumë të detajuara dhe të kuptueshme. Falë tyre arrita të kuptoj pemët e indeksuara binare.

Punoni shumë

A keni dëgjuar ndonjëherë për atletë që fitojnë Olimpiadën pa vite praktikë? Unë jo.

Çdo vit, përgatitjet për Olimpiadën e Kompjuterave fillonin në shtator dhe përfundonin në prill.

Çdo ditë për këta 8 muaj kam ushtruar nga 5 orë.

Dhe po, këto 5 orë i kalova vetëm duke zgjidhur probleme algoritmike. Më kujtohen ditët kur ushtrohesha për 8 dhe madje 10 orë. Pse? Sepse më pëlqeu. Çdo ditë kur kthehesha nga shkolla, shkoja direkt në dhomën e gjumit, u ula në kompjuter dhe fillova të analizoja një problem të ri. Ose po mësoja një algoritëm të ri që duhej ta dija për të zgjidhur këtë problem.

Nëse doni të fitoni, duhet të bëni të njëjtën gjë. Zgjidh një problem dhe qëndro tek ai. Mendoni për këtë gjatë ecjes në supermarket ose gjatë vozitjes.

Si fitova 3 nga 4 medaljet e arta në Olimpiadën e Informatikës

A e dini se kur flini, truri juaj defragmon informacionin e mbledhur atë ditë? Ai duket se po grumbullon libra sipas rendit alfabetik në një raft librash. Në thelb, truri juaj mendon për problemet e ndryshme me të cilat po përballeni.

Kjo mund të përdoret me shkathtësi. Para se të shkoni në shtrat, lexoni një problem të vështirë dhe mbani mend se çfarë duhet për ta zgjidhur atë. Në këtë fazë, nuk keni nevojë të kërkoni vetë zgjidhjen. Shkoni në shtrat. Truri juaj do të fillojë ta përpunojë këtë problem. Kur të zgjoheni, do të habiteni kur do të kuptoni se e gjetët zgjidhjen ndërsa ishit në gjumë.

Provojeni vetë. Është si magji.

Kam krijuar një blog video

Si fitova 3 nga 4 medaljet e arta në Olimpiadën e Informatikës

Ky paragraf i shkurtër nuk lidhet me programet sportive. Nëse jeni në të njëzetat dhe pyesni veten se si e shoh botën, mund të dëshironi të shikoni blogu im i videos në Youtube. Unë flas për botën, jetën dhe shkencën kompjuterike në të.

Punoni zgjuar

Ky është sekreti i suksesit. Keni nevojë për qëllime.

Ne jemi njerëz dhe na pëlqen prokrastinirovatь. Ne gjithmonë duam të shtyjmë atë që duhet bërë tani. Shikimi i Netflix është gjithmonë më i këndshëm sesa përballja me problemet dinamike të programimit. Ju e dini këtë dhe duhet ta rregulloni.

Si të mposhtni zvarritjen

Vendosni vetes synime. Gjithmonë do të gjeni probleme interesante nga të cilat mund të mësoni diçka të re (shikoni burimet që përmenda më lart). Por këto probleme duhet të zgjidhen, jo vetëm të lexohen.

Pra, ja se si e kapërceva zvarritjen. Fillova një kalendar letre dhe mbushja çdo ditë me probleme që doja të zgjidhja. Problemet i plotësoja gjithmonë dy ditë përpara. Kështu që dita si ta menaxhoja kohën time në ditët në vijim.

Si fitova 3 nga 4 medaljet e arta në Olimpiadën e Informatikës

Kështu që kam qenë gjithmonë i motivuar. Më duhej të zgjidhja disa probleme dhe të gjeja të reja për të mbushur ditët në vijim në kalendar. Kryqëzimi i problemeve të zgjidhura ndihet mirë. E di që edhe juve ju pëlqen.

Merrni kalendarin tuaj në letër. Mos krijoni një listë tjetër detyrash në telefonin tuaj që do t'i harroni nesër.

Si të korrigjoni në mënyrë efektive

Dëshironi të bëheni profesionist? Nëse po, atëherë ju duhet ta "debutoni atë në mendjen tuaj".
Kjo është teknika më efikase e korrigjimit që njoh, sepse nuk kërkon fare një korrigjues. Truri juaj shqyrton degë të shumta kodi në të njëjtën kohë dhe ju jep një pasqyrë shumë më të gjerë të kodit në krahasim me korrigjues klasik.

Mund ta krahasoni veten me një mjeshtër të madh që luan shah dhe mendon 3 lëvizje përpara.

Unë e përdor këtë teknikë vetëm si linjën time fillestare të mbrojtjes. Pastaj përdor një korrigjues të vërtetë.

Për të mësuar se si të korrigjoni gabimet në kokën tuaj, duhet të praktikoni. Kur vërtetoni një zgjidhje për një problem dhe merrni një "përgjigje të gabuar", mos shkoni direkt te butoni i korrigjimit. Rilexoni kodin dhe mendoni: "Çfarë po ndodh në këtë rresht?", "Si ndikon "nëse" këtu në program?", "Kur dalim nga cikli, sa është vlera e përsëritësit?"

Në këtë mënyrë ju mendoni vetë. Me kalimin e kohës, do të mësoni të shkruani kodin dhe të korrigjoni atë menjëherë.

Rreth Autorit

Si fitova 3 nga 4 medaljet e arta në Olimpiadën e Informatikës
Andrei Margeloiu është një programues i zjarrtë me interes për sipërmarrjen, startup-et dhe botën e jashtme. Mund ta kontaktoni në LinkedIn.

Përkthim: Diana Sheremyeva

Burimi: www.habr.com

Shto një koment