Giunsa nako nakadaog ang 3 sa 4 ka bulawan nga medalya sa Computing Olympiad

Giunsa nako nakadaog ang 3 sa 4 ka bulawan nga medalya sa Computing Olympiad

Nangandam na ko alang sa Google HashCode World Championship Final sa 2017. Kini ang pinakadako nga algorithmic challenge contest nga gi-organisar sa Google.

Nagsugod ko sa pagkat-on sa C++ gikan sa sinugdanan sa ikasiyam nga grado. Wala koy nahibal-an bahin sa programming, algorithm ug istruktura sa datos. Sa usa ka punto, gisulat nako ang akong una nga linya sa code. Paglabay sa pito ka bulan, usa ka kompetisyon sa programming ang nag-abut sa kapunawpunawan. Gusto nakong mahibal-an kung unsa ka maayo ang akong estilo sa pagkat-on sa programming. Kini ang hingpit nga oportunidad.

Human sa duha ka adlaw nga kompetisyon, miabut ang resulta: Nadaog ko ang bulawang medalya.

Nakurat ko. Nag-una ako sa kompetisyon nga adunay 5 ka tuig nga kasinatian. Nahibal-an ko nga nagtrabaho ako og maayo, apan kini nga kalampusan milabaw sa tanan nakong gipaabut. Nakaamgo ko nga ang sports programming mao ang akong hilisgutan ug gisulod kini sa akong ulo.

Nahibal-an ko kung unsa ang nagdala kanako sa kalampusan ug gusto nako nga ipaambit kini kanimo.

Giunsa nako nakadaog ang 3 sa 4 ka bulawan nga medalya sa Computing Olympiad

Ang artikulo gihubad uban ang suporta sa EDISON Software, nga nag-atiman sa kahimsog sa mga programmer ug sa ilang pamahawUg nagpalambo sa naandan nga software.

Unsa nga programming language ang pilion

  • C++ - Girekomendar kaayo! Paspas kaayo siya. Ang pagpatuman sa mga algorithm nagkinahanglan og gamay nga panahon tungod sa STL. Ang C++ gidawat sa tanang kompetisyon. Gisulat nako ang akong una nga linya sa code sa C++.
  • C - pagkat-on sa C++ tungod sa STL. Kung nahibal-an nimo ang C, mahimo ka usab nga magprograma sa C++.
  • Ang Java usa ka hinay nga programming language. Adunay kini usa ka Big Integer nga klase, apan dili kini makatabang kanimo. Kung ang kompetisyon adunay limitasyon sa oras, sa Java siguradong molapas ka niini. Ang Java dili gidawat sa tanan nga kompetisyon.

Asa ka makapraktis

Gisugyot ko Sphere Online Judge (SPOJ). Kini usa ka episyente nga kapanguhaan sa natad sa gidaghanon ug kalidad. Ang mga editor ug mga solusyon anaa sa internet kung na-stuck ka sa proseso sa pag-troubleshoot. Dugang sa kini nga site, girekomenda ko Toolkit sa SPOJ и classifier sa problema para sa SPOJ.pl.

Una, kinahanglan nimong pauswagon ang imong kahibalo sa mga sukaranan

Human nimo maanad sa syntax sa pinulongan, kinahanglan nimong sulbaron ang pipila ka mga problema. Pagsugod sa yano nga mga problema nga nanginahanglan pagpraktis. Niini nga yugto, ang panguna nga butang mao ang pagtino sa imong istilo sa pagprograma. Tingali ganahan ka magsulat og code nga adunay daghang mga espasyo, tingali dili. Mahimo nimong ibutang ang mga parentesis sa parehas nga linya sa "kon", o mahimo nimong ibutang kini sa lainlaing mga linya.

Kinahanglan nimo pangitaon ang imong istilo sa pagprograma tungod kay kini imong istilo.

Samtang mangita ka niini, ibutang sa hunahuna ang duha ka sukaranang mga prinsipyo:

  • Ang imong code kinahanglan nga sayon ​​​​nga ipatuman. Kinahanglan nga komportable ka sa pagpatuman sa solusyon nga imong nahimo. Ngano man? Tungod kay sa panahon sa usa ka kompetisyon, ang katapusan nga butang nga imong gusto mao ang mawala sa imong code. Kanunay nga mas maayo nga mogahin og dugang nga 5 ka minuto sa paghunahuna kon unsaon pagpayano ang pagpatuman sa code kay sa paggugol ug 10 ka minuto sa pagsulay sa paghunahuna niini.
  • Ang imong code kinahanglan nga dali basahon. Kung ang code dali nga basahon, dali nga i-debug. Atong atubangon kini - ang mga sayop mahitabo sa tanang panahon. Nahibal-an nimo kana nga pagbati kung adunay nahabilin nga 10 minuto ug dili nimo makit-an ang sayup nga sayup? Siyempre imong buhaton. Aron malikayan kini nga sitwasyon, isulat ang mabasa nga code. Kung magsugod ka sa pag-debug niini, ang code mobati nga natural ug dali masabtan.

