Wie ich bei der Computerolympiade drei von vier Goldmedaillen gewann

Wie ich bei der Computerolympiade drei von vier Goldmedaillen gewann

Ich bereitete mich auf das Finale der Google HashCode-Weltmeisterschaft 2017 vor. Dies ist der größte von Google organisierte Wettbewerb mit algorithmischen Problemen.

Ich habe in der neunten Klasse angefangen, C++ von Grund auf zu lernen. Ich wusste nichts über Programmierung, Algorithmen oder Datenstrukturen. Irgendwann habe ich meine erste Codezeile geschrieben. Sieben Monate später zeichnete sich der Programmierwettbewerb ab. Ich wollte sehen, wie gut mein Lernstil beim Programmieren funktioniert. Es war die perfekte Gelegenheit.

Nach zwei Wettkampftagen kam das Ergebnis: Ich gewann die Goldmedaille.

Ich war schockiert. Mit 5 Jahren Erfahrung war ich der Konkurrenz voraus. Ich wusste, dass ich hart gearbeitet hatte, aber dieser Erfolg übertraf alle meine Erwartungen. Mir wurde klar, dass Sportprogrammierung mein Thema war, und ich stürzte mich kopfüber hinein.

Ich weiß, was mich zum Erfolg geführt hat, und ich möchte es mit Ihnen teilen.

Wie ich bei der Computerolympiade drei von vier Goldmedaillen gewann

Der Artikel wurde mit Unterstützung von EDISON Software übersetzt kümmert sich um die Gesundheit der Programmierer und ihr Frühstück, und auch entwickelt kundenspezifische Software.

Welche Programmiersprache soll ich wählen?

  • C++ – Sehr zu empfehlen! Er ist sehr schnell. Durch STL nimmt die Implementierung von Algorithmen nur wenig Zeit in Anspruch. C++ wird in allen Wettbewerben akzeptiert. Ich habe meine erste Codezeile in C++ geschrieben.
  • C – Lernen Sie C++ dank der STL. Wenn Sie C beherrschen, können Sie auch in C++ programmieren.
  • Java ist eine langsame Programmiersprache. Es gibt eine Big Integer-Klasse, aber sie wird Ihnen nicht viel helfen. Wenn ein Wettbewerb ein Zeitlimit hat, werden Sie dieses mit Java sicherlich überschreiten. Java wird nicht bei allen Wettbewerben akzeptiert.

Wo kann man üben

Ich empfehle Sphere Online Judge (SPOJ). Es handelt sich um eine quantitativ und qualitativ wirksame Ressource. Editoren und Lösungen stehen online zur Verfügung, wenn Sie bei der Lösung von Problemen nicht weiterkommen. Zusätzlich zu dieser Seite empfehle ich SPOJ-Toolkit и Problemklassifikator für SPOJ.pl.

Zunächst müssen Sie Ihr Grundwissen verfeinern

Sobald Sie sich an die Syntax der Sprache gewöhnt haben, müssen Sie einige Probleme überwinden. Beginnen Sie mit einfachen Problemen, die Übung erfordern. In dieser Phase geht es vor allem darum, Ihren Programmierstil festzulegen. Vielleicht schreiben Sie gerne Code mit viel Leerraum, vielleicht auch nicht. Möglicherweise setzen Sie die Klammern in dieselbe Zeile wie das „Wenn“, oder Sie setzen sie möglicherweise in separate Zeilen.

Sie müssen Ihren Programmierstil finden, denn es ist IHR Stil.

