Kumaha kuring meunang 3 ti 4 medali emas dina Olimpiade Komputasi

Kumaha kuring meunang 3 ti 4 medali emas dina Olimpiade Komputasi

Kuring keur Nyiapkeun pikeun Google HashCode Dunya Championship Finals 2017. Ieu kompetisi pangbadagna kalayan masalah algorithmic diayakeun ku Google.

Kuring mimiti diajar C ++ ti scratch di kelas salapan. Kuring terang nanaon tentang programming, algoritma atawa struktur data. Di sawatara titik kuring nulis baris kahiji kuring kode. Tujuh bulan ka hareup, kompetisi program muncul dina cakrawala. Abdi hoyong ningali kumaha gaya program diajar kuring damel. Ieu kasempetan sampurna.

Sanggeus dua poé kompetisi, hasilna datang: Kuring meunang medali emas.

Kuring reuwas. Kuring éta dihareupeun pesaing kalawan 5 taun pangalaman. Kuring terang kuring kungsi digawé teuas, tapi prestasi ieu ngaleuwihan sakabeh ekspektasi kuring. Kuring sadar yén programming olahraga éta topik kuring jeung japati kana eta headlong.

Kuring terang naon anu nyababkeun kuring suksés sareng kuring hoyong bagikeun sareng anjeun.

Kumaha kuring meunang 3 ti 4 medali emas dina Olimpiade Komputasi

Artikel ieu ditarjamahkeun kalayan dukungan EDISON Software, anu ngurus kaséhatan programer jeung sarapan maranéhananajeung ngembangkeun software custom.

Basa pamrograman mana anu kedah dipilih

  • C ++ - Kacida nyarankeun! Anjeunna gancang pisan. Palaksanaan algoritma nyokot saeutik waktu alatan STL. C ++ katampa dina sagala kompetisi. Kuring nulis baris kahiji kuring kode dina C ++.
  • C - Diajar C ++ kusabab STL. Lamun nyaho C, Anjeun oge bisa program dina C ++.
  • Java mangrupakeun basa programming slow. Mibanda kelas Integer Big, tapi moal mantuan Anjeun teuing. Lamun kompetisi boga wates waktu, kalawan Java anjeun pasti bakal ngaleuwihan eta. Java henteu katampa di sadaya kompetisi.

Dimana anjeun tiasa latihan

Abdi nyarankeun Hakim Online Sphere (SPOJ). Ieu mangrupa sumberdaya éféktif dina watesan kuantitas jeung kualitas. Éditor sareng solusi sayogi online upami anjeun macét dina prosés ngarengsekeun masalah. Salian situs ieu kuring nyarankeun SPOJ Toolkit и classifier masalah pikeun SPOJ.pl.

Kahiji, anjeun kedah ngasah pangaweruh dasar anjeun

Sakali anjeun ngabiasakeun sintaksis basa, aya sababaraha masalah anu kedah diatasi. Mimitian ku masalah basajan anu merlukeun latihan. Dina tahap ieu, hal utama nyaéta pikeun nangtukeun gaya programming anjeun. Panginten anjeun resep nyerat kode kalayan seueur spasi kosong, panginten henteu. Anjeun tiasa nempatkeun tanda kurung dina garis anu sami sareng "upami", atanapi anjeun tiasa nempatkeun aranjeunna dina garis anu misah.

Anjeun kedah milarian gaya program anjeun sabab éta gaya anjeun.