Ania ang akong pananglitan estilo sa programming.

Unsaon pagpauswag sa imong kahanas sa pag-uswag

Pagpraktis, pagpraktis ug dugang pagpraktis. Girekomenda ko nga imong buhaton ang una nga 250 nga labing masulbad nga mga problema sa SPOJ. Pagsulbad niini sa han-ay. Paggahin ug labing menos usa ka oras sa paghunahuna bahin sa solusyon sa matag usa kanila.

Ayaw pag-ingon, "Kini nga problema lisud kaayo alang kanako, sulayan nako ang sunod." Ingon niini ang paghunahuna sa mga napildi.

Pagkuha og usa ka piraso nga papel ug lapis. Hunahunaa. Basin makakita ka ug solusyon, basin dili. Sa labing gamay, mapalambo nimo ang algorithmic nga panghunahuna. Kung dili ka makahimo og solusyon sulod sa usa ka oras, pangitaa ang andam nga solusyon sa forum o sa mga artikulo.

Unsay imong makab-ot niini nga paagi? Hibal-i kung giunsa ang dali nga pagpatuman sa imong mga ideya gamit ang code. Ug pagkat-on sa klasikal nga mga problema ug mga algorithm.

Ikaduha, kinahanglan ka mag-master sa mga algorithm ug istruktura sa datos

Pagsunod sa usa ka hierarchical nga pamaagi. Nagsugod ka ba sa pagdagan nga wala ka makalakaw? Dili. Makahimo ka ba og usa ka skyscraper nga walay lig-on nga pundasyon? Pag-usab dili.

Dili nimo mabalewala ang mga yugto sa dalan sa pagkat-on. Kung imo silang ibaliwala, mabiyaan ka sa mga kal-ang sa kahibalo. Sa paglabay sa panahon, mosamot sila.

Pagsugod sa sukaranang mga algorithm ug istruktura sa datos

Lisod sugdan. Tingali tungod kay wala ka mahibal-an kung unsa ang una nga tun-an. Mao nga Naghimo ko og video course nga "Algorithms and Data Structures". Sa paghimo niini nga kurso, nagsalig ko kon unsaon nako nga matudloan. Ang tubag talagsaon! Kapin sa 3000 ka mga estudyante gikan sa kapin sa 100 ka mga nasud ang nagpalista alang sa kurso sa unang bulan.

Kung nagtrabaho ka sa pagsulbad sa dali nga mga problema, dili ka mamaayo.

Ang labing epektibo nga paagi aron mahibal-an kung unsa ang wala nimo nahibal-an mao ang pag-atubang niini sa praktis. Mao to nakat-on ko. Nakakat-on ko og daghang bag-ong mga teknik nga wala pa nako madungog kaniadto pinaagi sa pagpili og lisud nga problema.

Ang matag ikatulo nga problema nga imong gitrabaho kinahanglan magtudlo kanimo usa ka bag-ong butang. Pag-amping sa pagpili sa mga problema. Pilia ang mas lisud nga mga problema!

Kung nahuman na nimo kini nga 250 nga mga problema gikan sa SPOJ, makabaton ka usa ka kinatibuk-ang pagsabut sa mga nag-unang hilisgutan sa programming sa sports. Uban sa usa ka lawom nga pagsabut sa lohika luyo sa sukaranang mga algorithm, ang taas nga lebel nga mga algorithm dili ingon ka komplikado. Sa ingon, mahimo nimong gamiton ang imong kahibalo sa labing kataas.

Pagkalot og lawom sa matag usa sa mga nag-unang tema

Ania ang usa ka bililhon nga kapanguhaan nga adunay daghang impormasyon. Didto makit-an nimo ang nanguna nga 10 nga mga algorithm ug istruktura sa datos alang sa matag hilisgutan. Pagkahuman sa 250 nga mga problema gikan sa SPOJ, daghan ka nga mahibal-an gikan sa kini nga lista. Apan mapandol usab ka sa daghan nga wala pa nimo madungog kaniadto. Busa sugdi ang pagsuhid niini nga mga hilisgutan sa pataas nga han-ay.

