Jinsi nilivyoshinda medali 3 kati ya 4 za dhahabu kwenye Olympiad ya Kompyuta

Jinsi nilivyoshinda medali 3 kati ya 4 za dhahabu kwenye Olympiad ya Kompyuta

Nilikuwa nikijiandaa kwa Fainali za Ubingwa wa Dunia wa Google HashCode 2017. Hili ndilo shindano kubwa zaidi lenye matatizo ya algoriti yaliyoandaliwa na Google.

Nilianza kujifunza C++ tangu mwanzo katika daraja la tisa. Sikujua chochote kuhusu upangaji programu, algoriti au miundo ya data. Wakati fulani niliandika safu yangu ya kwanza ya nambari. Miezi saba baadaye, shindano la programu lilikaribia upeo wa macho. Nilitaka kuona jinsi mtindo wangu wa kujifunza ulivyofanya kazi vizuri. Ilikuwa ni fursa nzuri.

Baada ya siku mbili za mashindano, matokeo yalikuja: Nilishinda medali ya dhahabu.

Nilishtuka. Nilikuwa mbele ya washindani wenye uzoefu wa miaka 5. Nilijua nimefanya kazi kwa bidii, lakini mafanikio haya yalizidi matarajio yangu yote. Niligundua kuwa programu ya michezo ilikuwa mada yangu na niliizingatia kwa undani.

Ninajua ni nini kilinipeleka kwenye mafanikio na ninataka kushiriki nawe.

Jinsi nilivyoshinda medali 3 kati ya 4 za dhahabu kwenye Olympiad ya Kompyuta

Nakala hiyo ilitafsiriwa kwa usaidizi wa Programu ya EDISON, ambayo inajali afya ya waandaaji wa programu na kifungua kinywa chaoNa hutengeneza programu maalum.

Lugha gani ya programu ya kuchagua

  • C++ - Pendekeza sana! Ana haraka sana. Utekelezaji wa algoriti huchukua muda kidogo kutokana na STL. C++ inakubaliwa katika mashindano yote. Niliandika safu yangu ya kwanza ya nambari katika C ++.
  • C - Jifunze C++ kwa sababu ya STL. Ikiwa unajua C, unaweza pia kupanga katika C++.
  • Java ni lugha ya polepole ya programu. Ina darasa la Nambari Kubwa, lakini haitakusaidia sana. Ikiwa shindano lina kikomo cha wakati, na Java hakika utazidisha. Java haikubaliki katika mashindano yote.

Unaweza kufanya mazoezi wapi

Napendekeza Jaji wa Mtandao wa Sphere (SPOJ). Ni rasilimali yenye ufanisi katika suala la wingi na ubora. Vihariri na suluhu zinapatikana mtandaoni ikiwa utakwama katika mchakato wa kutatua matatizo. Mbali na tovuti hii ninapendekeza Zana ya SPOJ ΠΈ kiainisha tatizo cha SPOJ.pl.

Kwanza, unahitaji kuboresha ujuzi wako wa misingi

Mara tu unapozoea syntax ya lugha, kuna shida kadhaa za kushinda. Anza na matatizo rahisi ambayo yanahitaji mazoezi. Katika hatua hii, jambo kuu ni kuamua mtindo wako wa programu. Labda unapenda kuandika nambari iliyo na nafasi nyingi nyeupe, labda hupendi. Unaweza kuwa unaweka mabano kwenye mstari sawa na "ikiwa", au unaweza kuwaweka kwenye mistari tofauti.

Lazima utafute mtindo wako wa upangaji kwa sababu ni mtindo WAKO.

