Çawa min 3 ji 4 madalyayên zêr di Olîmpiyada Computing de bi dest xist

Çawa min 3 ji 4 madalyayên zêr di Olîmpiyada Computing de bi dest xist

Min ji bo Pêşbirka Şampiyoniya Cîhanê ya Google HashCode 2017 amade dikir. Ev pêşbaziya herî mezin a pirsgirêkên algorîtmîkî ye ku ji hêla Google ve hatî organîze kirin.

Min di pola nehan de ji nû ve dest bi fêrbûna C++ kir. Min di derbarê bername, algorîtmayan an strukturên daneyê de tiştek nizanibû. Di demekê de min rêzika xweya yekem a kodê nivîsî. Heft meh şûnda, pêşbaziya bernamekirinê li ber çavan xuya bû. Min dixwest bibînim ka şêwaza fêrbûna bernameya min çiqas baş dixebite. Ew derfetek bêkêmasî bû.

Piştî du rojên pêşbirkê, encam hatin: Min madalyaya zêr bi dest xist.

Ez şaş bûm. Ez bi tecrubeya 5 salan li pêş hevrikan bûm. Min dizanibû ku ez pir xebitîm, lê ev serkeftin ji hemû hêviyên min derbas bû. Min fêm kir ku bernameya werzîşê mijara min e û bi serê xwe ketim nav wê.

Ez dizanim çi bû sedema serkeftinê û ez dixwazim wê bi we re parve bikim.

Çawa min 3 ji 4 madalyayên zêr di Olîmpiyada Computing de bi dest xist

Gotar bi piştgiriya Nermalava EDISON, ku tê wergerandin balê dikişîne ser tenduristiya bernamenûsan û taştêya wanû herweha nermalava xwerû pêş dixe.

Kîjan zimanê bernamekirinê hilbijêrin

  • C++ - Pir pêşniyar dikin! Ew pir bi lez e. Pêkanîna algorîtmayan ji ber STL hindik dem digire. C++ di hemû pêşbirkan de tê qebûlkirin. Min rêzika xweya yekem a kodê di C++ de nivîsand.
  • C - Ji ber STL C ++ fêr bibin. Heke hûn C dizanin, hûn dikarin bi C++ jî bername bikin.
  • Java zimanek bernamesaziyê hêdî ye. Ew çînek Big Integer heye, lê ew ê pir alîkariya we neke. Ger pêşbaziyek sînorek dem hebe, bi Java-yê hûn ê bê guman jê derbas bibin. Java di hemî pêşbaziyan de nayê qebûl kirin.

Li ku derê hûn dikarin pratîkê bikin

Ez pêşniyar dikim Sphere Online Dadgerê (SPOJ). Ji hêla hejmar û kalîteyê ve çavkaniyek bi bandor e. Heke hûn di çareserkirina pirsgirêkan de asê bibin, edîtor û çareserî li serhêl hene. Ji bilî vê malperê ez pêşniyar dikim SPOJ Toolkit и dabeşkerê pirsgirêkê ji bo SPOJ.pl.

Pêşîn, hûn hewce ne ku zanîna xwe ya bingehîn rast bikin

Gava ku hûn xwe bi hevoksaziya ziman re bikar bînin, hin pirsgirêk hene ku divê werin derbas kirin. Bi pirsgirêkên hêsan ên ku pratîk hewce dike dest pê bikin. Di vê qonaxê de, ya sereke ev e ku hûn şêwaza bernameya xwe diyar bikin. Dibe ku hûn dixwazin kodê bi pir valahiyê binivîsin, dibe ku hûn nexwazin. Dibe ku hûn parantezê bixin ser heman rêzê wekî "heke", an jî dibe ku hûn wan bixin ser xetên cuda.

Divê hûn şêwaza bernameya xwe bibînin ji ber ku ew şêwaza WE ye.

