Ranking der Interviewfragen FizzBuzz (1), Implementierung von malloc (10) [geschlossen]


10

Ich hätte gerne Ihre Meinung zur Schwierigkeit der folgenden Interviewfrage:

Suchen Sie das zusammenhängende Subarray mit der maximalen Summe in einem Array von Ganzzahlen in O (n) -Zeit.

Dieses trivial klingende Problem wurde von Jon Bentley in seinen Programming Pearls bekannt gemacht, wo er es verwendet, um Algorithmus-Design-Techniken zu demonstrieren.

Wie würden Sie auf einer Skala von 1 bis 10, wobei 1 der FizzBuzz- (oder HoppityHop- ) Test und 10 die C stdlib-Funktion malloc () ist, das obige Problem bewerten?

Ich denke, die Leute, die diese Frage am besten beantworten können, sind diejenigen, die Programmierperlen gelesen und versucht haben, dieses Problem selbst zu lösen. Um diejenigen zu motivieren, die dies nicht getan haben, wird 'Programming Pearls' mehrmals in der Liste der 'Top 10 Programmierbücher' aufgeführt.

Ein paar Kommentare könnten helfen, eine bessere Bewertung zu erhalten:

  • Die Implementierung von malloc () ist nicht so beeindruckend, wie es scheint. Siehe zum Beispiel die Programmiersprache C von K & R. Es wird manchmal bei Microsoft gefragt .

  • CLRS- Beobachtung zur Problemlösung: Es ist oft schwieriger, ein Problem von Grund auf zu lösen, als eine klar dargestellte Lösung zu überprüfen, insbesondere wenn unter Zeitbeschränkungen gearbeitet wird .


12
Die Schwierigkeit dabei ist, dass ganze Zahlen negativ sein können? (Andernfalls ist das gesamte Array immer das größte Subarray, daher O (1) :-P)
Macke

4
Das Problem sollte sagen "Finde das zusammenhängende Subarray ..."
v64

6
Ich würde "in O (n)" nicht zu einer Anforderung in einem Interview machen. Sie können mit einer naiven Lösung beginnen und sie dann verfeinern, wenn Sie möchten, aber ich würde nicht erwarten, dass jemand in einem einstündigen Interview eine O (n) -Lösung ableiten kann, ohne zuvor mit diesem Algorithmus vertraut zu sein.
Dean Harding

2
Recht. Dies ist ein einfaches Problem, wenn Sie O (n²) -Lösungen zulassen.
Dan04

@ Dean, ich würde hoffen, dass sie in der Lage sind, eine laufende Durchschnittstypsumme von Position j nach j + 1 in O (1) zu verschieben. Vielleicht um fair zu sein, kann das als Hinweis gegeben werden. (Ich gehe davon aus, dass die Länge des Subarrays vorgegeben wurde)
Omega Centauri

Antworten:


17

Das hängt wirklich vom Entwickler ab.

Wenn malloc 10 wäre, würde ich dieses Problem mit 20 bewerten. Aber andererseits habe ich malloc schon einmal gemacht und könnte es wahrscheinlich wieder tun.

Jemand, der dieses Problem gelöst hat oder den entsprechenden Algorithmus auf der Oberseite seines Kopfes kennt, macht es zu einer 5 und malloc () zu einer 10.

Das Problem bei dieser Art von Frage ist, dass, wenn Sie sie zuvor erledigt haben, sie einfach sind und dies wirklich ein Test dafür ist, ob Sie diesen Algorithmus schon einmal gesehen haben. Daher mag ich sie nicht für Interviews.

Für Tests, bei denen Sie dem Entwickler ein paar Tage Zeit geben, ist dies ein perfekter Test, denn wenn er den Algorithmus nicht kennt, geben Sie ihm die Möglichkeit, Nachforschungen anzustellen und sich auf den neuesten Stand zu bringen. Dies ist nicht nur ein Test Ihr Wissen, aber Ihre Fähigkeit, neues Wissen zu erlangen.


