Carane aku menang 3 saka 4 medali emas ing Olimpiade Komputer

Carane aku menang 3 saka 4 medali emas ing Olimpiade Komputer

Aku nyiapake Google HashCode World Championship Finals 2017. Iki minangka kompetisi paling gedhe kanthi masalah algoritma sing diatur dening Google.

Aku miwiti sinau C ++ saka awal ing kelas sanga. Aku ora ngerti apa-apa babagan program, algoritma utawa struktur data. Ing sawetara titik aku nulis baris pisanan kode. Pitung sasi sabanjure, kompetisi pemrograman muncul ing cakrawala. Aku pengin ndeleng carane gaya sinau pemrograman bisa digunakake. Iku kesempatan sampurna.

Sawise rong dina kompetisi, asil teka: aku entuk medali emas.

Aku kaget. Aku ahead saka saingan karo 5 taun pengalaman. Aku ngerti yen aku wis kerja keras, nanging prestasi iki ngluwihi kabeh pangarepanku. Aku temen maujud sing program olahraga iku topik lan dove menyang headlong.

Aku ngerti apa sing nyebabake aku sukses lan aku pengin nuduhake karo sampeyan.

Carane aku menang 3 saka 4 medali emas ing Olimpiade Komputer

Artikel kasebut diterjemahake kanthi dhukungan saka EDISON Software, sing ngurus kesehatan programer lan sarapanLan ngembangake piranti lunak khusus.

Basa pemrograman sing kudu dipilih

  • C++ - Rekomendasi banget! Dheweke cepet banget. Implementasi algoritma mbutuhake wektu sethithik amarga STL. C ++ ditampa ing kabeh kompetisi. Aku nulis baris pisanan kode ing C ++.
  • C - Sinau C++ amarga STL. Yen sampeyan ngerti C, sampeyan uga bisa program ing C ++.
  • Jawa minangka basa pamrograman alon. Wis kelas Big Integer, nanging ora bakal mbantu akeh. Yen kompetisi duwe watesan wektu, karo Jawa sampeyan mesthi bakal ngluwihi. Jawa ora ditampa ing kabeh lomba.

Ngendi sampeyan bisa latihan

Aku nyaranake Sphere Online Judge (SPOJ). Iki minangka sumber daya sing efektif saka segi kuantitas lan kualitas. Penyunting lan solusi kasedhiya online yen sampeyan macet ing proses ngrampungake masalah. Saliyane situs iki aku nyaranake SPOJ Toolkit ΠΈ classifier masalah kanggo SPOJ.pl.

Kaping pisanan, sampeyan kudu ngasah kawruh babagan dhasar

Sawise sampeyan wis biasa karo sintaksis basa, ana sawetara masalah sing kudu diatasi. Mulai karo masalah prasaja sing mbutuhake latihan. Ing tahap iki, sing utama yaiku nemtokake gaya pemrograman sampeyan. Mungkin sampeyan seneng nulis kode kanthi akeh spasi, bisa uga sampeyan ora. Sampeyan bisa uga sijine kurung ing baris padha "yen", utawa sampeyan bisa sijine ing baris kapisah.

Sampeyan kudu golek gaya pemrograman amarga iku gaya YOUR.

Nalika sampeyan nggoleki, elinga rong prinsip dhasar:

  • Kode sampeyan kudu gampang dileksanakake. Sampeyan kudu aran nyaman ngleksanakake solusi sing teka karo. Kenging punapa? Amarga sajrone kompetisi, perkara pungkasan sing dikarepake yaiku ilang ing kode sampeyan. Iku tansah luwih apik kanggo nglampahi ekstra 5 menit mikir bab carane nyederhanakake implementasine saka kode saka nglampahi 10 menit nyoba kanggo mangerteni.
  • Kode sampeyan kudu gampang diwaca. Nalika kode gampang diwaca, gampang debug. Ayo padha ngadhepi - kewan omo tansah kelakon. Sampeyan ngerti perasaan yen sampeyan isih duwe 10 menit lan sampeyan ora bisa nemokake kesalahane? Mesthi wae. Kanggo ngindhari kahanan iki, tulis kode sing bisa dibaca. Sawise sampeyan miwiti debugging, kode kasebut bakal katon alami lan gampang dingerteni.

Punika conto kula gaya pemrograman.

Carane Ngapikake Skills Pangembangan Panjenengan

Laku, laku lan liyane laku. Aku nyaranake sampeyan bisa liwat pisanan 250 masalah solvable ing SPOJ. Rampungake kanthi urutan. Nglampahi paling sethithik sak jam mikir babagan solusi kanggo saben wong.

Aja ngomong: "Masalah iki angel banget kanggo aku, aku bakal nyoba ngrampungake sing sabanjure." Iki carane wong kapitunan mikir.

