Bagaimana saya meningkatkan keterampilan saya dalam bekerja dengan algoritma, struktur data, dan belajar menggunakan semua ini dalam praktik



Dari seorang penerjemah: hari ini kami menerbitkan artikel untuk Anda oleh Fabian Terh . Artikel ini terutama bermanfaat bagi programmer pemula.

Saya seorang programmer otodidak, posting ini mencerminkan pengalaman dan keterampilan pribadi saya dalam bidang-bidang seperti algoritma dan struktur data; Selain itu, saya berbicara tentang cara untuk memecahkan masalah (omong-omong, yang kedua diberikan kepada saya agak lebih buruk daripada yang pertama).

Skillbox merekomendasikan: kursus praktis dua tahun, "Saya seorang Pengembang Web PRO . "

Kami mengingatkan Anda: untuk semua pembaca "Habr" - diskon 10.000 rubel saat mendaftar untuk kursus Skillbox apa pun menggunakan kode promo "Habr".

Masalah: Anda tahu teorinya, tetapi Anda kesulitan berlatih


Belum lama ini saya memiliki masalah yang dapat digambarkan sebagai "Saya tidak tahu apa yang saya tidak tahu" - kita bisa mengatakan rasa ingin tahu. Faktanya adalah saya mengerti teorinya, dan cukup baik. Saya tahu cara kerja daftar, apa operasi terpisah, apa tipe data abstrak, dll.

Tetapi masalahnya adalah saya tidak tahu informasi apa yang dapat berguna bagi saya dalam praktik, dan saya tidak tahu apa yang mungkin hilang untuk beberapa tugas. Jadi, sulit bagi saya ketika saya perlu menyelesaikan beberapa masalah.

Jenis-Jenis Tugas Yang Dapat Ditemui

Contoh pertanyaan tentang struktur data: jelaskan bagaimana Anda akan menyisipkan simpul ke dalam daftar tertaut dan tentukan kompleksitas waktu.

Inilah pertanyaan tentang algoritma: temukan elemen dalam array yang diurutkan yang diputar dan tentukan kompleksitas waktunya.

Akhirnya, pertanyaan terakhir, "tingkat" yang lebih tinggi dari yang sebelumnya, adalah permintaan untuk menggambarkan cara untuk memecahkan masalah dan daftar persyaratan untuk implementasinya.

Dalam perjalanan kerja, Anda mungkin perlu melakukan hal itu, mis. deskripsi solusinya. Dalam pemrograman kompetitif, seringkali diperlukan untuk memberikan kode kerja tanpa secara eksplisit menentukan struktur atau algoritma data. Dengan kata lain, Anda diharapkan dapat menggunakan struktur data dan algoritma yang optimal dalam setiap kasus untuk menyelesaikan masalah seefisien mungkin.

Bagaimana saya bisa meningkatkan keterampilan saya?


Secara pribadi, saya menggunakan tiga sumber daya untuk ini: HackerRank, LeetCode dan Kattis. Mereka mirip satu sama lain, terutama dua yang pertama, tetapi tidak identik.

Saya akan membagi keterampilan yang dibutuhkan untuk memecahkan masalah menjadi tiga kelompok:

  • pengetahuan tentang struktur data;
  • pengetahuan tentang algoritma;
  • kemampuan untuk menerapkan struktur dan algoritma data.

Dua kategori pertama adalah dasar, mereka berada di bagian paling bawah. Kategori ketiga adalah kelas yang lebih tinggi.

Pengetahuan tentang struktur data

HackerRank adalah tempat favorit saya di sini. Ini memiliki bagian yang dikhususkan untuk struktur data, di mana informasi dapat disaring berdasarkan jenis, termasuk pohon, daftar tertaut, array, dll.

Masalah yang dibahas di HackerRank terutama terkait dengan bekerja dengan struktur data:

  • Array: rotasi array dan eksekusi tindakan lain dengannya.
  • Linked Linked: membalikkan, deteksi siklus.
  • Pohon: bertukar simpul, validasi BST.

Anda mungkin sudah mengerti apa yang terjadi. Pertanyaan yang diajukan oleh sumber daya tidak dapat digunakan secara langsung dalam menyelesaikan masalah. Tetapi mereka diperlukan untuk memahami dasar-dasar, yang sangat penting dalam kasus saya.

HackerRank tidak memiliki "model solusi" yang tersedia secara umum, meskipun ada banyak tips, trik, dan bahkan fragmen kode kerja di bagian diskusi. Semua ini banyak membantu saya.

Pengetahuan tentang algoritma

HackerRank memiliki bagian dengan algoritma, meskipun LeetCode lebih dekat dengan saya. Tampak bagi saya bahwa pada sumber daya kedua daftar masalah yang ditangani jauh lebih luas, dan ada penjelasan dan tip.

Yang terbaik adalah memulai dengan 100 pertanyaan paling umum (bagian ini ada di LeetCode). Beberapa sangat berguna bagi saya:

  • penggabungan akun;
  • terbesar terus meningkat selanjutnya;
  • cari dalam array terurut yang diputar.

Tidak seperti masalah yang terkait dengan struktur data, fokus di sini adalah bagaimana melakukan sesuatu. Misalnya, masalah penggabungan akun terutama terkait dengan penggunaan algoritma UFDS standar. Masalah pencarian dalam array yang diurutkan yang diputar adalah rotasi dalam pencarian biner. Kadang-kadang mungkin untuk menemukan metode kualitatif baru untuk memecahkan masalah - misalnya, metode "jendela geser" untuk masalah kenaikan terus menerus terpanjang yang terus menerus. "

Kemampuan untuk menerapkan struktur data dan algoritma

Yah, saya sudah memompa keterampilan ini dengan bantuan sumber daya Kattis. Ada arsip besar masalah yang diselesaikan, yang mengumpulkan data dari berbagai sumber, termasuk kompetisi pemrogram dari seluruh dunia.

Sayangnya, Kattis tidak memiliki forum, ditambah kasus bersifat pribadi, bukan kasus umum. Karena itu, ada beberapa masalah yang tidak bisa saya pecahkan dengan bantuannya.

Namun, sumber daya dapat membantu banyak programmer. Saya sendiri tidak menghabiskan terlalu banyak waktu mempelajarinya.

Sumber daya lainnya


Geeksforgeeks adalah sumber daya berharga lainnya untuk belajar tentang algoritma dan struktur data. Saya suka fakta bahwa ia menyediakan cuplikan dalam berbagai bahasa, termasuk C ++, Java dan Python. Anda dapat menggunakannya tanpa masalah.

Dan, tentu saja, ada Google tua yang bagus dari YouTube.

Kesimpulan


Sebenarnya, hal utama adalah menulis kode, terlibat dalam debugging, mempelajari kode pengembang lain, yang akan membantu Anda dengan cepat menangani tugas-tugas Anda saat ini. Memecahkan masalah sulit, tetapi dengan setiap upaya, dengan setiap masalah yang diselesaikan, Anda akan menjadi lebih baik dan lebih baik.


Source: https://habr.com/ru/post/id435778/


All Articles