Wawancara pertanyaan peringkat FizzBuzz (1), mengimplementasikan malloc (10) [ditutup]


10

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 .


12
Kesulitan di sini adalah bahwa bilangan bulat bisa negatif? (Kalau tidak seluruh array selalu subarray terbesar, maka O (1) :-P)
Macke

4
Masalahnya seharusnya mengatakan "Temukan subarray yang berdekatan ..."
v64

6
Saya tidak akan menjadikan "dalam O (n)" persyaratan dalam sebuah wawancara. Anda dapat mulai dengan solusi naif dan kemudian memperbaikinya jika Anda mau, tetapi saya tidak akan mengharapkan seseorang untuk dapat memperoleh solusi O (n) dalam wawancara 1 jam tanpa paparan sebelumnya untuk algoritma ini.
Dean Harding

2
Baik. Ini adalah masalah yang mudah jika Anda mengizinkan solusi O (n²).
dan04

@Dean, saya berharap mereka akan dapat memindahkan jumlah aveerage type berjalan dari lokasi j ke j +1 di O (1). Mungkin untuk bersikap adil, itu bisa diberikan sebagai petunjuk. (Saya mengasumsikan panjang subarray telah ditentukan sebelumnya)
Omega Centauri

Jawaban:


17

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.


cuaca -> apakah dalam paragraf keempat (dan maaf untuk kebisingan, saya tidak punya perwakilan untuk melakukan pengeditan kesalahan ketik ...)
Matthieu M.

Martin, saya pikir itu tergantung pada jenis aplikasi yang Anda wawancarai untuk orang. Untuk sistem, tipe malloc cukup sederhana. Bagi saya - saya macet, [saya kira alamat stack dan panjang dll sengaja disembunyikan dari saya] dengan malloc, tetapi masalah subarray hampir sepele. Kuncinya adalah mencocokkan pertanyaan dengan kebutuhan pekerjaan.
Omega Centauri

8

Saya kira, peringkatnya harus dua dimensi, setidaknya. FizzBuzz- mallocmenggambarkan 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 implementasi mallocmembutuhkan lebih banyak disiplin koding daripada menciptakan algoritma yang kompleks.

Jadi, inilah cara saya mengatur masalah ini:

masukkan deskripsi gambar di sini

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.


2

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.


Adakah yang bisa menjelaskan mengapa algoritma yang dijelaskan pada wikipedia diperlukan, ketika algoritma konseptual yang jauh lebih sederhana ini bekerja untuk saya: Dalam satu lintasan, hitung jumlah kumulatif, temukan minimum dan maksimum dengan cara biasa. Jumlah maksimum berturut-turut dimulai setelah indeks cumsum minimum, dan meluas hingga dan termasuk indeks cumsum maksimum.
Ben Voigt

2
@Ben Voigt: coba urutan {+2, -4, +1}, atau {+1, +1, -1, -1, -1, -1, +1, +1}. Sebenarnya, metode Kadane sangat sederhana - hanya memindai array sekali dan membuat tiga variabel diperbarui dalam gaya pemrograman dyanmic.
rwong

@ rwong: ah ok, Kadane diperlukan dalam kasus ketika minimum datang setelah maksimum. Dan saya menghitung 5 variabel, bukan 3, ditambah indeks lingkaran.
Ben Voigt

@ Ben: Anda benar, itu 5 variabel plus indeks loop.
rwong

1

Saya memberikan 3. Di luar sebagian besar programmer yang saya wawancarai, tetapi masalah mudah bagi mereka yang saya rekomendasikan untuk disewa.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.