Dema ku hûn lê digerin, du prensîbên bingehîn bîr bînin:

  • Divê koda we hêsan be ku bicîh bikin. Divê hûn bi pêkanîna çareseriya ku hûn pê re peyda dikin rehet hîs bikin. Çima? Ji ber ku di dema pêşbaziyek de, tiştê paşîn ku hûn dixwazin ev e ku hûn di koda xwe de winda bibin. Her gav çêtir e ku meriv 5 hûrdeman zêde bifikire ka meriv çawa pêkanîna kodê çawa hêsan dike ji bilî ku hûn 10 hûrdeman hewl bidin ku wê fêm bikin.
  • Pêdivî ye ku koda we hêsan were xwendin. Dema ku kod hêsan tê xwendin, jêbirina wê hêsan e. Ka em jê re rû bi rû bimînin - xeletî her dem diqewimin. Hûn wê hestê dizanin dema ku hûn 10 hûrdeman mane û hûn nikanin xeletiya lanetkirî bibînin? Bê guman hûn dikin. Ji bo ku hûn ji vê rewşê dûr nekevin, koda xwerû binivîsin. Gava ku hûn dest bi verastkirina wê bikin, kod dê xwezayî û hêsan were fam kirin.

Li vir mînakek min e şêwaza bernamekirinê.

Meriv Çawa Zehmetiyên Pêşkeftina Xwe Pêşve Bike

Pratîk, pratîk û bêtir pratîk. Ez pêşniyar dikim ku hûn di nav 250 pirsgirêkên yekem ên herî çareserkirî de bixebitin SPOJ. Bi rêzê wan çareser bikin. Bi kêmanî saetekê li ser çareseriya her yek ji wan bifikirin.

Nebêjin: "Ev pirsgirêk ji min re pir dijwar e, ez ê hewl bidim ku ya din çareser bikim." Bi vî rengî windaker difikirin.

Kaxezek û qelemek hildin. Lê bifikire. Dibe ku hûn çareseriyek bibînin, dibe ku ne. Bi kêmanî, hûn ê ramîna algorîtmîkî pêşve bibin. Ger hûn nikaribin di nav saetekê de çareseriyek peyda bikin, li ser forumê an di gotaran de li çareseriyek amade bigerin.

Bi vê nêzîkatiyê hûn ê çi bi dest bixin? Fêr bibin ku hûn zû bi karanîna kodê ramanên xwe bicîh bînin. Û pirsgirêk û algorîtmayên klasîk bixwînin.

Ya duyemîn, divê hûn algorîtma û strukturên daneyê serdest bikin

Nêzîkatiya hiyerarşîk bişopînin. We dest bi bezê kir bêyî ku hûn bimeşin? Na. Ma hûn dikarin asîmanek bêyî bingehek zexm ava bikin? Ne dîsa.

Hûn nikarin gavên li ser riya fêrbûnê paşguh nekin. Ger hûn wan paşguh bikin, hûn ê bi kêmasiyên zanînê re bimînin. Bi demê re ew ê tenê xirabtir bibin.

Bi algorîtmayên bingehîn û strukturên daneyê dest pê bikin

Destpêk zehmet e. Dibe ku ji ber ku hûn nizanin pêşî çi bixwînin. Li rê da Min qursek vîdyoyê "Algorîtma û Strukturên Daneyê" çêkir. Dema ku vê qursê diafirand, min ew li ser bingeha ku ez dixwazim çawa fêr bibim. Reaksîyon nebawer bû! Zêdetirî 3000 xwendekar ji zêdetirî 100 welatan di meha yekem de ji bo qursê îmze kirin.

Ger hûn li ser çareserkirina pirsgirêkên hêsan bixebitin, hûn ê qet çêtir nebin.

Awayê herî bi bandor ji bo fêmkirina tiştê ku hûn nizanin ev e ku hûn di pratîkê de ezmûn bikin. Ez wisa fêr bûm. Bi hilbijartina karekî dijwar ez fêrî gelek teknîkên nû bûm ku min berê qet nebihîstibû.

Her pirsgirêka sêyemîn a ku hûn li ser dixebitin divê hûn tiştek nû hîn bikin. Dema ku pirsgirêkan hilbijêrin bêtir baldar bin. Pirsgirêkên dijwartir hilbijêrin!

Gava ku hûn van 250 pirsgirêkan ji SPOJ temam bikin, hûn ê di mijarên bingehîn ên bernameya werzîşê de têgihiştinek bingehîn hebe. Bi têgihiştinek kûr a mantiqa li pişt algorîtmayên bingehîn, dê algorîtmayên asta bilind kêmtir tevlihev xuya bikin. Bi vî awayî hûn dikarin herî zêde ji zanîna xwe.

Di her mijarên sereke de kûrtir bikolin

Li vir çavkaniyek hêja heye bi gelek agahî. Li wir hûn ê ji bo her mijarê 10 algorîtmayên jorîn û strukturên daneyê bibînin. Piştî 250 pirsgirêkên SPOJ, hûn ê ji vê navnîşê gelek tiştan bizanibin. Lê hûnê li ser gelek tiştên ku we berê qet nebihîstibûn jî biqelişe. Ji ber vê yekê dest bi xwendina van mijaran bi rêza hilkişînê bikin.

