Saya ingin menyampaikan pendapat Anda tentang sulitnya pertanyaan wawancara berikut:
Temukan subarray yang berdekatan dengan jumlah maksimum dalam array bilangan bulat dalam waktu O (n).
Masalah yang terdengar sepele ini dibuat terkenal oleh Jon Bentley dalam Programming Pearls di mana ia menggunakannya untuk menunjukkan teknik desain algoritma.
Pada skala 1-10, 1 menjadi tes FizzBuzz (atau HoppityHop ) dan 10 sedang mengimplementasikan fungsi C stdlib malloc (), bagaimana Anda memberi peringkat masalah di atas?
Saya pikir orang-orang yang dapat menjawab pertanyaan ini adalah mereka yang telah membaca Programming Pearls dan telah mencoba menyelesaikan masalah ini sendiri. Untuk memotivasi mereka yang belum, 'Programming Pearls' ditampilkan berulang kali dalam daftar '10 buku pemrograman'.
Beberapa komentar mungkin membantu mendapatkan peringkat yang lebih baik:
Menerapkan malloc () tidak seberani kelihatannya. Lihat Bahasa Pemrograman K&R misalnya. Terkadang ditanyakan di Microsoft .
Pengamatan CLRS pada penyelesaian masalah: seringkali lebih sulit untuk menyelesaikan masalah dari awal daripada memverifikasi solusi yang disajikan dengan jelas, terutama ketika bekerja di bawah kendala waktu .
sumber
Jawaban:
Itu sangat tergantung pada pengembang.
Jika malloc adalah 10 maka saya akan menilai masalah ini sebagai 20. Tapi sekali lagi saya telah melakukan malloc sebelumnya dan mungkin bisa melakukannya lagi.
Seseorang yang telah melakukan masalah ini atau mengetahui algoritma yang tepat dari bagian atas kepalanya akan membuatnya menjadi 5 dan malloc () menjadi 10.
Masalah dengan jenis pertanyaan ini adalah bahwa jika Anda telah melakukannya sebelumnya mudah dan ini benar-benar ujian apakah Anda pernah melihat algoritma ini sebelumnya. Jadi saya tidak suka mereka untuk wawancara.
Sekarang untuk tes di mana Anda memberi pengembang beberapa hari itu adalah tes yang sangat baik karena jika mereka tidak tahu algoritma Anda kemudian memberi mereka kesempatan untuk melakukan penelitian dan mendapatkan kecepatan dan itu adalah tes tidak hanya pengetahuan Anda tetapi kemampuan Anda untuk mendapatkan pengetahuan baru.
sumber
Saya kira, peringkatnya harus dua dimensi, setidaknya. FizzBuzz-
malloc
menggambarkan kisaran pada satu sumbu, saya akan menyebutnya "kompleksitas teknologi". Tetapi dimensi tunggal ini tentu saja tidak cukup untuk menggambarkan masalahnya. Untuk memecahkan masalah yang dimaksud, pengembang harus berpikir lebih dari kode , sementara implementasimalloc
membutuhkan lebih banyak disiplin koding daripada menciptakan algoritma yang kompleks.Jadi, inilah cara saya mengatur masalah ini:
Untuk mengilustrasikan poin saya, saya menambahkan semacam penggabungan paralel ke plot, karena, saya kira, ini adalah contoh yang baik dari tugas yang canggih secara teknologi dan algoritmik.
sumber
Saya pikir ini jauh lebih sulit daripada FizzBuzz atau HoppityHop - keduanya tidak lebih dari sebuah if-else atau switch-case yang sederhana dalam satu lingkaran.
Sub-array maksimum akan membutuhkan analisis yang lebih dalam dari masalah yang mendasarinya - ini bukan sesuatu yang Anda harapkan untuk dilihat di kelas pemrograman pemula karena memerlukan keterampilan matematika yang lebih tinggi daripada masalah tipe FizzBuzz. Masalah ini memiliki rasa yang mirip dengan masalah jalur terpendek, yang diselesaikan dengan algoritma Dijkstra - mungkin ini merupakan spesialisasi masalah jalur terpanjang .
Pada skala Anda 1 hingga 10 saya mungkin akan menilai antara 3 dan 5.
* Ketika server sedang down saya menemukan bahwa masalah subarray maksimum memiliki halaman sendiri di wikipedia.
sumber
Saya memberikan 3. Di luar sebagian besar programmer yang saya wawancarai, tetapi masalah mudah bagi mereka yang saya rekomendasikan untuk disewa.
sumber