Nalika anjeun milarian éta, émut dua prinsip dasar:

  • Kode anjeun kedah gampang dilaksanakeun. Anjeun kedah ngarasa nyaman ngalaksanakeun solusi anu anjeun pikahoyong. Naha? Kusabab nalika kompetisi, hal anu terakhir anu anjeun pikahoyong nyaéta leungit dina kode anjeun. Salawasna langkung saé nyéépkeun 5 menit tambahan pikeun mikirkeun kumaha cara nyederhanakeun palaksanaan kode éta tibatan nyéépkeun 10 menit pikeun nyobian terangkeunana.
  • Kode anjeun kedah gampang dibaca. Nalika kodeu gampang dibaca, éta gampang pikeun debug. Hayu urang nyanghareupan éta - bug lumangsung sepanjang waktos. Anjeun terang rarasaan éta nalika anjeun gaduh 10 menit deui sareng anjeun moal mendakan kasalahan damn? Tangtu anjeun ngalakukeun. Pikeun nyingkahan kaayaan ieu, tulis kode anu tiasa dibaca. Sakali anjeun ngawitan debugging eta, kode bakal sigana alam tur gampang ngartos.

Ieu conto kuring gaya programming.

Kumaha Ningkatkeun Kaahlian Pangwangunan Anjeun

Latihan, latihan sareng seueur deui latihan. Kuring nyarankeun yén anjeun damel ngaliwatan munggaran 250 paling solvable masalah dina SPOJ. Ngajawab aranjeunna dina urutan. Méakkeun sahenteuna sajam mikir ngeunaan solusi masing-masing.

Entong nyarios: "Masalah ieu sesah teuing pikeun kuring, kuring bakal nyobian ngabéréskeun anu salajengna." Ieu kumaha pecundang pikir.

Candak salembar kertas jeung pensil. Pikirkeun deui. Panginten anjeun tiasa mendakan solusi, panginten henteu. Sahenteuna, anjeun bakal ngamekarkeun pamikiran algorithmic. Upami anjeun teu tiasa mendakan solusi dina sajam, milarian solusi anu siap-siap dina forum atanapi dina tulisan.

Naon anu anjeun bakal ngahontal ku pendekatan ieu? Diajar gancang nerapkeun ideu anjeun nganggo kode. Sareng diajar masalah sareng algoritma klasik.

Kadua, anjeun kedah ngawasaan algoritma sareng struktur data

Turutan pendekatan hirarki. Naha anjeun mimiti ngajalankeun tanpa terang kumaha jalanna? No. Naha anjeun tiasa ngawangun gedung pencakar langit tanpa yayasan anu padet? Moal deui.

Anjeun teu tiasa malire léngkah sapanjang jalur diajar. Upami anjeun teu malire aranjeunna, anjeun bakal tinggaleun jurang pangaweruh. Kana waktu aranjeunna ngan bakal jadi goréng.

Mimitian ku algoritma dasar sareng struktur data

Hésé ngamimitian. Panginten sabab anjeun henteu terang naon anu kedah diajar heula. Éta alesanana Kuring nyieun kursus video "Algoritma sareng Struktur Data". Nalika nyieun kursus ieu, kuring dumasar kana kumaha kuring hoyong diajar. Réaksi éta luar biasa! Langkung ti 3000 mahasiswa ti langkung ti 100 nagara ngadaptarkeun kursus dina bulan kahiji.

Upami anjeun damel pikeun ngarengsekeun masalah anu gampang, anjeun moal pernah ningkatkeun.

Cara anu paling efektif pikeun ngartos naon anu anjeun henteu terang nyaéta ngalaman éta dina prakték. Éta kumaha kuring diajar. Kuring diajar seueur téknik anyar anu kuring henteu kantos nguping sateuacan ku milih tugas anu nangtang.

Unggal masalah katilu anu anjeun damel kedah ngajarkeun anjeun hal anu énggal. Janten langkung ati-ati nalika milih masalah. Pilih masalah anu langkung hese!

Sakali anjeun ngalengkepan ieu 250 masalah ti SPOJ, anjeun bakal boga pamahaman dasar tina jejer inti programming olahraga. Kalawan pamahaman jero ngeunaan logika balik algoritma dasar, algoritma-tingkat tinggi bakal sigana kirang kompléks. Ku cara ieu anjeun tiasa ngamaksimalkeun pangaweruh anjeun.

Ngagali deeper kana unggal téma utama

