Wéi ech 3 vun 4 Goldmedailen op der Informatik Olympiad gewonnen hunn

Wéi ech 3 vun 4 Goldmedailen op der Informatik Olympiad gewonnen hunn

Ech war virbereet fir d'Google HashCode Weltmeeschterschaft Finale 2017. Dëst ass de gréissten algorithmesche Challenge Concours organiséiert vu Google.

Ech hunn ugefaang C ++ vun Null am néngte Schouljoer ze léieren. Ech wousst näischt iwwer Programméiere, Algorithmen oder Datenstrukturen. Irgendwann hunn ech meng éischt Zeil vum Code geschriwwen. Siwe Méint méi spéit stoung de Programméierungskonkurrenz um Horizont. Ech wollt kucken wéi gutt mäi Léierprogramm funktionnéiert. Et war déi perfekt Geleeënheet.

No zwee Deeg Konkurrenz koumen d'Resultater: Ech hunn d'Goldmedail gewonnen.

Ech war schockéiert. Ech war virun Konkurrenten mat 5 Joer Erfahrung. Ech wousst datt ech haart geschafft hunn, awer dës Erreeche huet all meng Erwaardungen iwwerschratt. Ech hu gemierkt datt d'Sportsprogramméierung mäin Thema war an hunn d'Kopplung an d'Down gesat.

Ech weess wat mech zum Erfolleg gefouert huet an ech wëll et mat Iech deelen.

Wéi ech 3 vun 4 Goldmedailen op der Informatik Olympiad gewonnen hunn

Den Artikel gouf mat der Ënnerstëtzung vun der EDISON Software iwwersat, déi këmmert sech ëm d'Gesondheet vun de Programméierer an hirem Frühstück, wéi och entwéckelt personaliséiert Software.

Wéi eng Programméierungssprooch ze wielen

  • C++ - Héich recommandéieren! Hien ass ganz séier. Ëmsetzung vun Algorithmen hëlt wéineg Zäit wéinst STL. C ++ gëtt an all Concoursen ugeholl. Ech hunn meng éischt Zeil vum Code an C ++ geschriwwen.
  • C - Léiert C++ wéinst der STL. Wann Dir C kennt, kënnt Dir och an C ++ programméieren.
  • Java ass eng lues Programméierungssprooch. Et huet eng Big Integer Klass, awer et hëlleft Iech net vill. Wann e Concours eng Zäitlimit huet, mat Java wäert Dir se sécher iwwerschreiden. Java gëtt net bei all Concoursen ugeholl.

Wou kënnt Dir üben

ech recommandéieren Sphere Online Judge (SPOJ). Et ass eng effektiv Ressource a punkto Quantitéit a Qualitéit. Redaktoren a Léisunge sinn online verfügbar wann Dir am Prozess vun der Léisung vu Probleemer festhält. Zousätzlech zu dësem Site ech recommandéieren SPOJ Toolkit и Problemklassifiser fir SPOJ.pl.

Als éischt musst Dir Äert Wëssen iwwer d'Grondlage verschäerfen

Wann Dir un d'Syntax vun der Sprooch gewinnt sidd, ginn et e puer Probleemer ze iwwerwannen. Start mat einfache Probleemer déi Praxis erfuerderen. Op dëser Etapp ass den Haapt Saach Äre Programméierungsstil ze bestëmmen. Vläicht hutt Dir gär Code mat vill Whitespace ze schreiwen, vläicht net. Dir kënnt d'Klammeren op déiselwecht Linn setzen wéi de "wann", oder Dir kënnt se op getrennte Linnen setzen.

Dir musst Äre Programméierungsstil fannen well et ÄR Stil ass.

