Wie lerne ich Algorithmen und Datenstrukturen? [geschlossen]


38

Dies ist eine Fortsetzung meiner vorherigen Frage, in der ich gefragt habe, ob Algorithmen und Datenstrukturen erlernt werden müssen. Ich fühle ja es ist.

Jetzt arbeite ich in einer Umgebung, in der ich nie die Gelegenheit bekomme, sie durch Experimente, durch praktische Übungen oder durch andere Aufgaben zu erlernen. Was ist der richtige Ansatz, wie die richtigen Bücher, die richtigen Probleme, die richtigen Ressourcen, die ich durchlaufen kann, um sechs Monate oder ein oder zwei Jahre Zeit zu haben, um Algorithmen und Datenstrukturen zu lernen? Und meine Gedanken so formen, dass sie Probleme mit Datenstrukturen und Algorithmen in Verbindung bringen können.


3
Cormen ist dein Freund :)
Lukasz Madon

1
@ lukas: Ich bin noch nicht fertig damit, es gibt eine ganze Menge Mathe, mit denen ich mich nicht so wohl fühle. Nach meinem Wissen über Algorithmen, Datenstrukturen und deren Analyse hat es viel mehr gebracht, als jede andere einzelne Quelle :)
Matthieu M.

Sie können sich auch mein Projekt versuchen, die als wikipedia ohne weiteres beliebtes Algorithmen und Datenstrukturen beschrieben und enthält Souce - Codes fast für jeden Artikel (Struktur, Ansatz, Algorithmus) ... en.algoritmy.net
malejpavouk

Antworten:


40

Lesen.

Nein, wirklich, lies.

Lesen Sie alles über Algorithmen und Design, was Sie finden können. Es gibt phänomenale Bücher da draußen. Die Sedgewick-Algorithmusbücher sind gut. Das Algorithm Design Manual von Skiena ist ebenfalls gut. Zusammen folgen mir diese Bücher auf jedem Regal bei jedem Job, zu dem ich gehe, zusammen mit The Mythical Man-Month.

Dann frag.

Sprechen Sie mit Menschen, die Sie respektieren. Fragen Sie sie, welche Entscheidungspunkte sie hatten und warum sie die Entscheidungen getroffen haben, die sie getroffen haben. Die Guten werden dir immer sagen können: "Ich habe X gewählt, weil es in dieser Hinsicht besser ist als A, B. Ich hätte mit C gehen können, aber ich dachte, das wäre eine bessere Wahl."

Als nächstes tun.

Sachen bauen. Baue Dinge, die du niemals benutzen wirst. Bauen Sie Dinge, die Sie nie brauchen werden. Schreiben Sie ein Programm, das ein Sudoku-Rätsel löst. Jetzt mach es nochmal. Und wieder. Baue es auf 5 verschiedene Arten. Erstellen Sie ein Programm, das Sudoku-Rätsel generiert, und geben Sie es an die Löser weiter. Finden Sie den schnellsten Löser. Und dann...

Finde heraus warum.

Das "Was" ist fast nie wichtig. Ich meine, ja, es ist entscheidend für die Fertigstellung des Projekts, aber am Ende, wenn Sie das "Was" kennen, ohne das "Warum" zu kennen, dann können Sie es genauso gut nie tun. Sie haben einen Stichpunkt in Ihrem Lebenslauf. Hol dir einen Keks und gratuliere dir. Das "Warum" ist so viel wichtiger als das "Was".

Und für die Aufzeichnung war Sudoku ein Beispiel. Ich habe viel Freizeit damit verbracht, diese Übung mit einer Menge logischer Rätsel auf Kongregate zu machen, und dabei viel gelernt.

http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/


wirklich, wirklich gute Antwort! Mir gefällt, wie Sie Ihren Rat formuliert haben!
PaxRoman

Ich nehme auch Sedgewick- und Skienna-Bücher überall mit! Das ist wahrscheinlich ein weiterer Grund, warum ich deine Antwort geliebt habe!
PaxRoman

und Cormen zum mix bitte.
AruniRC

1
In einer Zeit, in der die Nachfrage nach Informationen im Internet immer größer wird, ist es wichtig, Folgendes hinzuzufügen: Bücher lesen (natürlich nicht ausschließlich). Eine konsistente, kohärente Einführung in eine Angelegenheit, die länger als 2-3 durch Anzeigen getrennte HTML-Seiten ist, ist A Good Thing ™ ! Unterschätze es nicht (und ja, natürlich sind E-Books in Ordnung).
Joachim Sauer

1
Einverstanden. Konsistenz ist der Schlüssel. Es ist schwierig, Datenstrukturen aufzuspüren, wenn Sie ein oder zwei Daten aus einem Dutzend verschiedener Quellen erhalten. Bücher tendieren auch dazu, bessere Diagramme zu haben (einige Blogs / Online-Quellen tun dies, aber als Verallgemeinerung sind Bücher besser). Die Sedgewick-Bücher haben eine besonders gute Mischung aus Diagrammen, einfach zu befolgendem Code und Beschreibung.
Hounshell