Unapoitafuta, kumbuka kanuni mbili za msingi:

  • Nambari yako inapaswa kuwa rahisi kutekeleza. Unapaswa kujisikia vizuri kutekeleza suluhisho unalokuja nalo. Kwa nini? Kwa sababu wakati wa shindano, jambo la mwisho unalotaka ni kupotea katika msimbo wako. Daima ni bora kutumia dakika 5 za ziada kufikiria jinsi ya kurahisisha utekelezaji wa nambari kuliko kutumia dakika 10 kujaribu kuisuluhisha.
  • Nambari yako inapaswa kuwa rahisi kusoma. Wakati msimbo ni rahisi kusoma, ni rahisi kutatua. Hebu tukubaliane nayoβ€”mende hutokea kila wakati. Unajua hisia hiyo wakati una dakika 10 kushoto na huwezi kupata kosa kubwa? Bila shaka unafanya. Ili kuepuka hali hii, andika msimbo unaosomeka. Mara tu unapoanza kuisuluhisha, msimbo utaonekana kuwa wa asili na rahisi kuelewa.

Hapa kuna mfano wangu mtindo wa programu.

Jinsi ya Kuboresha Ustadi Wako wa Maendeleo

Fanya mazoezi, fanya mazoezi na mazoezi zaidi. Ninapendekeza utatue matatizo 250 ya kwanza ambayo yanaweza kutatuliwa zaidi SPOJ. Watatue kwa utaratibu. Tumia angalau saa moja kufikiria juu ya suluhisho kwa kila mmoja wao.

Usiseme: "Tatizo hili ni ngumu sana kwangu, nitajaribu kutatua ijayo." Hivi ndivyo wanavyofikiri walioshindwa.

Chukua kipande cha karatasi na penseli. Fikiri juu yake. Labda unaweza kupata suluhisho, labda sio. Kwa kiwango cha chini, utaendeleza mawazo ya algorithmic. Ikiwa huwezi kupata suluhisho ndani ya saa moja, tafuta suluhisho lililopangwa tayari kwenye jukwaa au katika makala.

Utafikia nini kwa mbinu hii? Jifunze kutekeleza mawazo yako kwa haraka kwa kutumia msimbo. Na soma shida za kitambo na algorithms.

Pili, lazima ujue algorithms na muundo wa data

Fuata mbinu ya kihierarkia. Ulianza kukimbia bila kujua jinsi ya kutembea? Hapana. Je, unaweza kujenga skyscraper bila msingi imara? Si tena.

Huwezi kupuuza hatua kwenye njia ya kujifunza. Ukizipuuza, utabaki na mapungufu ya maarifa. Baada ya muda watakuwa mbaya zaidi.

Anza na kanuni za msingi na miundo ya data

Ni vigumu kuanza. Labda kwa sababu hujui cha kujifunza kwanza. Ndiyo maana Niliunda kozi ya video "Algorithms na Miundo ya Data". Wakati wa kuunda kozi hii, niliitegemea jinsi ningependa kufundishwa. Mwitikio ulikuwa wa ajabu! Zaidi ya wanafunzi 3000 kutoka zaidi ya nchi 100 walijiandikisha kwa ajili ya kozi hiyo katika mwezi wa kwanza.

Ikiwa unafanya kazi katika kutatua matatizo rahisi, hutawahi kuboresha.

Njia bora zaidi ya kuelewa kile usichokijua ni kukitumia kwa vitendo. Ndivyo nilivyojifunza. Nilijifunza mbinu nyingi mpya ambazo sikuwahi kuzisikia hapo awali kwa kuchagua kazi ngumu.

Kila shida ya tatu unayofanyia kazi inapaswa kukufundisha kitu kipya. Kuwa makini zaidi wakati wa kuchagua matatizo. Chagua matatizo magumu zaidi!

Ukishamaliza matatizo haya 250 kutoka kwa SPOJ, utakuwa na uelewa wa kimsingi wa mada za msingi za upangaji programu za michezo. Kwa uelewa wa kina wa mantiki nyuma ya algoriti za kimsingi, algoriti za kiwango cha juu zitaonekana kuwa ngumu sana. Kwa njia hii unaweza kutumia maarifa yako vizuri.

Chimba zaidi katika kila mada kuu