Kung dili nimo palig-onon ang imong kahibalo pagkahuman nimo nahibal-an ang usa ka bag-o, dali nimo makalimtan ang tanan.
Girekomenda ko nga pagkahuman nimo mahibal-an ang usa ka bag-ong algorithm, buhata kini. Buhata kini sa 2-3 nga mga buluhaton. Pangitaa ang algorithm nga tag sa SPOJ. Didto makit-an nimo ang mga problema diin gikinahanglan kini nga algorithm. Atubanga una kini nga mga isyu.

Sabta ang dinamikong programming tungod kay kini magdala kanimo sa kadaugan
Sa akong kasinatian, ang matag kompetisyon adunay labing menos usa ka problema dinamikong programming. Daghang mga tawo ang nasakit sa ulo kung makadungog sila sa hugpong sa mga pulong nga "dinamikong programming" tungod kay wala nila kini kasabot.

Ug kini maayo. Kay kung nakasabot ka sa dinamikong programming, unya modaog ka.

Ganahan ko sa dinamikong programming, kini ang akong paborito nga hilisgutan. Ang sekreto sa dinamikong programming mao ang paghimo sa labing maayo nga mga pagpili sa tibuok kalibutan, dili lamang sa mga lokal. Kinahanglan nimong bungkagon ang problema ngadto sa mas simple nga mga subtasks. Pagsulbad sa matag usa niini nga mga subproblema kausa lang. Dayon paghimo og solusyon nga naghiusa sa nasulbad nga mga subproblema. Hakog nga Algoritma mao ang kaatbang sa dinamikong programming. Niini, kinahanglan nga maghimo usa ka lokal nga labing maayo nga pagpili sa matag lakang. Ug ang usa ka lokal nga labing maayo nga pagpili mahimong mosangpot sa usa ka dili maayo nga solusyon sa kalibutan.

Samtang nagsuhid ka sa bag-ong mga konsepto, susiha Mga tutorial sa TopCoder. Detalyado kaayo sila ug masabtan. Salamat nila nakasabot ko binary indexed nga mga kahoy.

pagtrabaho og maayo

Nakadungog ka na ba bahin sa mga atleta nga nakadaog sa Olympics nga wala’y mga tuig nga praktis? Ako dili.

Matag tuig, ang pagpangandam alang sa Computer Olympiad nagsugod sa Septiyembre ug natapos sa Abril.

Kada adlaw sulod niining 8 ka bulan nagpraktis ko sulod sa 5 ka oras.

Ug oo, gigugol nako kini nga mga oras nga 5 lamang sa pagsulbad sa mga problema sa algorithm. Nahinumdom ko sa mga adlaw nga nagpraktis ko sulod sa 8 ug bisan 10 ka oras. Ngano man? Kay ganahan ko. Kada adlaw, sa pagpauli gikan sa eskwelahan, midiretso ko sa kwarto, milingkod sa computer ug nagsugod sa pagsulbad sa bag-ong problema. O pagkat-on sa usa ka bag-ong algorithm nga kinahanglan mahibal-an aron masulbad kini nga problema.

Kung gusto nimo nga modaog, kinahanglan nimo nga buhaton ang parehas. Pagpili usa ka problema ug ipadayon kini. Hunahunaa kini samtang naglakaw sa dalan paingon sa supermarket o samtang nagdrayb.

Giunsa nako nakadaog ang 3 sa 4 ka bulawan nga medalya sa Computing Olympiad

Nahibalo ka ba nga sa panahon sa pagkatulog, ang imong utok mag-defragment sa impormasyon nga nakolekta nianang adlawa? Morag nagtapok siyag mga libro sa alpabetikong han-ay sa usa ka bookshelf. Sa tinuud, ang imong utok naghunahuna bahin sa lainlaing mga problema nga imong giatubang.

Mahimo kining gamiton nga hanas. Sa dili pa matulog, basaha ang usa ka lisud nga problema ug hinumdomi kung unsa ang kinahanglan aron masulbad kini. Niini nga yugto, dili nimo kinahanglan pangitaon ang solusyon mismo. Paghigda. Ang imong utok magsugod sa pagproseso niini nga problema. Sa imong pagmata, matingala ka sa pagkaamgo nga imong nakit-an ang solusyon samtang ikaw natulog.