Beachten Sie bei der Suche zwei Grundprinzipien:

  • Ihr Code sollte einfach zu implementieren sein. Sie sollten sich bei der Umsetzung der von Ihnen vorgeschlagenen Lösung wohl fühlen. Warum? Denn während eines Wettbewerbs möchten Sie sich auf keinen Fall in Ihrem Code verlieren. Es ist immer besser, zusätzliche 5 Minuten darüber nachzudenken, wie man die Implementierung des Codes vereinfachen kann, als 10 Minuten damit zu verbringen, es herauszufinden.
  • Ihr Code sollte leicht lesbar sein. Wenn Code leicht zu lesen ist, ist er auch leicht zu debuggen. Seien wir ehrlich: Fehler passieren ständig. Kennen Sie das Gefühl, wenn Sie nur noch 10 Minuten Zeit haben und den verdammten Fehler nicht finden können? Natürlich tust du. Um diese Situation zu vermeiden, schreiben Sie lesbaren Code. Sobald Sie mit dem Debuggen beginnen, erscheint der Code natürlich und leicht verständlich.

Hier ist ein Beispiel von mir Programmierstil.

So verbessern Sie Ihre Entwicklungsfähigkeiten

Üben, üben und noch mehr üben. Ich empfehle Ihnen, die ersten 250 am besten lösbaren Probleme durchzuarbeiten SPOJ. Lösen Sie sie der Reihe nach. Verbringen Sie mindestens eine Stunde damit, über die Lösung für jedes dieser Probleme nachzudenken.

Sagen Sie nicht: „Dieses Problem ist zu schwierig für mich, ich werde versuchen, das nächste zu lösen.“ So denken Verlierer.

Nehmen Sie ein Blatt Papier und einen Bleistift. Denk darüber nach. Vielleicht finden Sie eine Lösung, vielleicht auch nicht. Sie entwickeln mindestens algorithmisches Denken. Wenn Sie innerhalb einer Stunde keine Lösung finden, suchen Sie im Forum oder in Artikeln nach einer fertigen Lösung.

Was werden Sie mit diesem Ansatz erreichen? Lernen Sie, Ihre Ideen mithilfe von Code schnell umzusetzen. Und studieren Sie klassische Probleme und Algorithmen.

Zweitens müssen Sie Algorithmen und Datenstrukturen beherrschen

Verfolgen Sie einen hierarchischen Ansatz. Haben Sie mit dem Laufen begonnen, ohne laufen zu können? Nein. Kann man einen Wolkenkratzer ohne solides Fundament bauen? Nicht noch einmal.

Sie können die Schritte auf dem Lernpfad nicht ignorieren. Wenn Sie sie ignorieren, entstehen Wissenslücken. Mit der Zeit werden sie nur noch schlimmer.

Beginnen Sie mit grundlegenden Algorithmen und Datenstrukturen

Der Anfang ist schwierig. Vielleicht, weil Sie nicht wissen, was Sie zuerst lernen sollen. Deshalb Ich habe einen Videokurs „Algorithmen und Datenstrukturen“ erstellt.. Bei der Erstellung dieses Kurses habe ich mich daran orientiert, wie ich unterrichtet werden möchte. Die Reaktion war unglaublich! Mehr als 3000 Studierende aus über 100 Ländern haben sich im ersten Monat für den Kurs angemeldet.

Wenn Sie an der Lösung einfacher Probleme arbeiten, werden Sie sich nie verbessern.

Der effektivste Weg zu verstehen, was Sie nicht wissen, besteht darin, es in der Praxis zu erleben. So habe ich es gelernt. Durch die Auswahl einer herausfordernden Aufgabe habe ich viele neue Techniken gelernt, von denen ich noch nie zuvor gehört hatte.

Jedes dritte Problem, an dem Sie arbeiten, sollte Ihnen etwas Neues beibringen. Seien Sie bei der Auswahl von Problemen vorsichtiger. Wählen Sie schwierigere Probleme!

Sobald Sie diese 250 Aufgaben von SPOJ gelöst haben, verfügen Sie über ein grundlegendes Verständnis der Kernthemen der Sportprogrammierung. Mit einem tiefen Verständnis der Logik hinter grundlegenden Algorithmen werden Algorithmen auf hoher Ebene weniger komplex erscheinen. Auf diese Weise können Sie Ihr Wissen optimal nutzen.

Tauchen Sie tiefer in die einzelnen Hauptthemen ein

