Malloc (10) uygulayan FizzBuzz (1) ile röportaj soru sıralaması [kapalı]


10

Aşağıdaki röportaj sorusunun zorluğu hakkında görüşlerinizi almak istiyorum:

O (n) zamanında bir tamsayılar dizisinde maksimum toplamla bitişik alt diziyi bulun.

Bu önemsiz sondaj problemi Jon Bentley tarafından Programlama İncilerinde ünlü oldu ve algoritma tasarım tekniklerini göstermek için kullandı.

1-10, 1 tanesi FizzBuzz (veya HoppityHop ) testi ve 10 tanesi C stdlib işlevi malloc () 'u uygularken yukarıdaki sorunu nasıl sıralarsınız ?

Bence bu soruya en iyi cevap verebilen insanlar Programlama İncilerini okuyan ve bu sorunu kendi başlarına çözmeye çalışan kişilerdir. Sahip olmayanları motive etmek için, 'Programlama İncileri' birçok kez 'En iyi 10 programlama kitabı' listesinde yer alır.

Birkaç yorum daha iyi bir puan almaya yardımcı olabilir:

  • Malloc () uygulamak göründüğü kadar zorlu değildir. Örneğin, K&R C Programlama Dili bölümüne bakınız. Bazen Microsoft'a sorulur .

  • Problem çözmede CLRS gözlemi: Bir problemi sıfırdan çözmek, özellikle zaman kısıtlamaları altında çalışırken, açıkça sunulan bir çözümü doğrulamaktan daha zordur .


12
Burada tamsayıların negatif olabilmesinin zorluğu? (aksi takdirde tüm dizi her zaman en büyük alt dizidir, dolayısıyla O (1) :-P)
Macke

4
Sorun " bitişik alt
diziyi

6
Bir röportajda "in O (n)" şart olmaz. Saf bir çözümle başlayabilir ve daha sonra isterseniz düzeltebilirsiniz, ancak bir kişinin bu algoritmaya daha önce maruz kalmadan 1 saatlik bir röportajda bir O (n) çözeltisi türetmesini beklemem.
Dean Harding

2
Sağ. O (n²) çözümlerine izin verirseniz bu kolay bir sorundur.
dan04

@Dean, çalışan bir ortalama türü toplamını O (1) 'de j konumundan j + 1'e taşıyabileceklerini umuyorum. Belki de adil olmak gerekirse, bu bir ipucu olarak sunulabilir. (Alt dizinin uzunluğunun önceden belirtildiğini varsayıyorum)
Omega Centauri

Yanıtlar:


17

Bu gerçekten geliştiriciye bağlıdır.

Malloc 10 olsaydı, bu sorunu 20 olarak değerlendirirdim. Ama sonra tekrar malloc yaptım ve muhtemelen tekrar yapabilirdim.

Bu problemi yapan veya başlarının üst kısmının uygun algoritmasını bilen biri, onu 5 ve malloc () a 10 yapacaktır.

Bu tür bir soruyla ilgili sorun, bunları kolay olmadan önce yaptıysanız ve bu gerçekten bu algoritmayı daha önce görüp görmediğinizin bir testidir. Bu yüzden röportaj için onları sevmiyorum.

Şimdi geliştiriciye birkaç gün verdiğiniz testler için mükemmel bir test çünkü algoritmayı bilmiyorlarsa, onlara araştırma yapma ve hızlanma şansı veriyorsunuz ve sadece bir test değil ancak yeni bilgi edinme yeteneğiniz.


hava durumu -> dördüncü paragrafta olsun (ve gürültü için özür dilerim, yazım düzenlemeleri yapmak için temsilcim yok ...)
Matthieu M.

Martin, bence bu, insanlarla görüştüğünüz başvuru türüne bağlı. Sistem türleri için malloc oldukça basittir. Benim için -Kapıştığım için, malloc ile [yığın adresi ve uzunluğu vb. Benden kasıtlı olarak gizlendi. Anahtar, soruları işin ihtiyaçları ile eşleştirmektir.
Omega Centauri

8

Sanırım derecelendirme en azından iki boyutlu olmalı. FizzBuzz- mallocaralığı bir eksende tanımlar, ben buna "teknolojik karmaşıklık" derdim. Ancak bu tek boyut kesinlikle sorunu tanımlamak için yeterli değildir. Söz konusu sorunu çözmek için, geliştirici koddan daha fazlasını düşünmeli , ancak uygulama mallockarmaşık algoritmalar oluşturmaktan daha fazla kodlama disiplini gerektiriyor.

İşte bu sorunları nasıl ayarlayacağım:

resim açıklamasını buraya girin

Benim açımdan göstermek için, grafiğe paralel birleştirme sıralamasına ekledim , sanırım, hem teknolojik hem de algoritmik olarak sofistike göreve iyi bir örnek.


2

Bence FizzBuzz veya HoppityHop'tan çok daha zor - bu ikisi bir döngü halinde basit bir if-else veya switch-case'den başka bir şey değildir.

Maksimum alt dizi, altta yatan sorunun daha derin bir analizini gerektirir - bu, yeni başlayan bir programlama sınıfında FizzBuzz tipi bir problemden daha yüksek matematik becerileri gerektirdiğinden görmeyi beklediğiniz bir şey değildir. Bu sorun, Dijkstra'nın algoritması tarafından çözülen en kısa yol sorununa benzer bir his veriyor - belki de en uzun yol sorununun bir uzmanlığı .

1'den 10'a kadar olan ölçekte, muhtemelen 3 ile 5 arasında derecelendiririm.

* Sunucu kapalıyken , maksimum alt dizi sorununun wikipedia'da kendi sayfası olduğunu gördüm .


Birisi aşağıdaki kavramsal olarak çok daha basit algoritma benim için çalıştığında, wikipedia'da açıklanan algoritmanın neden gerekli olduğunu açıklayabilir mi: Tek bir geçişte, kümülatif toplamı hesaplayın, her zamanki gibi minimum ve maksimumları bulun. Maksimum toplam ardışık alt sekans, minimum cumsum indeksinden sonra başlar ve maksimum cumsum indeksine kadar ve buna kadar uzanır.
Ben Voigt

2
@Ben Voigt: {+2, -4, +1} veya {+1, +1, -1, -1, -1, -1, +1} dizisini deneyin. Aslında, Kadane yöntemi çok basittir - diziyi yalnızca bir kez tarar ve üç değişkeni dyanmik programlama tarzında güncel tutar.
rwong

@rwong: ah tamam, minimumun maksimumdan sonra gelmesi durumunda Kadane'ye ihtiyaç var. Ve 3 değil 5 değişken artı döngü indeksi sayıyorum.
Ben Voigt

@Ben: haklısın, 5 değişken artı döngü indeksi.
rwong

1

Ben bir röportaj verdim 3. Görüştüğüm programcıların çoğunun ötesinde, işe almayı önerdiğim kişiler için kolay bir problem.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.