Wetter -> ob im vierten Absatz (und Entschuldigung für den Lärm, ich habe nicht den Repräsentanten, um Tippfehler zu bearbeiten ...)
Matthieu M.

Martin, ich denke, es hängt von der Art der Bewerbung ab, für die Sie Leute interviewen. Für Systemtypen ist malloc ziemlich einfach. Für mich - ich stecke fest, [ich nehme an, die Stapeladresse und -länge usw. wurden mir absichtlich verborgen] mit malloc, aber das Subarray-Problem ist fast trivial. Der Schlüssel ist, die Fragen an die Bedürfnisse des Jobs anzupassen.
Omega Centauri

9

Ich denke, die Bewertung sollte zumindest zweidimensional sein. FizzBuzz- mallocbeschreibt den Bereich auf einer Achse, ich würde es "technologische Komplexität" nennen. Aber diese einzige Dimension reicht sicherlich nicht aus, um das Problem zu beschreiben. Um das fragliche Problem zu lösen, sollte der Entwickler mehr als nur Code denken , während die Implementierung mallocmehr Codierungsdisziplin erfordert als die Erstellung komplexer Algorithmen.

So würde ich diese Probleme arrangieren:

Geben Sie hier die Bildbeschreibung ein

Um meinen Standpunkt zu verdeutlichen, habe ich die parallele Zusammenführungssortierung zum Plot hinzugefügt , da dies ein gutes Beispiel für eine technologisch und algorithmisch anspruchsvolle Aufgabe ist.


2

Ich denke, es ist erheblich schwieriger als FizzBuzz oder HoppityHop - diese beiden sind nichts weiter als ein einfaches If-else oder Switch-Case in einer Schleife.

Das maximale Subarray erfordert eine eingehendere Analyse des zugrunde liegenden Problems - dies ist in einer Programmierklasse für Anfänger nicht zu erwarten, da es höhere mathematische Fähigkeiten erfordert als ein Problem vom Typ FizzBuzz. Dieses Problem hat ein ähnliches Gefühl wie das Problem des kürzesten Pfades, das durch den Dijkstra-Algorithmus gelöst wird - vielleicht ist es eine Spezialisierung des Problems des längsten Pfades .

Auf Ihrer Skala von 1 bis 10 würde ich es wahrscheinlich zwischen 3 und 5 bewerten.

* Während der Server ausfiel , stellte ich fest, dass das maximale Subarray-Problem eine eigene Seite auf Wikipedia hat.


Kann jemand erklären, warum der auf Wikipedia beschriebene Algorithmus benötigt wird, wenn der folgende konzeptionell viel einfachere Algorithmus für mich funktioniert: Berechnen Sie in einem einzigen Durchgang die kumulative Summe und ermitteln Sie das Minimum und Maximum auf die übliche Weise. Die aufeinanderfolgende Teilsequenz mit maximaler Summe beginnt nach dem minimalen Cumsum-Index und erstreckt sich bis einschließlich des maximalen Cumsum-Index.
Ben Voigt

2
@ Ben Voigt: Versuchen Sie die Sequenz {+2, -4, +1} oder {+1, +1, -1, -1, -1, -1, +1}. Tatsächlich ist die Kadane-Methode sehr einfach: Sie scannt das Array nur einmal und hält drei Variablen im Stil der dyanmischen Programmierung auf dem neuesten Stand.
Rwong

@rwong: ah ok, Kadane wird für den Fall benötigt, dass das Minimum nach dem Maximum kommt. Und ich zähle 5 Variablen, nicht 3, plus den Schleifenindex.
Ben Voigt

@ Ben: Sie haben Recht, es sind 5 Variablen plus der Schleifenindex.
Rwong

1

Ich gebe ihm eine 3. Über die meisten Programmierer hinaus, die ich interviewt habe, aber ein leichtes Problem für diejenigen, die ich zum Mieten empfohlen habe.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.