10

Algorithmen

Als ich zwölf Jahre alt war, nahm ich Magieunterricht in einer Gruppe. Der Name des Magiers war Joe Carota. Er hat einmal einen Trick gemacht und ich platzte heraus: "Wie hast du das gemacht?" Er sagte etwas an diesem Tag, das seitdem bei mir geblieben ist.

Joes Antwort: "Michael, wenn du wirklich wissen willst, wie dieser Trick gemacht wird, musst du herausfinden, wie du es selbst machen würdest."

Natürlich wollte ich das nicht hören, aber ich konzentrierte mich darauf, Probleme zu lösen. Dies war aus meiner Sicht eine Problemlösung. Wenn mein erster Versuch, das Problem zu lösen, siebzehn Schritte dauerte und wirklich klobig war, war die gute Nachricht, dass ich das Problem gelöst habe.

Wenn ich mir dann die Lösung anschaue, die ich entwickelt habe, und nach Möglichkeiten suche, diese Lösung zu verfeinern, lerne ich, das Endergebnis zu optimieren. Später in meinem Computerprogrammierleben fand ich heraus, dass dieser Prozess "schrittweise Verfeinerung" genannt wurde. Ich denke, heute nennen sie es Refactoring.

Es hat damals funktioniert, es funktioniert heute noch.




2

Wenn Sie keinen Kurs dazu belegen können, empfehle ich The Algorithm Design Manual. Es gibt eine kostenlose PDF hier , aber es lohnt sich die tatsächlichen Buch bekommen , wenn Sie auf die Programmierung professionell planen.


Die Lösungen sind da. Ich finde es großartig, sie zu haben, wenn man alleine lernt
David Rinck

1

Versuchen Sie, sich für einen Bachelor-Kurs in Datenstrukturen und Algorithmen einzuschreiben. Es ist immer gut, diese Konzepte zusammen mit anderen zu lernen.


Ich bin Absolvent der Informatik und seitdem sind sechs Jahre vergangen. Ich habe mich nie auf dieses Thema konzentriert, da mich das Web, die Benutzerfreundlichkeit und der Client-Server angezogen haben und ich nur auf diesen Gebieten arbeite, aber jetzt habe ich das Gefühl, ich sollte sie auch lernen. Was sind deine Gedanken.
Sushil Bharwani

Geh zurück und nimm an einem Auffrischungskurs teil :-)
Martijn Verburg

1

Beginnen Sie mit der Lösung klassischer Probleme, zum Beispiel in Sphere Online . Die Site sieht vielleicht nicht besonders gut aus, aber das sind klassische Programmierprobleme, die viele der heute verwendeten wichtigen Datenstrukturen und Algorithmen erfordern.

Lösungen können in einer Vielzahl von Programmiersprachen eingereicht werden, von C / C ++ bis zu JavaScript, Lisp, Smalltalk, Assembler und weiteren 40 Sprachen. Sie können sich also ganz darauf konzentrieren, das Problem mit der Programmiersprache zu lösen, mit der Sie sich wohl fühlen.


1

CLRS

Dies ist bei weitem meine Lieblingsressource. Ich habe es in meinem Bachelor-Kurs Informatik-Algorithmen verwendet und kaufte das Buch 4 Jahre später, um es selbst zu lesen, um mich auf meine MS Comp Sci-Kurse vorzubereiten. Es ist keineswegs einfach zu lesen, aber wenn Sie daran arbeiten, einige der vorgestellten Mathe- / Beweise zu verstehen und dann den Pseudocode in Ihrer (n) Lieblingssprache (n) zu implementieren, ist es den etwas hohen Preis wert. Das von anderen erwähnte Algorithm Design Manual ist auch eine großartige Ressource zum Erkennen von Problemen, aber ich fand, dass CLRS für reine Details besser ist.


0

Sie könnten immer so etwas versuchen: http://codekata.pragprog.com/

Ich habe immer besser gelernt, indem ich es mir überlegt habe und nicht gelesen habe. Sie sollten jedoch Dokumentations- / Lesematerial zur Verfügung haben, um nach Antworten zu suchen.


0

Kaufen Sie dieses Buch , leihen Sie es aus oder stehlen Sie es! Rest folgt :)

Einführung in Algorithmen von Rivest und Cormen. Es wird anfangs sehr schwer zu folgen sein, wenn Sie die Erklärung des Mergesort in der Einleitung hinter sich haben. Alles entfaltet sich zu Ihnen schön.

Außerdem werden Sie besser, wenn Sie die im Buch angegebenen Probleme lösen. Ich wollte mich auch nach meinem Schulabschluss nie wirklich von dem Buch trennen. Es ist so gut

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.