Sulayi kini sa imong kaugalingon. Morag magic.

Nagbuhat ko ug vlog

Giunsa nako nakadaog ang 3 sa 4 ka bulawan nga medalya sa Computing Olympiad

Kini nga mubo nga parapo wala’y kalabotan sa programming sa sports. Kung naa ka sa imong baynte anyos ug nahibulong ka kung giunsa nako pagtan-aw ang kalibutan, nan mahimo nimong tan-awon akong vlog sa Youtube. Nagsulti ako niini bahin sa kalibutan, kinabuhi ug informatics.

Trabaho nga maalamon

Kini ang sekreto sa kalampusan. Kinahanglan nimo ang mga tumong.

Tawo mi ug ganahan mi paglangay-langay. Gusto namon kanunay nga ihunong ang kinahanglan buhaton karon. Ang pagtan-aw sa Netflix kanunay nga mas makalingaw kaysa pag-atubang sa mga dinamikong problema sa programming. Nahibal-an nimo kini ug kinahanglan nimo kini ayohon.

Unsaon pagbuntog sa paglangay-langay

Paghimo og mga tumong sa imong kaugalingon. Kanunay ka nga makit-an ang makapaikag nga mga problema diin makakat-on ka usa ka bag-ong butang (susiha ang mga kapanguhaan nga akong gihisgutan sa ibabaw). Apan kini nga mga problema kinahanglan nga sulbaron, dili lamang basaha ang bahin niini.

Busa, ania kung giunsa nako pagbuntog ang paglangay-langay. Nagsugod ko og papel nga kalendaryo ug gipuno kada adlaw ang mga problema nga gusto nakong sulbaron. Kanunay kong pun-an ang mga problema daan, duha ka adlaw nga sayo. Busa nahibal-an ko kung unsaon pagdumala ang akong oras sa sunod nga mga adlaw.

Giunsa nako nakadaog ang 3 sa 4 ka bulawan nga medalya sa Computing Olympiad

Busa ako kanunay nga nadasig. Kinahanglan nakong sulbaron ang pipila ka mga problema ug mangita og mga bag-o aron mapuno sa sunod nga mga adlaw sa kalendaryo. Ang pagtabok sa nasulbad nga mga problema nindot kaayo. I know ganahan sab ka.

Pagkuha sa imong kaugalingon nga kalendaryo sa papel. Ayaw paghimo og laing listahan sa mga buluhaton sa imong telepono nga imong makalimtan ugma.

Giunsa ang pag-debug nga epektibo

Gusto ba nimo nga mahimong usa ka propesyonal? Kung oo, nan kinahanglan nimo nga "i-debug sa imong hunahuna".
Kini ang labing episyente nga pamaagi sa pag-debug nga akong nahibal-an tungod kay wala kini magkinahanglan usa ka debugger. Ang imong utok nagsuhid sa daghang mga sanga sa code sa parehas nga oras ug naghatag kanimo usa ka labi ka halapad nga pagtan-aw sa code kaysa klasiko nga debugger.

Mahimo nimong itandi ang imong kaugalingon sa usa ka grandmaster nga nagdula og chess ug naghunahuna nga 3 ka lihok sa unahan.

Gigamit nako kini nga teknik nga eksklusibo isip akong inisyal nga linya sa depensa. Unya migamit ko ug tinuod nga debugger.

Aron makat-on unsaon "pag-debage sa imong hunahuna", kinahanglan ka nga magpraktis. Kung aprobahan nimo ang usa ka solusyon sa usa ka problema ug makakuha og "sayup nga tubag", ayaw pagdiretso sa debugger button. Basaha pag-usab ang code ug hunahunaa: "Unsa ang nahitabo niini nga linya?", "Sa unsang paagi ang "kon" makaapekto sa programa dinhi?", "Sa dihang migawas kami sa loop, unsa ang bili sa iterator?".

Busa hunahunaa ang imong kaugalingon. Sa paglabay sa panahon, makakat-on ka kung unsaon pagsulat ang code ug pag-debug niini samtang naglakaw.

Bahin sa tagsulat

Giunsa nako nakadaog ang 3 sa 4 ka bulawan nga medalya sa Computing Olympiad
Si Andrei Margeloiu usa ka avid programmer nga adunay interes sa entrepreneurship, startups ug nature. Mahimo nimong kontakon siya sa LinkedIn.

Paghubad: Diana Sheremyova

Source: www.habr.com

Idugang sa usa ka comment