Njupuk selembar kertas lan potlot. Mikir bab iku. Mungkin sampeyan bisa nemokake solusi, bisa uga ora. Paling ora, sampeyan bakal ngembangake pamikiran algoritma. Yen sampeyan ora bisa nemokake solusi sajrone jam, goleki solusi sing wis siap ing forum utawa ing artikel.

Apa sing bakal ditindakake kanthi pendekatan iki? Sinau kanthi cepet ngetrapake ide sampeyan nggunakake kode. Lan sinau masalah klasik lan algoritma.

Kapindho, sampeyan kudu nguwasani algoritma lan struktur data

Tindakake pendekatan hirarkis. Apa sampeyan miwiti mlaku tanpa ngerti carane mlaku? Ora. Apa sampeyan bisa mbangun gedung pencakar langit tanpa dhasar sing padhet? Ora maneh.

Sampeyan ora bisa nglirwakake langkah-langkah ing dalan sinau. Yen sampeyan ora nglirwakake, sampeyan bakal kesenjangan kawruh. Swara wektu padha mung bakal dadi luwih elek.

Mulai karo algoritma dhasar lan struktur data

Iku angel kanggo miwiti. Mbok amarga sampeyan ora ngerti apa sing kudu sinau dhisik. Mulane Aku nggawe kursus video "Algoritma lan Struktur Data". Nalika nggawe kursus iki, aku adhedhasar carane aku pengin diajari. Reaksi iki luar biasa! Luwih saka 3000 siswa saka luwih saka 100 negara ndhaptar kursus ing sasi kapisan.

Yen sampeyan bisa ngrampungake masalah sing gampang, sampeyan ora bakal bisa nambah.

Cara sing paling efektif kanggo mangerteni apa sing sampeyan ora ngerti yaiku ngalami praktik. Mangkene aku sinau. Aku sinau akeh teknik anyar sing durung tau krungu sadurunge kanthi milih tugas sing tantangan.

Saben masalah katelu sing sampeyan lakoni kudu mulang sampeyan sing anyar. Dadi luwih ati-ati nalika milih masalah. Pilih masalah sing luwih angel!

Sawise sampeyan ngrampungake iki 250 masalah saka SPOJ, sampeyan bakal duwe pangerten dhasar saka topik inti program olahraga. Kanthi pangerten jero babagan logika ing mburi algoritma dhasar, algoritma tingkat dhuwur bakal katon kurang rumit. Kanthi cara iki sampeyan bisa ngoptimalake kawruh.

Dig luwih jero menyang saben tema utama

Punika sumber ingkang aji kanthi akeh informasi. Ing kana sampeyan bakal nemokake 10 algoritma lan struktur data paling dhuwur kanggo saben topik. Sawise 250 masalah saka SPOJ, sampeyan bakal ngerti akeh saka dhaptar iki. Nanging sampeyan uga bakal kesandhung ing akeh prekara sing durung tau krungu sadurunge. Dadi miwiti sinau topik kasebut kanthi urutan munggah.

Yen sampeyan ora nguatake kawruh sawise sinau sing anyar, sampeyan bakal cepet lali kabeh.
Aku nyaranake yen sawise sampeyan sinau algoritma anyar, gunakake ing laku. Nggawe liwat 2-3 tugas. Goleki tag algoritma ing SPOJ. Ing kana sampeyan bakal nemokake masalah sing mbutuhake algoritma iki kanggo ngatasi. Ngatasi masalah kasebut dhisik.

Master Pemrograman Dinamis Amarga Bakal Nuntun Sampeyan menyang Kamenangan
Saka pengalamanku, saben kompetisi duwe paling ora siji masalah pemrograman dinamis. Akeh wong sing ngelu nalika krungu tembung "pemrograman dinamis" amarga ora ngerti kabeh.

Lan iki apik. Amarga yen sampeyan ngerti program dinamis, sampeyan bakal menang.

Aku seneng programming dinamis, iku topik favorit. Rahasia pemrograman dinamis yaiku nggawe pilihan sing optimal sacara global, ora mung lokal. Sampeyan kudu ngilangi masalah kasebut dadi sub-masalah sing luwih gampang. Rampungake saben submasalah kasebut mung sapisan. Banjur gawe solusi sing nggabungake subproblem sing wis ditanggulangi. Algoritma rakus - ngelawan saka pemrograman dinamis. Perlu nggawe pilihan optimal lokal ing saben langkah. Lan pilihan sing optimal sacara lokal bisa nyebabake solusi global sing ala.

Nalika sinau konsep anyar, priksa Tutorial TopCoder. Padha banget rinci lan dingerteni. Thanks kanggo wong-wong mau aku bisa ngerti wit indeks binar.

Kerja keras

Apa sampeyan tau krungu babagan atlit sing menang Olimpiade tanpa latihan taun? Aku ora.

Saben taun, persiapan kanggo Olimpiade Komputer diwiwiti ing September lan rampung ing April.

Saben dina suwene 8 wulan iki aku latihan 5 jam.

