So lernen Sie Algorithmen am besten im Detail kennen

8

Ich habe diese Seite mit großem Interesse gelesen, aber ich finde, dass viel davon über meinen Kopf geht. Dies hat mich dazu gebracht, viel mehr über Algorithmen und CS im Allgemeinen zu lernen. Soweit ich aus meiner Forschung ersehen kann, gibt es zwei Möglichkeiten, dies zu tun.

  1. Ich kann durch ein schönes dickes schweres Buch und arbeite mich langsam aber sicher durch.

  2. Ich kann "lernen durch Handeln" und durch ein schönes Buch, aber anstatt es von vorne bis hinten zu lesen, gehe zu Teilen, die mich interessieren, und arbeite an der Implementierung und Anwendung von Algorithmen, die ich mag.

  3. ?

Meine Frage ist, welche der oben genannten Methoden haben Sie verwendet und würden Sie den gleichen Ansatz jemand anderem empfehlen?

Daniel Gratzer
quelle
1
Vielleicht finden Sie meine Antwort auf cstheory hilfreich.
Dai

Antworten:

15

Ich habe vor Jahren in einem Universitätskurs etwas über Algorithmen gelernt. Aber wenn Sie Algorithmen mit einem Buch machen wollen, dann brauchen Sie einen guten. Zwei Bücher sind für mich der Weg, um in Algorithmen einzusteigen:

  • Das Algorithm Design Manual von Steven S. Skiena
  • Einführung in Algorithmen von T. Cormen, C. Leiserson, R. Rivest und C. Stein

Das erste ist vielleicht eher ein praktisches Handbuch, während das letztere eher der Bibel ähnelt, aber mit Beweisen.

Die Strategie, die Sie verfolgen könnten, besteht darin, zu lesen, die theoretischen Übungen zu machen und dann so viel wie möglich zu implementieren, wobei Sie sich auf Algorithmen / Probleme konzentrieren, die Sie interessant oder herausfordernd finden oder beides. Versuchen Sie daher, alle Aspekte von Algorithmen abzudecken und nicht nur zu implementieren. Dies beinhaltet die Untersuchung ihrer zeitlichen und räumlichen Komplexität und den Nachweis ihrer Richtigkeit. Das Studium von Algorithmen ist mehr als nur die Implementierung von Algorithmen.

Wenn Sie genug Erfahrung gesammelt haben, spezialisieren Sie sich. Wenn Sie sich beispielsweise für Computational Geometry oder nicht blockierende Algorithmen interessieren, sollten Sie sich mit Büchern und Forschungsarbeiten in diesem Bereich befassen.

Spezialisierung ist gut, aber es ist auch gut, Techniken aus anderen Bereichen zu testen. Daher ist es eine gute Möglichkeit, ein breites Spektrum an Algorithmen zu lesen (und solche Algorithmen zu implementieren), um ein breites Spektrum an Fähigkeiten aufrechtzuerhalten.

BEARBEITEN: Nachdem Sie die einführenden Algorithmen durchgearbeitet haben, können Sie Bücher wie Randomisierte Algorithmen von Motwani & Raghavan oder Approximationsalgorithmen von Vazirani konsultieren . Diese Bücher sind eine Übersicht (und in gewissem Maße eine gute Lernübung in mathematischen Techniken) in fortgeschritteneren Algorithmus-Entwurfstechniken. Sie erweitern auch Ihren Einblick in viele andere Bereiche in CS wie Diagramme und Netzwerke, Datenstrukturdesign und Optimierung.

Dave Clarke
quelle
Ich habe angefangen, eine Kopie des Algorithm Design Manual online zu lesen, und ich liebe es bis jetzt! Vielen Dank!
Daniel Gratzer
3
Ich würde einen Satz leicht umformulieren: Bei der Untersuchung von Algorithmen geht es nur nebenbei um die Implementierung von Algorithmen.
JeffE
13

Unterrichten Sie eine Algorithmusklasse.

Oder vielleicht sogar noch besser:

schreibe ein Lehrbuch für Algorithmen.

JeffE
quelle
3
+1. Anfangs hielt ich das für einen Witz, überlegte es mir aber noch einmal und stellte fest, dass nichts Sie so gründlich verstehen lässt, wie wenn Sie gezwungen sind, jemand anderem zu helfen, die gleichen Konzepte zu lernen. Dazu gehören für einen Professor natürlich beide Unterrichtsstunden, das Vorbereiten von Vorlesungsnotizen, Notizen und natürlich das Schreiben von Lehrbüchern ;-) Meine zwei Cent: Das Vorbereiten von Übungen hilft auch sehr viel. Für einen Studenten stimme ich der von @Dave Clarke vorgeschlagenen Strategie zu.
Massimo Cafaro
Nein, @vzn, diese Antwort ist völlig ernst.
JeffE
na ja, ich hatte Angst davor - dann könnte eine Antwort, die für jeden geeignet / angepasst ist, der kein Lehrer oder Professor ist (was eine sehr enge Untergruppe der Bevölkerung ist), "Ihrem Freund den Algorithmus beibringen" oder "eine Beschreibung des schreiben" Algorithmus aus dem Speicher & lassen Sie jemanden versuchen, ihn zu lesen und zu befolgen "
vzn
5
Sei nicht so starr. Warum müssen Sie bezahlt werden , um zu unterrichten (oder zu schreiben), um zu unterrichten (oder zu schreiben)? Unterrichten Sie Ihre Kollegen. Bringen Sie Ihren Kindern bei. Freiwillige an einer örtlichen High School oder Community College. Mach YouTube-Videos an deinen freien Tagen. Starten Sie einen Algorithmus Pechakucha Night.
JeffE
touche. Vermutung, dass dies funktioniert, wenn "Lehrbuch" auch lose als "Schreiben in einem spiralgebundenen Notizbuch, unveröffentlicht" verstanden wird
vzn
2

Versuchen Sie, Probleme basierend auf einem Algorithmus zu lösen, sobald Sie einen gelesen haben. Um Algorithmen besser zu verstehen und zu implementieren, müssen Sie außerdem die Datenstrukturen besser verstehen. Es gibt ein sehr schönes Buch mit Datenstrukturen, das von Sahni geschrieben wurde. Sie können das verwenden und für Algorithmen können Sie Probleme des Programmierherausforderungsbuchs lösen. Fragen sind dort ziemlich nett.

Lina Clark
quelle
1

Wenn Sie an der Universität noch nichts über Algorithmen gelernt haben, empfehle ich Ihnen, an einem der Online-Kurse teilzunehmen. Sie können sich auch für einen der Kurse auf coursera.org anmelden oder den von der Stanford University geposteten Videos folgen.

Kennzeichen
quelle
Udacity bietet auch einen Kurs unter udacity.com/overview/Course/cs215 an .
Jonsca