Nola irabazi nituen 3tik 4 urrezko domina Informatika Olinpiadan

Nola irabazi nituen 3tik 4 urrezko domina Informatika Olinpiadan

Google HashCode World Championship Finals 2017rako prestatzen ari nintzen. Google-k antolatutako algoritmiko arazoak dituen lehiaketarik handiena da.

Bederatzigarren mailan hasi nintzen hutsetik C++ ikasten. Ez nekien ezer programazioari, algoritmoei edo datu-egiturei buruz. Noizbait nire lehen kode lerroa idatzi nuen. Zazpi hilabete geroago, programazio-lehiaketa zerumugan agertu zen. Programazioa ikasteko nire estiloa zein ondo funtzionatzen zuen ikusi nahi nuen. Aukera ezin hobea zen.

Bi eguneko lehiaren ostean, emaitzak iritsi ziren: urrezko domina irabazi nuen.

Harrituta geratu nintzen. 5 urteko esperientziarekin lehiakideen aurretik nengoen. Banekien gogor lan egin nuela, baina lorpen honek nire itxaropen guztiak gainditu zituen. Kirol programazioa nire gaia zela konturatu nintzen eta buru-belarri sartu nintzen.

Badakit zerk eraman ninduen arrakastara eta zuekin partekatu nahi dut.

Nola irabazi nituen 3tik 4 urrezko domina Informatika Olinpiadan

Artikulua EDISON Software-ren laguntzarekin itzuli da programatzaileen osasuna eta haien gosaria zaintzen dituEta software pertsonalizatua garatzen du.

Zein programazio-lengoaia aukeratu

  • C++ - Oso gomendagarria! Oso azkarra da. Algoritmoen ezarpenak denbora gutxi behar du STL dela eta. Lehiaketa guztietan C++ onartzen da. Nire lehen kode lerroa C++-n idatzi nuen.
  • C - Ikasi C++ STL dela eta. C ezagutzen baduzu, C++-n ere programa dezakezu.
  • Java programazio-lengoaia motela da. Big Integer klasea du, baina ez dizu asko lagunduko. Lehiaketa batek denbora muga bat badu, Javarekin ziur aski gaindituko duzu. Java ez da lehiaketa guztietan onartzen.

Non praktikatu dezakezu

gomendatzen dut Sphere Online Judge (SPOJ). Baliabide eraginkorra da kantitate eta kalitate aldetik. Editoreak eta irtenbideak sarean daude eskuragarri arazoak konpontzeko prozesuan trabatuta geratzen bazara. Gune honetaz gain gomendatzen dut SPOJ tresna-kutxa ΠΈ arazo sailkatzailea SPOJ.pl.

Lehenik eta behin, oinarrizko ezagutzak hobetu behar dituzu

Behin hizkuntzaren sintaxira ohituta, arazo batzuk gainditzeko daude. Hasi praktika behar duten arazo sinpleekin. Etapa honetan, gauza nagusia zure programazio estiloa zehaztea da. Beharbada, zuriune askorekin kodea idaztea gustatzen zaizu, agian ez. Baliteke parentesiak "baldin"-ren lerro berean jartzea, edo lerro ezberdinetan jartzea.

Zure programazio estiloa aurkitu behar duzu ZURE estiloa delako.

Bilatzen duzunean, gogoratu oinarrizko bi printzipio:

  • Zure kodea inplementatzeko erraza izan behar da. Eroso sentitu beharko zenuke planteatzen duzun irtenbidea ezartzen. Zergatik? Lehiaketa batean, nahi duzun azken gauza kodean galtzea baita. Beti da hobe 5 minutu gehigarri pasatzea kodearen ezarpena nola sinplifikatu pentsatzen jartzea 10 minutu hura asmatzen saiatzen baino.
  • Zure kodea irakurtzeko erraza izan behar da. Kodea erraz irakurtzen denean, erraza da arazketa. Eman dezagun: akatsak uneoro gertatzen dira. Badakizu sentsazio hori 10 minutu geratzen zaizkizunean eta akats madarikatua aurkitzen ez duzunean? Noski. Egoera hori saihesteko, idatzi kode irakurgarria. Behin arazketa egiten hasten zarenean, kodea naturala eta ulertzeko erraza izango da.

Hona hemen nire adibide bat programazio estiloa.

Nola hobetu zure garapen gaitasunak

Praktikatu, praktikatu eta praktika gehiago. Konpon daitezkeen lehenengo 250 arazoetan lan egitea gomendatzen dizut SPOJ. Ebatzi itzazu ordenan. Eman ordubete gutxienez horietako bakoitzaren konponbidean pentsatzen.

Ez esan: "Arazo hau zailegia da niretzat, hurrengoa konpontzen saiatuko naiz". Horrela pentsatzen dute galtzaileek.

Hartu paper bat eta arkatza. Pentsa ezazu. Agian irtenbideren bat aurki dezakezu, agian ez. Gutxienez, pentsamendu algoritmikoa garatuko duzu. Ordubeteko epean konponbiderik lortu ezin baduzu, bilatu prest egindako irtenbide bat foroan edo artikuluetan.

