Bagaimana saya memenangkan 3 dari 4 medali emas di Olimpiade Komputer

Bagaimana saya memenangkan 3 dari 4 medali emas di Olimpiade Komputer

Saya sedang mempersiapkan Final Kejuaraan Dunia Google HashCode 2017. Ini adalah kompetisi masalah algoritmik terbesar yang diselenggarakan oleh Google.

Saya mulai belajar C++ dari awal di kelas sembilan. Saya tidak tahu apa pun tentang pemrograman, algoritma, atau struktur data. Pada titik tertentu saya menulis baris kode pertama saya. Tujuh bulan kemudian, kompetisi pemrograman sudah di depan mata. Saya ingin melihat seberapa baik gaya belajar pemrograman saya bekerja. Itu adalah kesempatan yang sempurna.

Setelah dua hari kompetisi, hasilnya muncul: Saya meraih medali emas.

Saya terkejut. Saya berada di depan pesaing dengan pengalaman 5 tahun. Saya tahu saya telah bekerja keras, namun pencapaian ini melebihi semua harapan saya. Saya menyadari bahwa program olahraga adalah topik saya dan langsung terjun ke dalamnya.

Saya tahu apa yang membawa saya menuju kesuksesan dan saya ingin membaginya dengan Anda.

Bagaimana saya memenangkan 3 dari 4 medali emas di Olimpiade Komputer

Artikel tersebut diterjemahkan dengan dukungan EDISON Software, yang menjaga kesehatan programmer dan sarapan merekaDan mengembangkan perangkat lunak khusus.

Bahasa pemrograman mana yang harus dipilih

  • C++ - Sangat direkomendasikan! Dia sangat cepat. Implementasi algoritma membutuhkan sedikit waktu karena STL. C++ diterima di semua kompetisi. Saya menulis baris kode pertama saya di C++.
  • C - Pelajari C++ karena STL. Jika Anda tahu C, Anda juga bisa memprogram dalam C++.
  • Java adalah bahasa pemrograman yang lambat. Ini memiliki kelas Integer Besar, tetapi itu tidak akan banyak membantu Anda. Jika sebuah kompetisi memiliki batasan waktu, dengan Java Anda pasti akan melampauinya. Java tidak diterima di semua kompetisi.

Di mana Anda bisa berlatih

Saya merekomendasikan Juri Sphere Online (SPOJ). Ini adalah sumber daya yang efektif dalam hal kuantitas dan kualitas. Editor dan solusi tersedia online jika Anda mengalami kebuntuan dalam proses penyelesaian masalah. Selain situs ini saya rekomendasikan Perangkat SPOJ и pengklasifikasi masalah untuk SPOJ.pl.

Pertama, Anda perlu mengasah pengetahuan Anda tentang dasar-dasarnya

Setelah Anda terbiasa dengan sintaks bahasanya, ada beberapa masalah yang harus diatasi. Mulailah dengan soal sederhana yang membutuhkan latihan. Pada tahap ini, hal utama adalah menentukan gaya pemrograman Anda. Mungkin Anda suka menulis kode dengan banyak spasi, mungkin juga tidak. Anda mungkin menempatkan tanda kurung pada baris yang sama dengan “jika”, atau Anda dapat menempatkannya pada baris yang terpisah.

Anda harus menemukan gaya pemrograman Anda karena itu adalah gaya ANDA.

Saat Anda mencarinya, ingatlah dua prinsip dasar:

  • Kode Anda harus mudah diterapkan. Anda harus merasa nyaman menerapkan solusi yang Anda buat. Mengapa? Karena selama kompetisi, hal terakhir yang Anda inginkan adalah tersesat dalam kode Anda. Selalu lebih baik meluangkan waktu 5 menit ekstra untuk memikirkan cara menyederhanakan penerapan kode daripada menghabiskan 10 menit untuk mencoba mencari tahu.
  • Kode Anda harus mudah dibaca. Jika kode mudah dibaca, maka mudah untuk di-debug. Jujur saja—bug selalu terjadi. Anda tahu perasaan ketika Anda memiliki waktu tersisa 10 menit dan Anda tidak dapat menemukan kesalahannya? Tentu saja. Untuk menghindari situasi ini, tulis kode yang dapat dibaca. Setelah Anda mulai men-debugnya, kodenya akan tampak alami dan mudah dimengerti.

Ini adalah contoh milik saya gaya pemrograman.

Cara Meningkatkan Keterampilan Perkembangan Anda

Berlatih, berlatih, dan berlatih lagi. Saya menyarankan Anda mengatasi 250 masalah pertama yang paling dapat dipecahkan SPOJ. Selesaikan secara berurutan. Luangkan setidaknya satu jam untuk memikirkan solusi untuk masing-masing masalah.

Jangan katakan: "Masalah ini terlalu sulit bagi saya, saya akan mencoba menyelesaikan masalah berikutnya." Begitulah cara berpikir para pecundang.

Ambil selembar kertas dan pensil. Pikirkan tentang itu. Mungkin Anda bisa menemukan solusinya, mungkin juga tidak. Minimal, Anda akan mengembangkan pemikiran algoritmik. Jika Anda tidak dapat menemukan solusi dalam waktu satu jam, carilah solusi yang sudah jadi di forum atau artikel.