Di dieu hiji sumberdaya berharga kalawan loba informasi. Aya anjeun bakal manggihan luhureun 10 algoritma jeung struktur data pikeun tiap topik. Saatos 250 masalah ti SPOJ, anjeun bakal terang seueur tina daptar ieu. Tapi anjeun ogé bakal titajong kana seueur hal anu anjeun teu acan kantos nguping sateuacanna. Jadi mimitian diajar jejer ieu dina urutan naek.

Mun anjeun teu nguatkeun pangaweruh anjeun sanggeus diajar hal anyar, anjeun bakal gancang poho sagalana.
Kuring nyarankeun yén sanggeus anjeun diajar hiji algoritma anyar, make eta dina prakna. Gawéna ngaliwatan 2-3 tugas. Tingali pikeun tag algoritma dina SPOJ. Aya anjeun bakal manggihan masalah nu peryogi algoritma ieu pikeun ngajawab. Atur heula masalah ieu.

Master Pemrograman Dinamis Kusabab Bakal Ngarahkeun Anjeun Ka meunangna
Ti pangalaman kuring, unggal kompetisi boga sahanteuna hiji masalah programming dinamis. Seueur jalma nyeri sirah nalika ngadangu frasa "program dinamis" kusabab aranjeunna henteu ngartos pisan.

Sareng ieu saé. Kusabab lamun ngarti programming dinamis, mangka anjeun bakal meunang.

Kuring resep programming dinamis, éta topik favorit kuring. Rahasia program dinamis nyaéta ngadamel pilihan anu optimal sacara global, sanés ngan ukur lokal. Anjeun kedah ngarobih masalah kana sub-masalah anu langkung saderhana. Ngarengsekeun unggal subproblem ieu ngan sakali. Teras jieun solusi anu ngagabungkeun submasalah anu direngsekeun. Algoritma sarakah - sabalikna tina programming dinamis. Merlukeun nyieun pilihan optimal lokal dina unggal hambalan. Sareng pilihan anu optimal sacara lokal tiasa nyababkeun solusi global anu goréng.

Bari diajar konsép anyar, pariksa kaluar tutorials TopCoder. Éta pisan lengkep sareng kaharti. Hatur nuhun ka aranjeunna abdi tiasa ngartos tangkal indéks binér.

Kerja keras

Naha anjeun kantos nguping atlit anu meunang Olimpiade tanpa latihan mangtaun-taun? Abdi henteu.

Unggal taun, persiapan pikeun Olimpiade Komputer dimimitian dina bulan Séptember jeung réngsé dina April.

Saban poé salila 8 bulan ieu kuring latihan salila 5 jam.

Sareng enya, kuring nyéépkeun 5 jam ieu ngan ukur ngarengsekeun masalah algoritma. Abdi émut dinten nalika kuring latihan 8 bahkan 10 jam. Naha? Kusabab kuring resep. Saban poé nalika kuring balik ka imah ti sakola, kuring langsung ka pangkeng, diuk handap dina komputer tur mimitian analisa masalah anyar. Atanapi kuring diajar algoritma énggal anu kuring peryogi terang pikeun ngabéréskeun masalah ieu.

Lamun hayang meunang, anjeun kudu lakonan hal nu sarua. Pilih hiji masalah sareng lebet kana éta. Pikirkeun hal éta nalika leumpang ka supermarkét atanapi nalika nyetir.

Kumaha kuring meunang 3 ti 4 medali emas dina Olimpiade Komputasi

Naha anjeun terang yén nalika anjeun bobo, uteuk anjeun nga-defragment inpormasi anu dikumpulkeun dinten éta? Anjeunna sigana numpuk buku dina urutan abjad dina rak buku. Intina, uteuk anjeun mikir ngeunaan rupa-rupa masalah anu anjeun hadapi.

Ieu bisa dipaké skillfully. Sateuacan bobo, baca masalah anu sesah sareng émut naon anu diperyogikeun pikeun ngabéréskeunana. Dina tahap ieu, anjeun teu kudu néangan solusi sorangan. Bobo. Otak anjeun bakal mimiti ngolah masalah ieu. Nalika anjeun hudang, anjeun bakal kaget sadar yén anjeun mendakan solusi nalika anjeun bobo.