Zer lortuko duzu planteamendu honekin? Ikasi zure ideiak azkar inplementatzen kodea erabiliz. Eta problema klasikoak eta algoritmoak aztertzea.

Bigarrenik, algoritmoak eta datu-egiturak menderatu behar dituzu

Jarraitu ikuspegi hierarkikoa. Ibiltzen jakin gabe hasi zinen korrika egiten? Ez. Eraiki al dezakezu etxe orratz bat oinarri sendorik gabe? Berriro ez.

Ezin dituzu alde batera utzi ikaskuntza-bideko urratsak. Ez ikusi egiten badituzu, ezagutza hutsuneekin geratuko zara. Denborarekin okerrera egingo dute.

Hasi oinarrizko algoritmoekin eta datu-egituretatik

Zaila da hastea. Beharbada ez dakizulako zer ikasi lehen. Horregatik "Algoritmoak eta datu-egiturak" bideo-ikastaro bat sortu nuen. Ikastaro hau sortzerakoan, nola irakastea gustatuko litzaidakeen oinarritu nuen. Erreakzioa ikaragarria izan zen! 3000 herrialde baino gehiagotako 100 ikasle baino gehiagok eman zuten izena ikastaroan lehen hilabetean.

Arazo errazak konpontzen lan egiten baduzu, ez zara inoiz hobetuko.

Ez dakizuna ulertzeko modurik eraginkorrena praktikan esperimentatzea da. Horrela ikasi nuen. Inoiz entzun ez nituen teknika berri asko ikasi nituen zeregin erronka bat aukeratuz.

Lantzen duzun hirugarren arazo bakoitzak zerbait berria irakatsi behar dizu. Kontuz ibili arazoak aukeratzerakoan. Aukeratu arazo zailagoak!

SPOJko 250 arazo hauek osatu ondoren, kirol programazioaren oinarrizko gaien oinarrizko ulermena izango duzu. Oinarrizko algoritmoen atzean dagoen logikaren ulermen sakonarekin, goi-mailako algoritmoek konplexutasun txikiagoak izango dituzte. Horrela zure ezagutzari etekinik handiena atera diezaiokezu.

Sakontu gai nagusietako bakoitzean

Hona hemen baliabide baliotsu bat informazio askorekin. Bertan topatuko dituzu gai bakoitzeko 10 algoritmo eta datu-egitura nagusiak. SPOJren 250 arazoren ondoren, zerrenda honetatik asko jakingo duzu. Baina inoiz entzun ez dituzun gauza askorekin topo egingo duzu. Beraz, hasi gai hauek goranzko ordenan aztertzen.

Zerbait berria ikasi ondoren zure ezagutzak indartzen ez badituzu, azkar ahaztuko duzu dena.
Algoritmo berri bat ikasi ondoren, praktikan erabiltzea gomendatzen dut. Landu 2-3 zereginetan. Bilatu algoritmoaren etiketa SPOJn. Bertan algoritmo hau konpontzeko behar duten arazoak aurkituko dituzu. Lehenik eta behin, jorratu gai hauei.

Masterra Programazio Dinamikoa Garaipenera eramango zaituelako
Nire esperientziaren arabera, lehiaketa bakoitzak arazo bat du gutxienez programazio dinamikoa. Jende askok buruko mina izaten du β€œprogramazio dinamikoa” esaldia entzutean, ez baitute batere ulertzen.

Eta hau ona da. Programazio dinamikoa ulertzen baduzu, orduan irabaziko duzu.

Programazio dinamikoa gustatzen zait, gogoko dudan gaia da. Programazio dinamikoaren sekretua mundu mailan aukera optimoak egitea da, ez tokikoak bakarrik. Arazoa azpiarazo sinpleagoetan banatu behar duzu. Ebatzi azpiproblema hauetako bakoitza behin bakarrik. Ondoren, sortu ebatzitako azpiproblemak batzen dituen soluzioa. Greedy algoritmoa - programazio dinamikoaren kontrakoa. Urrats bakoitzean lokalki aukera optimoak egitea eskatzen du. Eta tokian tokiko aukera optimo batek irtenbide global txarra ekar dezake.

Kontzeptu berriak ikasten ari zaren bitartean, begiratu TopCoder tutorialak. Oso zehatzak eta ulergarriak dira. Haiei esker ulertu ahal izan nuen indexatutako zuhaitz bitarrak.

Gogor lan egin

Entzun al duzu inoiz urtez praktikatu gabe Olinpiar Jokoak irabazten dituzten kirolarien berri? Ni ez.

Urtero, irailean hasi eta apirilean amaitzen ziren Informatika Olinpiadarako prestaketak.

8 hilabete hauetan egunero 5 orduz aritu nintzen.