Apa yang akan Anda capai dengan pendekatan ini? Belajarlah untuk mengimplementasikan ide Anda dengan cepat menggunakan kode. Dan mempelajari masalah dan algoritma klasik.

Kedua, Anda harus menguasai algoritma dan struktur data

Ikuti pendekatan hierarki. Apakah Anda mulai berlari tanpa mengetahui cara berjalan? TIDAK. Bisakah Anda membangun gedung pencakar langit tanpa fondasi yang kokoh? Jangan lagi.

Anda tidak dapat mengabaikan langkah-langkah di sepanjang jalur pembelajaran. Jika Anda mengabaikannya, Anda akan mengalami kesenjangan pengetahuan. Seiring waktu, kondisi tersebut hanya akan bertambah buruk.

Mulailah dengan algoritma dasar dan struktur data

Sulit untuk memulainya. Mungkin karena Anda tidak tahu harus belajar apa dulu. Itu sebabnya Saya membuat kursus video “Algoritma dan Struktur Data”. Saat membuat kursus ini, saya mendasarkannya pada bagaimana saya ingin diajar. Reaksinya luar biasa! Lebih dari 3000 siswa dari lebih dari 100 negara mendaftar kursus ini pada bulan pertama.

Jika Anda berusaha memecahkan masalah yang mudah, Anda tidak akan pernah berkembang.

Cara paling efektif untuk memahami apa yang tidak Anda ketahui adalah dengan mengalaminya dalam praktik. Begitulah cara saya belajar. Saya mempelajari banyak teknik baru yang belum pernah saya dengar sebelumnya dengan memilih tugas yang menantang.

Setiap masalah ketiga yang Anda kerjakan seharusnya mengajari Anda sesuatu yang baru. Lebih berhati-hati dalam memilih masalah. Pilih soal yang lebih sulit!

Setelah Anda menyelesaikan 250 soal dari SPOJ ini, Anda akan memiliki pemahaman dasar tentang topik inti program olahraga. Dengan pemahaman yang mendalam tentang logika di balik algoritma dasar, algoritma tingkat tinggi akan tampak tidak terlalu rumit. Dengan cara ini Anda dapat memaksimalkan pengetahuan Anda.

Gali lebih dalam setiap tema utama

Inilah sumber daya yang berharga dengan banyak informasi. Di sana Anda akan menemukan 10 algoritma dan struktur data teratas untuk setiap topik. Setelah 250 soal dari SPOJ, Anda akan tahu banyak dari daftar ini. Namun Anda juga akan menemukan banyak hal yang belum pernah Anda dengar sebelumnya. Jadi mulailah mempelajari topik-topik ini dalam urutan menaik.

Jika Anda tidak memperkuat pengetahuan Anda setelah mempelajari sesuatu yang baru, Anda akan segera melupakan segalanya.
Saya menyarankan setelah Anda mempelajari algoritma baru, gunakanlah dalam praktik. Kerjakan melalui 2-3 tugas. Cari tag algoritma di SPOJ. Di sana Anda akan menemukan masalah yang memerlukan penyelesaian algoritma ini. Atasi masalah ini terlebih dahulu.

Kuasai Pemrograman Dinamis Karena Akan Membawa Anda Menuju Kemenangan
Dari pengalaman saya, setiap kompetisi setidaknya memiliki satu masalah pemrograman dinamis. Banyak orang yang pusing ketika mendengar ungkapan “pemrograman dinamis” karena tidak memahaminya sama sekali.

Dan ini bagus. Karena jika Anda memahami pemrograman dinamis, maka Anda akan menang.

Saya suka pemrograman dinamis, itu topik favorit saya. Rahasia pemrograman dinamis adalah membuat pilihan yang optimal secara global, bukan hanya pilihan lokal. Anda harus memecah masalah menjadi sub-masalah yang lebih sederhana. Selesaikan setiap submasalah ini hanya sekali. Kemudian buatlah solusi yang menggabungkan sub-masalah yang telah diselesaikan. Algoritma serakah - kebalikan dari pemrograman dinamis. Hal ini memerlukan pengambilan pilihan yang optimal secara lokal pada setiap langkah. Dan pilihan yang optimal secara lokal dapat menghasilkan solusi global yang buruk.

Sambil mempelajari konsep-konsep baru, periksalah Tutorial TopCoder. Mereka sangat detail dan mudah dimengerti. Berkat mereka aku bisa mengerti pohon berindeks biner.

Bekerja keras

Pernahkah Anda mendengar atlet yang memenangkan Olimpiade tanpa latihan bertahun-tahun? Saya tidak.

Setiap tahun persiapan Olimpiade Komputer dimulai pada bulan September dan berakhir pada bulan April.

Setiap hari selama 8 bulan ini saya berlatih selama 5 jam.