Wann Dir no sicht, erënnert zwee Grondprinzipien:

  • Äre Code soll einfach sinn ze implementéieren. Dir sollt Iech bequem fillen d'Léisung ze implementéieren déi Dir kommt. Firwat? Well während engem Concours ass dat lescht wat Dir wëllt an Ärem Code verluer goen. Et ass ëmmer besser eng extra 5 Minutten ze verbréngen fir ze denken wéi een d'Ëmsetzung vum Code vereinfacht wéi 10 Minutten ze verbréngen fir et erauszefannen.
  • Äre Code soll einfach ze liesen sinn. Wann de Code einfach ze liesen ass, ass et einfach ze debuggen. Loosst eis et soen - Bugs geschéien déi ganzen Zäit. Dir kennt dat Gefill wann Dir 10 Minutte lénks hutt an Dir de verdammt Feeler net fannt? Natierlech maacht Dir. Fir dës Situatioun ze vermeiden, schreift e liesbare Code. Wann Dir ufänkt ze debuggen, schéngt de Code natierlech an einfach ze verstoen.

Hei ass e Beispill vu mir programméiere Stil.

Wéi Är Entwécklungsfäegkeeten ze verbesseren

Praxis, Praxis a méi Praxis. Ech recommandéieren, datt Dir Aarbecht duerch déi éischt 250 stäerkste solvable Problemer op SPOJ. Léisen se an Uerdnung. Verbréngt op d'mannst eng Stonn iwwer d'Léisung fir jidderee vun hinnen ze denken.

Sot net: "Dëse Problem ass ze schwéier fir mech, ech probéieren deen nächsten ze léisen." Dëst ass wéi Verléierer denken.

Huelt e Stéck Pabeier an e Bleistift. Denk driwwer no. Vläicht fannt Dir eng Léisung, vläicht net. Op e Minimum wäert Dir algorithmescht Denken entwéckelen. Wann Dir net bannent enger Stonn mat enger Léisung kënnt, kuckt no enger fäerdeger Léisung um Forum oder an Artikelen.

Wat wäert Dir mat dëser Approche erreechen? Léiert Är Iddien séier mat Code ëmzesetzen. A studéiert klassesch Probleemer an Algorithmen.

Zweetens musst Dir Algorithmen an Datestrukturen beherrschen

Follegt eng hierarchesch Approche. Hutt Dir ugefaang ze lafen ouni ze wëssen wéi ze goen? Nee. Kënnt Dir e Wolkenkratzer bauen ouni e festen Fundament? Net erëm.

Dir kënnt d'Schrëtt laanscht de Léierwee net ignoréieren. Wann Dir se ignoréiert, sidd Dir mat Wëssenslücken hannerlooss. Mat der Zäit wäerte se nëmme verschlechtert ginn.

Start mat fundamentalen Algorithmen an Datestrukturen

Et ass schwéier ze starten. Vläicht well Dir net wësst wat fir d'éischt ze studéieren. Dat ass wouvir Ech hunn e Videokurs "Algorithmen an Datestrukturen" erstallt. Wann Dir dëse Cours erstallt, hunn ech et baséiert op wéi ech gäre geléiert ginn. D'Reaktioun war onheemlech! Méi wéi 3000 Studenten aus iwwer 100 Länner hu sech am éischte Mount fir de Cours ugemellt.

Wann Dir un der Léisung vun einfache Probleemer schafft, wäert Dir ni verbesseren.

Deen effektivste Wee fir ze verstoen wat Dir net wësst ass et an der Praxis ze erliewen. Esou hunn ech geléiert. Ech hunn vill nei Techniken geléiert, vun deenen ech nach ni héieren hunn, andeems ech eng Erausfuerderung Aufgab auswielen.

All drëtte Problem un deem Dir schafft sollt Iech eppes Neies léieren. Sidd méi virsiichteg wann Dir Problemer wielt. Wielt méi schwéier Problemer!

Wann Dir dës 250 Probleemer vum SPOJ ofgeschloss hutt, hutt Dir e Basisverständnis vun de Kärthemen vun der Sportsprogramméierung. Mat engem déiwe Verständnis vun der Logik hannert Basisalgorithmen, wäerten Héichniveau Algorithmen manner komplex schéngen. Op dës Manéier kënnt Dir dat Bescht aus Ärem Wëssen maachen.

Gruef méi déif an all vun den Haaptthemen

