Ich habe meine Notizen überprüft und bin über die Implementierung verschiedener Sortieralgorithmen gestolpert.
Als ich versuchte, einen Sinn für die Implementierung von QuickSort und MergeSort zu finden, kam mir der Gedanke, dass ich, obwohl ich beruflich programmiere und mich für anständig halte, weder über das fotografische Gedächtnis noch über die schiere Intelligenz verfüge, um diese Algorithmen ohne zu implementieren unter Berufung auf meine Notizen. Ich erinnerte mich nur daran, dass einige dieser Algorithmen stabil sind und andere nicht. Einige benötigen O (nlog (n)) oder O (n ^ 2), um den Vorgang abzuschließen. Einige verwenden mehr Speicher als andere ...
Ich würde das Gefühl haben, dass ich diese Art von Arbeit nicht verdiene, wenn es nicht so wäre, weil meine Position nicht erfordert, dass ich einen anderen Sortieralgorithmus verwende als die, die in Standard-APIs zu finden sind. Ich meine, wie viele von Ihnen haben eine Programmierposition, bei der es wirklich wichtig ist, dass Sie sich an solche Dinge erinnern oder sich diese selbst einfallen lassen?
quelle
Antworten:
Lassen Sie uns Albert fragen und sehen, was er zu diesem Thema zu sagen hat:
Amen, Bruder Albert, Amen.
Sobald Sie einen guten Überblick über die wesentlichen Algorithmen in einer bestimmten Disziplin (Sortieren, Suchen usw.) erhalten haben, können Sie die Implementierungsdetails vergessen, bis Sie das Algo tatsächlich benötigen. In diesem Fall können Sie es nachschlagen oder a verwenden bereits existierende lib. Vor 25 Jahren baute ich ein großes Suchsystem mit B * -Bäumen auf, aber heute würde ich RTFM benötigen, um sie gut zu nutzen.
quelle
O(n log n)
n log n
Es geht nicht wirklich um Auswendiglernen. Es geht darum, allgemeine Klassen von Algorithmen wie Teilen und Erobern zu verstehen. Wenn Sie das Teilen und Erobern wirklich verstehen, brauchen Sie sich Quicksort nicht zu merken. Sie können es bei Bedarf vor Ort erneut abrufen. Außerdem lohnt es sich nicht einmal, Quicksorting selbst abzuleiten, sondern zu erkennen, wann ein neues Problem einer Lösung zum Teilen und Erobern zugänglich ist.
Nicht alle Programmieraufträge sind gleich. Einige Jobs erfordern fundierte Kenntnisse über Algorithmen, andere brauchen Leute, die sich mit Typentheorie auskennen, und andere brauchen Leute, die Daten aus einem Webformular entfernen und in eine Datenbank verschieben können. Einige Jobs erfordern sogar all diese Fähigkeiten auf einmal. Bei welcher Art von Job möchten Sie arbeiten?
quelle
Ich denke, Sie müssen sich nur an alles erinnern, wenn Sie sich für eine Stelle bewerben, wenn Sie vor Ort Antworten finden müssen und keine externen Ressourcen haben.
Ich habe Kollegen QuickSort und so weiter umschreiben lassen, aber ich fordere sie immer wieder auf, wieder die in der Sprache integrierten Sortierfunktionen zu verwenden. Ich weiß, dass wir uns abhängig von der Art der Projekte, an denen wir arbeiten, an andere Algorithmen erinnern müssen, da diese normalerweise nicht in Standardbibliotheken enthalten sind, die Sortierung jedoch nicht erfolgt, da sie normalerweise in die Sprache integriert ist.
Wenn wir uns diese Algorithmen merken müssen, wenden wir uns in der Regel Google oder einem Buch zu, und in der Regel wird nicht nach einer bestimmten Implementierung gesucht, sondern nach der besten Implementierung für unser Problem.
quelle
Sich nur daran zu erinnern, welcher Algorithmus in welchen Szenarien nützlich ist, ist mehr als genug , um Ihnen bei Ihrer Arbeit zu helfen. Tatsächlich erfordern die meisten Programmieraufträge kein Auswendiglernen des Ansatzes. Sie interessieren sich vielmehr für Ihre Art , algorithmische Muster zu erkennen, wenn Sie mit dem Problem konfrontiert sind .
Tatsächlich gibt es in den meisten Programmierblogs / -artikeln zu Algorithmus-Themen eine Fülle von Informationen. Das Auswendiglernen der genauen Umsetzung spielt daher keine Rolle. Die wertvollste Information wäre, sich einen Überblick darüber zu verschaffen, welche Arten von Algorithmen zur Verfügung stehen und welche spezifischen Probleme sie lösen können . Die Suche nach einer genauen Implementierung, sobald Sie wissen, wonach Sie suchen, ist ziemlich schnell.
Zusammenfassend ist es immer besser zu wissen, wonach Sie suchen und wo sich die Referenzen befinden - was Sie zur Quelle führt.
quelle
Die genaue Implementierung ist nicht sehr wichtig. Das Prinzip von Mergesort / Quicksort - Rekursion, Partitionierung usw. ist jedoch sehr einfach und sollte von jedem Programmierer verstanden werden. Diese Algorithmen sind tatsächlich sehr einfach in Worten zu beschreiben, sobald Sie sie verstanden haben.
Es ist nicht wirklich ein Problem, ob Sie es nachschlagen oder googeln können, sondern ob Programmierer diese Problemlösungstechniken verstehen und sie auf andere Situationen anwenden können.
quelle
Ich bin bei diesem Thema zweideutig. Ich kenne viele Programmierer, die nicht wissen, was ein Sortieralgorithmus ist, aber ihre Arbeit ziemlich gut machen. Ich glaube auch daran, Prinzipien zu verstehen, um die Domäne wirklich zu verstehen.
Es fällt mir schwer, eine unvoreingenommene Antwort zu diesem Thema zu finden, da ich so lange programmiert habe, dass ich wahrscheinlich mehr Algorithmen vergessen habe, die ich derzeit kenne - aber die in dieser Frage erwähnten Sortierungen kenne ich immer noch. Ich denke, die Vordenker in Agile (z. B. Ron Jeffries, Alistair Cockburn) haben einige gute Ideen in der Nähe dieser Idee (z. B. Shu-Ha-Ri).
Zusammenfassend zu dieser verwirrenden Antwort: Verwenden Sie auf jeden Fall die API (NIH ist ein Zeichen für die Unreife des Entwicklers), aber verstehen Sie immer die zugrunde liegenden Prinzipien. Ich hoffe das hilft.
quelle
Sortieren und Suchen sind unglaublich wichtig, egal ob Sie Donald Knuth-Fan sind oder die nächste Larry Page sein möchten. Abhängig von Ihrem Unternehmen und dem Grad des Wettbewerbs, den Sie unter Ihren Bewerbern ausüben können, würde ich Ihnen empfehlen, einige der folgenden Konzepte in das Interview aufzunehmen.
Sortierung
Suchen
Einige könnten sagen, dass das Erfordern des Codes für diese Algorithmen übertrieben ist, es sei denn, der Job befindet sich auf einer verlassenen Insel ohne Internetverbindung. Eine weitere Überlegung ist, dass die Implementierung dieser Art für viele Kandidaten einen großen Teil Ihrer Zeit in Anspruch nehmen kann, wenn Sie 30 Minuten Zeit haben und nach etwas anderem fragen möchten.
quelle