Ger hûn piştî hînbûna tiştekî nû zanîna xwe xurt nekin, hûn ê zû her tiştî ji bîr bikin.
Ez pêşniyar dikim ku piştî ku hûn algorîtmayek nû fêr bibin, wê di pratîkê de bikar bînin. Di nav 2-3 peywiran de bixebitin. Li tagê algorîtmayê li SPOJ bigerin. Li wir hûn ê pirsgirêkên ku ji bo çareserkirina vê algorîtmê hewce ne bibînin. Pêşî van pirsgirêkan çareser bikin.

Bernamesaziya Dînamîk Mamoste Ji ber ku Ew ê We Ber Bi Serkeftinê Bike
Ji ezmûna min, her pêşbaziyek bi kêmanî pirsgirêkek heye bernameya dînamîk. Gelek kes dema gotina “bernamesaziya dînamîk” dibihîzin serê wan diêşe ji ber ku qet jê fam nakin.

Û ev baş e. Ji ber ku heke hûn bernameya dînamîk fam bikin, wê hingê hûn ê bi ser bikevin.

Ez ji bernameya dînamîk hez dikim, ew mijara min a bijare ye. Veşartina bernameya dînamîk ev e ku meriv bijartinên herî baş ên gerdûnî bike, ne tenê yên herêmî. Pêdivî ye ku hûn pirsgirêkê li jêr-pirsgirêkên hêsan veqetînin. Her yek ji van kêşeyan tenê carekê çareser bikin. Dûv re çareseriyek biafirînin ku jêrpirsgirêkên çareserkirî tevlihev dike. Algorîtmaya Greedy - berevajî bernameya dînamîk. Ew hewce dike ku di her gavê de bijartinên herêmî yên çêtirîn çêbikin. Û vebijarkek çêtirîn herêmî dikare bibe sedema çareseriyek gerdûnî ya xirab.

Dema ku têgehên nû fêr dibin, lê binêrin dersên TopCoder. Ew pir berfireh û têgihîştî ne. Bi saya wan min fêm kir darên binary indexed.

Zehf bixebitin

Ma we qet ji werzîşvanên ku bêyî pratîka salan Olîmpiyadê qezenc dikin bihîstiye? Ez na.

Her sal amadekariyên Olîmpiyada Komputerê di meha Îlonê de dest pê dikirin û di meha Nîsanê de bi dawî dihatin.

Ev 8 meh in her roj ez 5 saetan tetbîq dikim.

Û erê, min van 5 saetan tenê ji bo çareserkirina pirsgirêkên algorîtmîkî derbas kir. Rojên ku min 8 û heta 10 saetan tetbîq dikir tê bîra min. Çima? Ji ber ku min jê hez kir. Her roj gava ez ji dibistanê vedigeriyam malê, ez rasterast diçûm odeya razanê, li ber kompîturê rûdiniştim û min dest bi analîzkirina pirsgirêkek nû dikir. An jî ez fêrî algorîtmayek nû bûm ku ji bo çareserkirina vê pirsgirêkê divê ez bizanim.

Heke hûn dixwazin serketinê bikin, divê hûn heman tiştî bikin. Pirsgirêkek hilbijêrin û pê ve bisekinin. Dema ku diçin supermarket an dema ajotinê li ser wê bifikirin.

Çawa min 3 ji 4 madalyayên zêr di Olîmpiyada Computing de bi dest xist

We dizanibû ku dema ku hûn radizên, mêjiyê we agahdariya ku wê rojê berhev kiriye ji hev vediqetîne? Xuya ye ku ew pirtûkan bi rêza alfabetîk li ser refek pirtûkan berhev dike. Di bingeh de, mêjiyê we li ser pirsgirêkên cihêreng ên ku hûn pê re rû bi rû dimînin difikire.

Ev dikare bi jêhatî were bikar anîn. Berî ku hûn biçin razanê, pirsgirêkek dijwar bixwînin û ji bîr nekin ku ji bo çareserkirina wê çi hewce dike. Di vê qonaxê de, hûn ne hewce ne ku li çareseriyê bixwe bigerin. Çûna nav nivîna. Mejiyê we dê dest bi pêvajoyêkirina vê pirsgirêkê bike. Dema ku hûn şiyar bibin, hûn ê ecêbmayî bimînin dema ku hûn di xew de bûne çareserî dîtiye.