Hei ass eng wäertvoll Ressource mat vill Informatioun. Do fannt Dir déi Top 10 Algorithmen an Datestrukture fir all Thema. No 250 Probleemer vum SPOJ, wësst Dir vill vun dëser Lëscht. Awer Dir wäert och vill Saache stousse vun deenen Dir nach ni héieren hutt. Also fänkt un dës Themen an opsteigend Uerdnung ze studéieren.

Wann Dir Äert Wëssen net stäerkt nodeems Dir eppes Neies geléiert hutt, vergiesst Dir séier alles.
Ech recommandéieren datt nodeems Dir en neien Algorithmus geléiert hutt, se an der Praxis benotzt. Schafft et duerch 2-3 Aufgaben. Kuckt fir den Algorithmus Tag am SPOJ. Do fannt Dir Probleemer déi dësen Algorithmus brauchen fir ze léisen. Adresséiert dës Themen als éischt.

Master dynamesch Programméiere well et Iech op d'Victoire féiert
Aus menger Erfahrung huet all Concours op d'mannst ee Problem dynamesch programméiere. Vill Leit kréien Kappwéi wann se den Ausdrock "dynamesch Programméiere" héieren, well se et guer net verstinn.

An dëst ass gutt. Well wann Dir dynamesch Programméierung versteet, da wäert Dir gewannen.

Ech hu gär dynamesch Programméiere, et ass mäi Liiblingsthema. D'Geheimnis vun dynamescher Programméierung ass global optimal Wiel ze maachen, net nëmmen lokal. Dir musst de Problem an méi einfach Ënnerprobleemer opbriechen. All eenzel vun dësen Ënnerproblemer léisen nëmmen eemol. Erstellt dann eng Léisung déi d'geléiste Ënnerproblemer kombinéiert. Gierger Algorithmus - de Géigendeel vun dynamescher programméiere. Et erfuerdert lokal optimal Wiel bei all Schrëtt. An eng lokal optimal Wiel kann zu enger schlechter globaler Léisung féieren.

Wärend nei Konzepter léiert, kuckt weg TopCoder Tutorials. Si si ganz detailléiert a verständlech. Dank hinnen konnt ech verstoen binär indexéiert Beem.

Schwéier schaffen

Hutt Dir jeemools vun Athleten héieren, déi d'Olympesch Spiller gewannen ouni Joer Praxis? Ech net.

All Joer hunn d'Preparatiounen fir d'Computer Olympiad am September ugefaang an am Abrëll opgehalen.

All Dag fir dës 8 Méint hunn ech 5 Stonnen geübt.

An jo, ech hunn dës 5 Stonnen nëmmen algorithmesch Probleemer geléist. Ech erënnere mech un d'Deeg wou ech 8 a souguer 10 Stonnen geübt hunn. Firwat? Well ech hunn et gär. All Dag, wann ech aus der Schoul zréckkoum, sinn ech direkt an d'Schlofkummer gaang, mech um Computer gesat an ugefaang en neie Problem ze analyséieren. Oder ech hunn en neien Algorithmus geléiert deen ech muss wëssen fir dëse Problem ze léisen.

Wann Dir wëllt gewannen, Dir musst déi selwecht maachen. Wielt e Problem a bleift dorun. Denkt drun wann Dir an de Supermarché trëppelt oder beim Fuert.

Wéi ech 3 vun 4 Goldmedailen op der Informatik Olympiad gewonnen hunn

Wousst Dir datt wann Dir schléift, Äre Gehir d'Informatioun defragmentéiert, déi deen Dag gesammelt gëtt? Hie schéngt Bicher an alphabetesch Uerdnung op engem Bicherregal ze stackelen. Weesentlechen denkt Äert Gehir iwwer déi verschidde Probleemer déi Dir konfrontéiert.

Dëst kann kompetent benotzt ginn. Ier Dir an d'Bett geet, liest e schwieregen Problem an erënnert Iech un wat et brauch fir et ze léisen. Op dëser Etapp musst Dir net no der Léisung selwer sichen. An d'Bett goen. Äre Gehir fänkt dëse Problem un. Wann Dir erwächt, sidd Dir iwwerrascht ze realiséieren datt Dir d'Léisung fonnt hutt wärend Dir geschlof hutt.