Cobaan sorangan. Ieu kawas magic.

Kuring nyieun blog video

Kumaha kuring meunang 3 ti 4 medali emas dina Olimpiade Komputasi

Ayat pondok ieu henteu aya hubunganana sareng program olahraga. Upami anjeun umur duapuluhan sareng heran kumaha kuring ningali dunya, anjeun panginten hoyong pariksa blog video abdi on Youtube. Kuring ngobrol ngeunaan dunya, kahirupan sareng élmu komputer di jerona.

Gawé pinter

Ieu rusiah sukses. Anjeun peryogi gol.

Kami jalma sareng kami resep nunda-nunda. Urang sok hoyong nunda naon anu kudu dipigawé ayeuna. Nonton Netflix sok langkung nikmat tibatan nungkulan masalah program dinamis. Anjeun terang ieu sareng anjeun kedah ngalereskeunana.

Kumaha ngéléhkeun procrastination

Nyetél gol sorangan. Anjeun bakal salawasna mendakan masalah anu pikaresepeun anu anjeun tiasa diajar anu énggal (parios sumber-sumber anu kuring nyarios di luhur). Tapi masalah ieu kudu direngsekeun, teu ngan maca ngeunaan.

Ku kituna ieu kumaha kuring overcame procrastination. Kuring ngamimitian kalénder kertas sareng ngeusi unggal dinten ku masalah anu kuring hoyong direngsekeun. Kuring sok ngeusian masalah dua dinten sateuacanna. Janten kuring terang kumaha ngatur waktos kuring dina dinten-dinten salajengna.

Kumaha kuring meunang 3 ti 4 medali emas dina Olimpiade Komputasi

Ku kituna kuring salawasna ngamotivasi. Kuring diperlukeun pikeun ngajawab sababaraha masalah sarta manggihan nu anyar pikeun ngeusian poé saterusna dina kalénder. Nyebrang kaluar masalah direngsekeun karasaeun hébat. Kuring terang anjeun ogé resep.

Kéngingkeun kalénder kertas anjeun nyalira. Ulah nyieun daptar tugas sejen dina telepon anjeun nu bakal poho ngeunaan isukan.

Kumaha debug éféktif

Naha anjeun hoyong janten profésional? Upami enya, maka anjeun kedah "debug dina pikiran anjeun."
Ieu mangrupikeun téknik debugging anu paling éfisién anu kuring terang sabab éta henteu ngabutuhkeun debugger pisan. Otak anjeun mariksa sababaraha cabang kode sakaligus sareng masihan anjeun gambaran anu langkung lega tina kode dibandingkeun debugger Palasik.

Anjeun tiasa ngabandingkeun diri ka grandmaster anu maén catur jeung pikir 3 ngalir ka hareup.

Kuring ngagunakeun téknik ieu ngan ukur salaku garis pertahanan awal kuring. Lajeng abdi nganggo debugger nyata.

Pikeun diajar kumaha debug dina sirah anjeun, anjeun kedah latihan. Nalika anjeun ngesahkeun solusi pikeun masalah sareng nampi "jawaban anu salah", ulah langsung ka tombol debugger. Baca deui kodeu sareng pikir: "Naon anu kajantenan dina jalur ieu?", "Kumaha carana "upami" di dieu mangaruhan program?", "Nalika urang kaluar tina loop, naon nilai iterator?"

Ku cara kieu anjeun pikir pikeun diri anjeun. Kana waktu, anjeun bakal diajar nulis kode jeung debug eta on laleur.

ngeunaan nyeratna

Kumaha kuring meunang 3 ti 4 medali emas dina Olimpiade Komputasi
Andrei Margeloiu mangrupikeun programer avid sareng minat wirausaha, ngamimitian, sareng di luar. Anjeun tiasa ngahubungan anjeunna dina LinkedIn.

Tarjamahan: Diana Sheremyeva

sumber: www.habr.com

Tambahkeun komentar