Bi xwe biceribîne. Ew mîna sêrbaz e.

Min blogek vîdyoyê çêkir

Çawa min 3 ji 4 madalyayên zêr di Olîmpiyada Computing de bi dest xist

Ev paragrafa kurt bi bernameya werzîşê re ne girêdayî ye. Ger hûn di bîstsaliya xwe de ne û meraq dikin ku ez cîhanê çawa dibînim, dibe ku hûn bixwazin lê binêrin blog video min li ser Youtube. Ez tê de behsa cîhan, jiyan û zanistiya kompîturê dikim.

Bi aqil dixebitin

Ev sira serkeftinê ye. Pêdiviya we bi armancan heye.

Em mirov in û em jê hez dikin xwebişûndegirtin. Em her gav dixwazin tiştên ku divê niha bên kirin paşve bixin. Temaşekirina Netflix her gav ji mijûlbûna bi pirsgirêkên bernameya dînamîk re xweştir e. Hûn vê yekê dizanin û hûn hewce ne ku wê rast bikin.

Meriv çawa li paşdexistinê dixe

Armancên xwe danîne. Hûn ê her gav pirsgirêkên balkêş bibînin ku hûn dikarin ji wan tiştek nû fêr bibin (çavkaniyên ku min li jor behs kirin binihêrin). Lê divê ev pirsgirêk bên çareserkirin, ne tenê xwendin.

Ji ber vê yekê li vir e ku min çawa ji paşvekêşanê derbas kir. Min dest bi salnameyek kaxez kir û her roj bi pirsgirêkên ku min dixwest çareser bikim tije kir. Min her tim du roj berê pirsgirêkan tijî dikir. Ji ber vê yekê min zanibû ku di rojên pêş de çawa wextê xwe îdare bikim.

Çawa min 3 ji 4 madalyayên zêr di Olîmpiyada Computing de bi dest xist

Ji ber vê yekê ez her dem motîve bûm. Min hewce kir ku hin pirsgirêkan çareser bikim û yên nû bibînim da ku rojên pêş de li ser salnameyê tijî bikim. Derbaskirina pirsgirêkên çareserkirî pir xweş hîs dike. Ez dizanim ku hûn jî jê hez dikin.

Salnameya xweya kaxezê bistînin. Li ser têlefona xwe navnîşek din a karên ku hûn ê sibê ji bîr bikin neafirînin.

Meriv çawa bi bandor debug bike

Ma hûn dixwazin bibin pispor? Ger erê, wê hingê hûn hewce ne ku "wê di hişê xwe de xelet bikin."
Ev teknîka herî bikêrhatî ya ku ez dizanim ev e ji ber ku ew qet ne hewceyî debuggerek e. Mêjiyê we bi yekcarî çend şaxên kodê dikole û li gorî wê nihêrînek pir berfireh a kodê dide we debugger klasîk.

Hûn dikarin xwe bi mamosteyekî mezin re bidin ber hev ku şetrencê dilîze û 3 gavan li pêş difikire.

Ez vê teknîkê tenê wekî xeta xweya destpêkê ya berevaniyê bikar tînim. Dûv re ez debuggerek rastîn bikar tînim.

Ji bo ku hûn fêr bibin ka meriv çawa di serê xwe de xelet dike, hûn hewce ne ku pratîk bikin. Dema ku hûn çareseriyek pirsgirêkek rast bikin û "bersivek xelet" bistînin, rasterast neçin bişkoka debugger. Kodê ji nû ve bixwîne û bifikire: "Di vê rêzê de çi diqewime?", "Heke" li vir bandorek çawa li bernameyê dike?", "Gava ku em ji lûkê derdikevin, nirxa îteratorê çi ye?"

Bi vî awayî hûn ji bo xwe difikirin. Bi demê re, hûn ê fêr bibin ku kodê binivîsin û li ser firînê jêbirin.

Li ser nivîskarê

Çawa min 3 ji 4 madalyayên zêr di Olîmpiyada Computing de bi dest xist
Andrei Margeloiu bernamesazek ​​jêhatî ye ku eleqeya wî bi karsazî, destpêk, û li derve heye. Hûn dikarin bi wî re têkilî daynin li ser LinkedIn.

Werger: Diana Sheremyeva

Source: www.habr.com

Add a comment