Probéiert et selwer. Et ass wéi Magie.

Ech hunn e Video Blog erstallt

Wéi ech 3 vun 4 Goldmedailen op der Informatik Olympiad gewonnen hunn

Dëse kuerze Paragraph ass net mat Sportprogramméierung verbonnen. Wann Dir an den zwanzeger Joeren sidd an Iech frot wéi ech d'Welt gesinn, da wëllt Dir vläicht kucken mäi Video Blog op Youtube. Ech schwätzen iwwer d'Welt, d'Liewen an d'Informatik an der.

Schafft intelligent

Dëst ass d'Geheimnis vum Erfolleg. Dir braucht Ziler.

Mir si Leit a mir hunn et gär ausstellen. Mir wëllen ëmmer ofsetzen wat elo muss gemaach ginn. Netflix kucken ass ëmmer méi agreabel wéi mat dynamesche Programméierungsproblemer ze këmmeren. Dir wësst dëst an Dir musst et fixéieren.

Wéi d'Verzögerung ze schloen

Setzt Iech Ziler. Dir fannt ëmmer interessant Probleemer, aus deenen Dir eppes Neies léiere kënnt (kuckt d'Ressourcen aus, déi ech uewen ernimmt hunn). Awer dës Problemer musse geléist ginn, net nëmmen iwwer liesen.

Also hei ass wéi ech d'Verspéidung iwwerwonnen hunn. Ech hunn e Pabeierskalenner ugefaang an hunn all Dag mat Probleemer gefëllt, déi ech wollt léisen. Ech hunn ëmmer Problemer zwee Deeg am Viraus ausgefëllt. Also ech wousst wéi ech meng Zäit an den nächsten Deeg verwalten.

Wéi ech 3 vun 4 Goldmedailen op der Informatik Olympiad gewonnen hunn

Also ech war ëmmer motivéiert. Ech hu missen e puer Problemer léisen an nei fannen fir déi nächst Deeg um Kalenner ze fëllen. Geléiste Probleemer iwwerschreiden fillt sech super. Ech weess, datt Dir et och gär hutt.

Kritt Ären eegene Pabeierkalenner. Erstellt keng aner To-Do-Lëscht op Ärem Telefon, déi Dir muer vergiesst.

Wéi effektiv Debuggen

Wëllt Dir Profi ginn? Wann jo, da musst Dir "et an Ärem Kapp debuggen."
Dëst ass bei wäitem déi effizientst Debugging Technik déi ech kennen well et guer keen Debugger brauch. Äre Gehir ënnersicht verschidde Codezweige gläichzäiteg a gëtt Iech e vill méi breeden Iwwerbléck iwwer de Code am Verglach zum klassesch Debugger.

Dir kënnt Iech mat engem Groussmeeschter vergläichen, dee Schach spillt a mengt 3 Schrëtt vir.

Ech benotzen dës Technik eleng als meng initial Verteidegungslinn. Da benotzen ech e richtege Debugger.

Fir ze léieren wéi Dir an Ärem Kapp debuggen, musst Dir üben. Wann Dir eng Léisung fir e Problem validéiert an eng "falsch Äntwert" kritt, gitt net direkt op den Debugger Knäppchen. Liest de Code erëm an denkt: "Wat geschitt an dëser Linn?", "Wéi beaflosst de "wann" hei de Programm?", "Wa mir aus der Loop erausgoen, wat ass de Wäert vum Iterator?"

Sou denkt Dir fir Iech selwer. Mat der Zäit léiert Dir Code ze schreiwen an et op der Flucht ze debuggen.

Iwwer den Autor

Wéi ech 3 vun 4 Goldmedailen op der Informatik Olympiad gewonnen hunn
Den Andrei Margeloiu ass e begeeschterten Programméierer mat engem Interessi un Entrepreneursgeescht, Startups, an dobaussen. Dir kënnt him kontaktéieren op LinkedIn.

Iwwersetzung: Diana Sheremyeva

Source: will.com

Setzt e Commentaire