Hier ist eine wertvolle Ressource mit vielen Informationen. Dort finden Sie zu jedem Thema die Top 10 Algorithmen und Datenstrukturen. Nach 250 Problemen von SPOJ werden Sie aus dieser Liste eine Menge wissen. Aber Sie werden auch auf viele Dinge stoßen, von denen Sie noch nie zuvor gehört haben. Beginnen Sie also mit dem Studium dieser Themen in aufsteigender Reihenfolge.

Wenn Sie Ihr Wissen nicht vertiefen, nachdem Sie etwas Neues gelernt haben, werden Sie schnell alles vergessen.
Ich empfehle, dass Sie einen neuen Algorithmus nach dem Erlernen in der Praxis anwenden. Bearbeiten Sie 2-3 Aufgaben. Suchen Sie in SPOJ nach dem Algorithmus-Tag. Dort finden Sie Probleme, für deren Lösung dieser Algorithmus erforderlich ist. Beheben Sie diese Probleme zuerst.

Meistern Sie die dynamische Programmierung, denn sie wird Sie zum Sieg führen
Aus meiner Erfahrung hat jeder Wettbewerb mindestens ein Problem dynamische Programmierung. Viele Menschen bekommen Kopfschmerzen, wenn sie den Begriff „dynamische Programmierung“ hören, weil sie ihn überhaupt nicht verstehen.

Und das ist gut. Denn wenn Sie dynamische Programmierung verstehen, werden Sie gewinnen.

Ich mag dynamische Programmierung, es ist mein Lieblingsthema. Das Geheimnis der dynamischen Programmierung besteht darin, global optimale Entscheidungen zu treffen, nicht nur lokal. Sie müssen das Problem in einfachere Teilprobleme zerlegen. Lösen Sie jedes dieser Teilprobleme nur einmal. Erstellen Sie dann eine Lösung, die die gelösten Teilprobleme kombiniert. Gieriger Algorithmus - das Gegenteil von dynamischer Programmierung. Es erfordert, bei jedem Schritt lokal optimale Entscheidungen zu treffen. Und eine lokal optimale Wahl kann zu einer schlechten globalen Lösung führen.

Probieren Sie es aus, während Sie neue Konzepte lernen TopCoder-Tutorials. Sie sind sehr detailliert und verständlich. Dank ihnen konnte ich es verstehen binär indizierte Bäume.

Hart arbeiten

Haben Sie schon einmal von Athleten gehört, die ohne jahrelanges Training die Olympischen Spiele gewinnen? Ich nicht.

Jedes Jahr begannen die Vorbereitungen für die Computerolympiade im September und endeten im April.

In diesen 8 Monaten habe ich jeden Tag 5 Stunden geübt.

Und ja, ich habe diese 5 Stunden nur damit verbracht, algorithmische Probleme zu lösen. Ich erinnere mich an die Tage, als ich 8 und sogar 10 Stunden geübt habe. Warum? Weil es mir gefallen hat. Jeden Tag, wenn ich von der Schule nach Hause kam, ging ich direkt ins Schlafzimmer, setzte mich an den Computer und begann, ein neues Problem zu analysieren. Oder ich lernte einen neuen Algorithmus, den ich kennen musste, um dieses Problem zu lösen.

Wenn du gewinnen willst, musst du das Gleiche tun. Suchen Sie sich ein Problem aus und bleiben Sie dabei. Denken Sie darüber nach, während Sie zum Supermarkt gehen oder fahren.

Wie ich bei der Computerolympiade drei von vier Goldmedaillen gewann

Wussten Sie, dass Ihr Gehirn im Schlaf die an diesem Tag gesammelten Informationen defragmentiert? Er scheint Bücher in alphabetischer Reihenfolge auf einem Bücherregal zu stapeln. Im Wesentlichen denkt Ihr Gehirn über die verschiedenen Probleme nach, mit denen Sie konfrontiert sind.