Dan ya, saya menghabiskan 5 jam ini hanya untuk memecahkan masalah algoritmik. Saya ingat hari-hari ketika saya berlatih selama 8 atau bahkan 10 jam. Mengapa? Karena saya menyukainya. Setiap hari ketika saya pulang sekolah, saya langsung pergi ke kamar tidur, duduk di depan komputer dan mulai menganalisis masalah baru. Atau saya sedang mempelajari algoritma baru yang perlu saya ketahui untuk memecahkan masalah ini.

Jika Anda ingin menang, Anda harus melakukan hal yang sama. Pilih satu masalah dan pertahankan. Pikirkanlah hal ini sambil berjalan ke supermarket atau saat mengemudi.

Bagaimana saya memenangkan 3 dari 4 medali emas di Olimpiade Komputer

Tahukah Anda bahwa saat Anda tidur, otak Anda mendefrag informasi yang dikumpulkan hari itu? Dia tampak sedang menumpuk buku sesuai abjad di rak buku. Intinya, otak Anda memikirkan berbagai masalah yang Anda hadapi.

Ini bisa digunakan dengan terampil. Sebelum tidur, bacalah soal yang sulit dan ingat apa yang diperlukan untuk menyelesaikannya. Pada tahap ini, Anda tidak perlu mencari solusi sendiri. Pergi tidur. Otak Anda akan mulai memproses masalah ini. Saat Anda bangun, Anda akan terkejut saat menyadari bahwa Anda menemukan solusinya saat Anda sedang tidur.

Cobalah sendiri. Ini seperti sihir.

Saya membuat blog video

Bagaimana saya memenangkan 3 dari 4 medali emas di Olimpiade Komputer

Paragraf pendek ini tidak berhubungan dengan program olahraga. Jika Anda berusia dua puluhan dan bertanya-tanya bagaimana saya memandang dunia, Anda mungkin ingin memeriksanya blog video saya di Youtube. Saya berbicara tentang dunia, kehidupan dan ilmu komputer di dalamnya.

Bekerja cerdas

Inilah rahasia kesuksesan. Anda membutuhkan tujuan.

Kami adalah manusia dan kami menyukainya menunda. Kami selalu ingin menunda apa yang perlu dilakukan saat ini. Menonton Netflix selalu lebih menyenangkan daripada menghadapi masalah pemrograman dinamis. Anda mengetahui hal ini dan Anda perlu memperbaikinya.

Cara mengatasi penundaan

Tetapkan tujuan untuk diri Anda sendiri. Anda akan selalu menemukan masalah menarik yang dapat Anda gunakan untuk mempelajari sesuatu yang baru (lihat sumber daya yang saya sebutkan di atas). Namun permasalahan ini perlu dipecahkan, bukan sekedar dibaca saja.

Jadi, inilah cara saya mengatasi penundaan. Saya memulai kalender kertas dan mengisi setiap hari dengan masalah yang ingin saya pecahkan. Saya selalu mengisi soal dua hari sebelumnya. Jadi saya tahu bagaimana mengatur waktu saya di hari-hari berikutnya.

Bagaimana saya memenangkan 3 dari 4 medali emas di Olimpiade Komputer

Jadi saya selalu termotivasi. Saya perlu menyelesaikan beberapa masalah dan mencari masalah baru untuk mengisi hari-hari berikutnya di kalender. Mencoret masalah yang sudah terselesaikan terasa menyenangkan. Aku tahu kamu juga menyukainya.

Dapatkan kalender kertas Anda sendiri. Jangan membuat daftar tugas lain di ponsel Anda yang akan Anda lupakan besok.

Cara melakukan debug secara efektif

Apakah Anda ingin menjadi seorang profesional? Jika ya, maka Anda perlu “men-debugnya dalam pikiran Anda”.
Sejauh ini, ini adalah teknik debugging paling efisien yang saya tahu karena tidak memerlukan debugger sama sekali. Otak Anda memeriksa beberapa cabang kode sekaligus dan memberi Anda gambaran kode yang lebih luas dibandingkan dengan debugger klasik.

Anda dapat membandingkan diri Anda dengan seorang grandmaster yang bermain catur dan berpikir 3 langkah ke depan.

Saya menggunakan teknik ini semata-mata sebagai garis pertahanan awal saya. Lalu saya menggunakan debugger nyata.

Untuk mempelajari cara melakukan debug di kepala Anda, Anda perlu berlatih. Saat Anda memvalidasi solusi suatu masalah dan mendapatkan "jawaban yang salah", jangan langsung membuka tombol debugger. Baca kembali kodenya dan pikirkan: “Apa yang terjadi di baris ini?”, “Bagaimana pengaruh “if” di sini terhadap program?”, “Saat kita keluar dari loop, berapa nilai iteratornya?”

Dengan cara ini Anda berpikir sendiri. Seiring waktu, Anda akan belajar menulis kode dan men-debugnya dengan cepat.

Tentang penulis

Bagaimana saya memenangkan 3 dari 4 medali emas di Olimpiade Komputer
Andrei Margeloiu adalah seorang programmer yang rajin dengan minat pada kewirausahaan, startup, dan alam bebas. Anda dapat menghubunginya di LinkedIn.

Terjemahan: Diana Sheremyeva

Sumber: www.habr.com

Tambah komentar