Hapa kuna rasilimali muhimu na habari nyingi. Huko utapata algoriti 10 bora na miundo ya data kwa kila mada. Baada ya matatizo 250 kutoka kwa SPOJ, utajua mengi kutoka kwenye orodha hii. Lakini pia utajikwaa juu ya mambo mengi ambayo hujawahi kusikia hapo awali. Kwa hivyo anza kusoma mada hizi kwa mpangilio wa kupanda.

Ikiwa hutaimarisha ujuzi wako baada ya kujifunza kitu kipya, utasahau haraka kila kitu.
Ninapendekeza kwamba baada ya kujifunza algorithm mpya, tumia kwa mazoezi. Fanya kazi kupitia kazi 2-3. Tafuta lebo ya algorithm katika SPOJ. Huko utapata shida ambazo zinahitaji algorithm hii kutatua. Shughulikia masuala haya kwanza.

Master Dynamic Programming Kwa sababu Itakuongoza kwenye Ushindi
Kwa uzoefu wangu, kila shindano lina angalau shida moja programu yenye nguvu. Watu wengi huumwa na kichwa wanaposikia msemo β€œdynamic programming” kwa sababu hawaelewi kabisa.

Na hii ni nzuri. Kwa sababu ikiwa unaelewa programu ya nguvu, basi utashinda.

Ninapenda upangaji wa nguvu, ni mada ninayopenda zaidi. Siri ya upangaji programu inayobadilika ni kufanya chaguo bora zaidi ulimwenguni, sio za ndani tu. Lazima ugawanye tatizo katika matatizo madogo madogo zaidi. Tatua kila mojawapo ya matatizo haya mara moja tu. Kisha unda suluhisho ambalo linachanganya matatizo madogo yaliyotatuliwa. Algorithm ya uchoyo - kinyume cha programu ya nguvu. Inahitaji kufanya chaguo bora zaidi katika kila hatua. Na chaguo bora la ndani linaweza kusababisha suluhisho mbaya la kimataifa.

Wakati wa kujifunza dhana mpya, angalia Mafunzo ya TopCoder. Yana maelezo mengi na yanaeleweka. Shukrani kwao niliweza kuelewa miti binary indexed.

Fanya kazi kwa bidii

Umewahi kusikia kuhusu wanariadha wanaoshinda Olimpiki bila miaka ya mazoezi? Mimi si.

Kila mwaka, maandalizi ya Olympiad ya Kompyuta yalianza mnamo Septemba na kumalizika Aprili.

Kila siku kwa miezi hii 8 nilifanya mazoezi kwa masaa 5.

Na ndio, nilitumia masaa haya 5 tu kutatua shida za algorithmic. Nakumbuka siku ambazo nilifanya mazoezi kwa masaa 8 na hata 10. Kwa nini? Kwa sababu niliipenda. Kila siku niliporudi nyumbani kutoka shuleni, nilienda moja kwa moja chumbani, nikaketi kwenye kompyuta na kuanza kuchambua shida mpya. Au nilikuwa nikijifunza algoriti mpya ambayo nilihitaji kujua ili kutatua tatizo hili.

Ikiwa unataka kushinda, lazima ufanye vivyo hivyo. Chagua tatizo na ushikamane nalo. Fikiria juu yake wakati unatembea kwenye duka kubwa au unapoendesha gari.

Jinsi nilivyoshinda medali 3 kati ya 4 za dhahabu kwenye Olympiad ya Kompyuta

Je, unajua kwamba unapolala, ubongo wako hutenganisha habari iliyokusanywa siku hiyo? Anaonekana akipanga vitabu kwa mpangilio wa alfabeti kwenye rafu ya vitabu. Kimsingi, ubongo wako hufikiria kuhusu matatizo mbalimbali unayokabiliana nayo.

Hii inaweza kutumika kwa ustadi. Kabla ya kulala, soma shida ngumu na ukumbuke kile kinachohitajika kutatua. Katika hatua hii, hauitaji kutafuta suluhisho yenyewe. Nenda kitandani. Ubongo wako utaanza kushughulikia tatizo hili. Unapoamka, utashangaa kugundua kuwa umepata suluhisho ukiwa umelala.