Dies lässt sich geschickt nutzen. Lesen Sie vor dem Schlafengehen ein schwieriges Problem und denken Sie daran, was nötig ist, um es zu lösen. Zu diesem Zeitpunkt müssen Sie nicht nach der Lösung selbst suchen. Geh ins Bett. Ihr Gehirn wird beginnen, dieses Problem zu verarbeiten. Wenn Sie aufwachen, werden Sie überrascht sein, dass Sie die Lösung im Schlaf gefunden haben.

Versuch es selber. Es ist wie Magie.

Ich habe einen Videoblog erstellt

Wie ich bei der Computerolympiade drei von vier Goldmedaillen gewann

Dieser kurze Absatz hat nichts mit Sportprogrammen zu tun. Wenn Sie in Ihren Zwanzigern sind und sich fragen, wie ich die Welt sehe, möchten Sie vielleicht einen Blick darauf werfen mein Videoblog auf Youtube. Ich spreche darin über die Welt, das Leben und die Informatik.

Arbeite schlau

Das ist das Erfolgsgeheimnis. Du brauchst Ziele.

Wir sind Menschen und wir mögen es zögern. Wir wollen immer aufschieben, was jetzt getan werden muss. Netflix anzuschauen macht immer mehr Spaß, als sich mit dynamischen Programmierproblemen auseinanderzusetzen. Sie wissen das und müssen es beheben.

Wie man den Aufschub besiegt

Setzen Sie sich Ziele. Sie werden immer interessante Probleme finden, aus denen Sie etwas Neues lernen können (sehen Sie sich die oben genannten Ressourcen an). Aber diese Probleme müssen gelöst werden und nicht nur darüber gelesen werden.

So habe ich den Aufschub überwunden. Ich begann einen Papierkalender und füllte jeden Tag mit Problemen, die ich lösen wollte. Aufgaben habe ich immer zwei Tage im Voraus ausgefüllt. So wusste ich, wie ich meine Zeit in den folgenden Tagen einteilen sollte.

Wie ich bei der Computerolympiade drei von vier Goldmedaillen gewann

Ich war also immer motiviert. Ich musste einige Probleme lösen und neue finden, um die nächsten Tage im Kalender zu füllen. Gelöste Probleme durchzustreichen fühlt sich großartig an. Ich weiß, dass es dir auch gefällt.

Holen Sie sich Ihren eigenen Papierkalender. Erstellen Sie auf Ihrem Telefon keine weitere To-Do-Liste, die Sie morgen vergessen werden.

So debuggen Sie effektiv

Möchten Sie Profi werden? Wenn ja, müssen Sie es „in Ihrem Kopf debuggen“.
Dies ist bei weitem die effizienteste Debugging-Technik, die ich kenne, da überhaupt kein Debugger erforderlich ist. Ihr Gehirn erforscht mehrere Codezweige gleichzeitig und verschafft Ihnen im Vergleich dazu einen viel umfassenderen Überblick über den Code klassischer Debugger.

Sie können sich mit einem Großmeister vergleichen, der Schach spielt und drei Züge voraus denkt.

Ich verwende diese Technik ausschließlich als meine erste Verteidigungslinie. Dann verwende ich einen echten Debugger.

Um zu lernen, wie man im Kopf debuggt, muss man üben. Wenn Sie eine Lösung für ein Problem validieren und eine „falsche Antwort“ erhalten, gehen Sie nicht direkt zur Debugger-Schaltfläche. Lesen Sie den Code noch einmal und denken Sie: „Was passiert in dieser Zeile?“, „Wie wirkt sich das „Wenn“ hier auf das Programm aus?“, „Welchen Wert hat der Iterator, wenn wir die Schleife verlassen?“

Auf diese Weise denken Sie selbst. Mit der Zeit lernen Sie, Code zu schreiben und ihn im Handumdrehen zu debuggen.

Über den Autor

Wie ich bei der Computerolympiade drei von vier Goldmedaillen gewann
Andrei Margeloiu ist ein begeisterter Programmierer mit Interesse an Unternehmertum, Startups und der Natur. Sie können ihn kontaktieren Auf Linkedin.

Übersetzung: Diana Sheremyeva

Source: habr.com

Kommentar hinzufügen