Lan ya, aku ngenteni 5 jam iki mung kanggo ngrampungake masalah algoritma. Aku kelingan dina nalika aku latihan kanggo 8 lan malah 10 jam. Kenging punapa? Amarga aku seneng. Saben dina nalika mulih saka sekolah, aku langsung menyang kamar turu, lungguh ing komputer lan wiwit nganalisa masalah anyar. Utawa aku sinau algoritma anyar sing aku kudu ngerti kanggo ngatasi masalah iki.

Yen sampeyan pengin menang, sampeyan kudu nindakake padha. Pilih masalah lan tetep. Coba pikirake nalika mlaku menyang supermarket utawa nalika nyopir.

Carane aku menang 3 saka 4 medali emas ing Olimpiade Komputer

Apa sampeyan ngerti yen nalika turu, otak sampeyan defragmentasi informasi sing diklumpukake dina iku? Dheweke katon numpuk buku miturut abjad ing rak buku. Intine, otak sampeyan mikir babagan macem-macem masalah sing sampeyan alami.

Iki bisa digunakake kanthi trampil. Sadurunge turu, maca masalah sing angel lan elinga apa sing dibutuhake kanggo ngatasi. Ing tahap iki, sampeyan ora perlu nggoleki solusi kasebut dhewe. Budal turu, arep turu. Otak sampeyan bakal miwiti ngolah masalah iki. Nalika sampeyan tangi, sampeyan bakal kaget ngerti yen sampeyan nemokake solusi nalika sampeyan lagi turu.

Coba dhewe. Iku kaya sulap.

Aku nggawe blog video

Carane aku menang 3 saka 4 medali emas ing Olimpiade Komputer

Paragraf cendhak iki ora ana hubungane karo program olahraga. Yen sampeyan lagi rong puluhan lan kepingin weruh carane aku ndeleng donya, sampeyan bisa uga pengin mriksa metu blog videoku ing Youtube. Aku ngomong babagan donya, urip lan ilmu komputer.

Kerja pinter

Iki minangka rahasia sukses. Sampeyan butuh gol.

Kita wong lan kita seneng tundha-tundha. Kita tansah pengin nundha apa sing kudu ditindakake saiki. Nonton Netflix mesthi luwih nyenengake tinimbang ngatasi masalah pemrograman dinamis. Sampeyan ngerti iki lan sampeyan kudu ndandani.

Carane ngalahake procrastination

Nyetel dhewe gol. Sampeyan bakal tansah nemokake masalah menarik saka ngendi sampeyan bisa sinau bab anyar (priksa sumber daya aku kasebut ing ndhuwur). Nanging masalah kasebut kudu ditanggulangi, ora mung diwaca.

Mangkene carane aku ngatasi procrastination. Aku miwiti tanggalan kertas lan kapenuhan saben dina karo masalah aku wanted kanggo ngatasi. Aku tansah ngisi masalah rong dina sadurunge. Dadi aku ngerti carane ngatur wektu ing dina sabanjure.

Carane aku menang 3 saka 4 medali emas ing Olimpiade Komputer

Dadi aku tansah motivasi. Aku kudu ngrampungake sawetara masalah lan golek sing anyar kanggo ngisi dina sabanjure ing tanggalan. Nyebrang masalah sing ditanggulangi krasa apik. Aku ngerti sampeyan uga seneng.

Entuk kalender kertas dhewe. Aja nggawe dhaptar tugas liyane ing telpon sing bakal dilalekake sesuk.

Cara debug kanthi efektif

Apa sampeyan pengin dadi profesional? Yen ya, sampeyan kudu "debug ing atine."
Iki minangka teknik debugging paling efisien sing aku ngerti amarga ora mbutuhake debugger. Otak sampeyan mriksa macem-macem cabang kode sekaligus lan menehi ringkesan kode sing luwih akeh dibandhingake debugger klasik.

Sampeyan bisa mbandhingake dhewe karo grandmaster sing main catur lan mikir 3 gerakane ahead.

Aku nggunakake teknik iki mung minangka garis pertahanan awal. Banjur aku nggunakake debugger nyata.

Kanggo sinau carane debug ing sirah, sampeyan kudu latihan. Nalika sampeyan validasi solusi kanggo masalah lan entuk "jawaban salah", aja langsung menyang tombol debugger. Waca maneh kode lan pikirake: "Apa sing kedadeyan ing baris iki?", "Kepiye "yen" ing kene mengaruhi program?", "Nalika kita metu saka daur ulang, apa regane iterator?"

Kanthi cara iki sampeyan mikir dhewe. Sajrone wektu, sampeyan bakal sinau nulis kode lan debug kanthi cepet.

Babagan penulis

Carane aku menang 3 saka 4 medali emas ing Olimpiade Komputer
Andrei Margeloiu minangka programmer sing seneng banget karo kewirausahaan, startup, lan njobo. Sampeyan bisa hubungi dheweke ing LinkedIn.

Terjemahan: Diana Sheremyeva

Source: www.habr.com

Add a comment