Eta bai, 5 ordu hauek problema algoritmikoak konpontzen bakarrik eman ditut. Gogoan dut 8 eta baita 10 orduz ere entrenatzen nuen egunak. Zergatik? Gustatu zaidalako. Egunero eskolatik etxera itzultzen nintzenean, zuzenean logelara joaten nintzen, ordenagailuaren aurrean eseri eta arazo berri bat aztertzen hasi nintzen. Edo arazo hau konpontzeko jakin behar nuen algoritmo berri bat ikasten ari nintzen.

Irabazi nahi baduzu, berdin egin behar duzu. Aukeratu arazo bat eta eutsi. Pentsa ezazu supermerkatura oinez edo gidatzen duzun bitartean.

Nola irabazi nituen 3tik 4 urrezko domina Informatika Olinpiadan

Ba al zenekien lo egiten duzunean zure garunak egun horretan jasotako informazioa desfragmentatzen duela? Liburuak apal batean ordena alfabetikoan pilatzen ari dela dirudi. Funtsean, zure garunak jasaten dituzun arazo ezberdinei buruz pentsatzen du.

Hau trebetasunez erabil daiteke. Oheratu aurretik, irakurri arazo zail bat eta gogoratu zer behar den konpontzeko. Etapa honetan, ez duzu irtenbidea bera bilatu beharrik. Joan zaitez ohera. Zure garuna arazo hau prozesatzen hasiko da. Esnatzean, harrituta geratuko zara lo zeundela konponbidea aurkitu duzula.

Probatu zeure burua. Magia bezalakoa da.

Bideo blog bat sortu dut

Nola irabazi nituen 3tik 4 urrezko domina Informatika Olinpiadan

Paragrafo labur hau ez dago kirol programazioarekin zerikusirik. Hogeita hamar urte badituzu eta mundua nola ikusten dudan galdetzen baduzu, baliteke begiratu nahi izatea nire bideo bloga Youtuben. Munduari, bizitzari eta informatikari buruz hitz egiten dut bertan.

Lan egin adimentsu

Hau da arrakastaren sekretua. Helburuak behar dituzu.

Pertsonak gara eta gustatzen zaigu atzeratu. Oraintxe bertan egin beharrekoa atzeratu nahi dugu beti. Netflix ikustea beti da atseginagoa programazio dinamikoko arazoei aurre egitea baino. Badakizu hau eta konpondu behar duzu.

Nola gainditu procrastinazioa

Ezarri zure buruari helburuak. Beti aurkituko dituzu arazo interesgarriak, haietatik zerbait berria ikasteko (ikusi goian aipatu ditudan baliabideak). Baina arazo hauek konpondu behar dira, ez bakarrik irakurri.

Beraz, hona nola gainditu nuen procrastinazioa. Paperezko egutegi bat hasi eta egunero bete nahi nituen arazoekin. Arazoak bi egun lehenago betetzen nituen beti. Beraz, ondoko egunetan nire denbora kudeatzen jakin nuen.

Nola irabazi nituen 3tik 4 urrezko domina Informatika Olinpiadan

Beraz, beti nengoen motibatuta. Arazo batzuk konpondu eta egutegian hurrengo egunak betetzeko berriak bilatu behar nituen. Ebatzitako arazoak ezabatzea oso ona da. Badakit zuri ere gustatzen zaizula.

Lortu zure paperezko egutegia. Ez sortu bihar ahaztuko duzun beste zeregin-zerrenda bat zure telefonoan.

Nola arazketa eraginkorra

Profesional bihurtu nahi al duzu? Baiezkoa bada, "araztu zure buruan" behar duzu.
Ezagutzen dudan arazketa-teknikarik eraginkorrena da hau, ez baitu batere arazterik behar. Zure garunak kode-adar anitz aztertzen ditu aldi berean eta kodearen ikuspegi orokorragoa ematen dizu. arazketa klasikoa.

Xakean jokatzen duen eta 3 mugimendu aurreratzen dituen maisu nagusi batekin konparatu dezakezu.

Teknika hau nire hasierako defentsa lerro gisa soilik erabiltzen dut. Orduan benetako arazketa bat erabiltzen dut.

Zure buruan arazketan ikasteko, praktikatu behar duzu. Arazo baten irtenbidea baliozkotzen duzunean eta "erantzun okerra" lortzen duzunean, ez joan zuzenean arazketa-botoira. Berriro irakurri kodea eta pentsatu: "Zer gertatzen ari da lerro honetan?", "Nola eragiten dio hemen "baldin"-ek programari?", "Begiztatik irteten garenean, zein da iteratzailearen balioa?"

Horrela, zuk zeuk pentsatzen duzu. Denborarekin, kodea idazten eta hegan arakatzen ikasiko duzu.

Egileari buruz

Nola irabazi nituen 3tik 4 urrezko domina Informatika Olinpiadan
Andrei Margeloiu programatzaile amorratua da, ekintzailetza, startup-ak eta aire librean interesa duena. Berarekin harremanetan jar zaitezke LinkedIn-en.

Itzulpena: Diana Sheremyeva

Iturria: www.habr.com

Gehitu iruzkin berria