Jaribu mwenyewe. Ni kama uchawi.

Nimeunda blogu ya video

Jinsi nilivyoshinda medali 3 kati ya 4 za dhahabu kwenye Olympiad ya Kompyuta

Aya hii fupi haihusiani na programu za michezo. Ikiwa una umri wa miaka ishirini na unashangaa jinsi ninavyoona ulimwengu, unaweza kutaka kuangalia blogu yangu ya video kwenye Youtube. Ninazungumza juu ya ulimwengu, maisha na sayansi ya kompyuta ndani yake.

Fanya kazi kwa busara

Hii ndiyo siri ya mafanikio. Unahitaji malengo.

Sisi ni watu na tunapenda kuahirisha mambo. Tunataka kila wakati kuahirisha kile kinachohitajika kufanywa sasa hivi. Kutazama Netflix daima kunafurahisha zaidi kuliko kushughulika na shida za programu zinazobadilika. Unajua hili na unahitaji kurekebisha.

Jinsi ya kushinda kuchelewesha

Jiwekee malengo. Utapata daima matatizo ya kuvutia ambayo unaweza kujifunza kitu kipya (angalia rasilimali nilizotaja hapo juu). Lakini shida hizi zinahitaji kutatuliwa, sio kusoma tu.

Kwa hivyo ndivyo nilivyoshinda kuahirisha mambo. Nilianza kalenda ya karatasi na kujaza kila siku na shida nilizotaka kutatua. Siku zote nilijaza matatizo siku mbili mapema. Kwa hivyo nilijua jinsi ya kudhibiti wakati wangu katika siku zilizofuata.

Jinsi nilivyoshinda medali 3 kati ya 4 za dhahabu kwenye Olympiad ya Kompyuta

Kwa hiyo sikuzote nilitiwa moyo. Nilihitaji kutatua matatizo fulani na kutafuta mapya ya kujaza siku zilizofuata kwenye kalenda. Kuondoa shida zilizotatuliwa ni nzuri. Najua unaipenda pia.

Pata kalenda yako ya karatasi. Usiunde orodha nyingine ya mambo ya kufanya kwenye simu yako ambayo utaisahau kesho.

Jinsi ya kurekebisha kwa ufanisi

Je, unataka kuwa mtaalamu? Ikiwa ndio, basi unahitaji "kuisuluhisha akilini mwako."
Hii ndio mbinu bora zaidi ya utatuzi ninayojua kwa sababu hauitaji kisuluhishi hata kidogo. Ubongo wako huchunguza matawi mengi ya msimbo kwa wakati mmoja na kukupa muhtasari mpana zaidi wa msimbo ikilinganishwa na debugger classic.

Unaweza kujilinganisha na babu ambaye anacheza chess na anafikiria hatua 3 mbele.

Ninatumia mbinu hii kama safu yangu ya kwanza ya utetezi. Kisha mimi hutumia debugger halisi.

Ili kujifunza jinsi ya kurekebisha kichwa chako, unahitaji kufanya mazoezi. Unapothibitisha suluhu la tatizo na kupata "jibu lisilo sahihi", usiende moja kwa moja kwenye kitufe cha utatuzi. Soma tena msimbo na ufikirie: "Ni nini kinatokea katika mstari huu?", "Je, "ikiwa" hapa inaathirije programu?", "Tunapotoka kwenye kitanzi, ni nini thamani ya iterator?"

Kwa njia hii unajifikiria mwenyewe. Baada ya muda, utajifunza kuandika msimbo na kurekebisha kwa kuruka.

Kuhusu mwandishi

Jinsi nilivyoshinda medali 3 kati ya 4 za dhahabu kwenye Olympiad ya Kompyuta
Andrei Margeloiu ni mtayarishaji programu anayevutiwa na ujasiriamali, wanaoanza, na nje. Unaweza kuwasiliana naye kwenye LinkedIn.

Tafsiri: Diana Sheremyeva

Chanzo: mapenzi.com

Kuongeza maoni