Ich kann die Algorithmusfragen für Schulzulassungen wirklich nicht beantworten, spielt das eine Rolle?

Vorwort

Die August-Trainingssitzung des League of Legends-Algorithmus geht zu Ende. Die September-Algorithmus-Trainingssitzung beginnt offiziell am 1. September. Die Registrierung wurde im Voraus geöffnet. Die Registrierungsmethode finden Sie hier. Wer teilnehmen möchte, wird empfohlen Frühzeitig anmelden , da es für Studierende ohne Grundkenntnisse in Algorithmen geeignet ist. Es gibt einige Vorbereitungen im Voraus. Beispielsweise dauert es 1 bis 3 Tage, um das Vortraining abzuschließen, und das neuntägige Training, um die Gewohnheit zu entwickeln Beantwortung von Fragen im Voraus. Es wird effektiver sein, am Algorithmentraining teilzunehmen.

1. Rekrutierung auf dem Campus

  Bei der Rekrutierung von Schulen fürchten viele Schüler am meisten die Algorithmusfragen, denn obwohl viele der Fragen bekannt vorkommen, ändern sich die Arten der Fragen ständig, und gepaart mit der angespannten Atmosphäre ist der Algorithmus, mit dem sie ursprünglich vertraut waren, ein Problem nicht mehr verfügbar und verpasst daher diese Einstellung. .
  Welche Rolle spielt der Algorithmus in der täglichen Arbeit? Ist es notwendig, es zu lernen? Dies dürfte für die meisten Studierenden die verwirrendste Frage sein. Nachdem Sie diesen Artikel gelesen haben, haben Sie möglicherweise eine bestimmte Antwort im Kopf.

2. Zeitkomplexität

  Jeder, der Code geschrieben hat, weiß, dass, wenn die Ausführungseffizienz eines Codeabschnitts niedrig ist, die Ausführungszeit der gesamten Funktion länger wird, da die Funktionen Schicht für Schicht verschachtelt sind, und es kann zu Nichtreaktionen kommen.

  Wenn jeder Schritt eines Softwarevorgangs sehr zeitaufwändig ist und die Erfahrung sehr verzögert ist, ist das endgültige Ziel dieser Software der Untergang. Daher ist die Ausführungseffizienz für die Programmierung von entscheidender Bedeutung, und die Ausführungseffizienz ist hier die zeitliche Komplexität der entsprechenden Algorithmus.

1. Einschichtige Zirkulation

  Die sogenannte erschöpfende Methode ist das, was wir normalerweise als Aufzählung bezeichnen, was bedeutet, alle Situationen zu durchlaufen (zu durchlaufen). Nehmen Sie das einfachste Beispiel:

[Beispiel 1] Gegeben n ( n ≤ 1000 ) n(n \le 1000)n ( n1000 ) Elementeai a_iAichFinden Sie heraus, wie viele ungerade Zahlen es gibt.

  Um festzustellen, ob eine Zahl gerade oder ungerade ist, müssen wir nur fragen, ob der Rest nach der Division durch 2 0 oder 1 ist. Dann beurteilen wir alle Zahlen und zählen die Bedingungen, die die Bedingungen erfüllen. Schließlich wird der Zähler als zurückgegeben Die Antwort. Hier müssen wir alle Zahlen durchlaufen, das ist erschöpfend. Wie in der Abbildung gezeigt:

  Der C/C++-Code wird wie folgt implementiert:

int countOdd(int n, int a[]) {
    
    
    int cnt = 0;
    for(int i = 0; i < n; ++i) {
    
    
        if(a[i] & 1)
            ++cnt;
    }
    return cnt;
}

  Dies a & 1entspricht dem Rest des a % 2Codes Modulo 2; und die zeitliche Komplexität dieses Algorithmus beträgt O ( n ) O (n)aO ( n )

2. Doppelschichtzirkulation

  Nach den obigen Beispielen glaube ich, dass Sie bereits ein gewisses Verständnis für die umfassende Methode haben. Schauen wir uns also eine etwas kompliziertere Situation an.

[Beispiel 2] Gegeben n ( n ≤ 1000 ) n(n \le 1000)n ( n1000 ) Elementeai a_iAichFinden Sie heraus, wie viele Tupel (i, j) (i,j) es gibt( ich ,j ) , voller Fußai + aj a_i + a_jAich+Ajist eine ungerade Zahl ( i < j ) (i \lt j)( ich<j )

  Wir halten weiterhin an der Idee der erschöpfenden Methode fest, hier benötigen wir zwei Variablen iiich undjjj , alsoai a_iAichaj a_jAj,Re-in ai + aj a_i + a_jAich+AjEs wird eine Paritätsbeurteilung durchgeführt, sodass schnell ein Algorithmus entworfen werden kann, der die Erschöpfung nutzt. Wie in der Abbildung gezeigt:

  Der C/C++-Code wird wie folgt implementiert:

int countOddPair(int n, int a[]) {
    
    
    int cnt = 0;
    for(i = 0; i < n; ++i) {
    
    
        for(j = i+1; j < n; ++j) {
    
    
            if( (a[i] + a[j]) & 1)
                ++cnt;
        }
    }
    return cnt;
}

Die zeitliche Komplexität dieses Algorithmus beträgt O ( n 2 ) O(n^2)O ( n2 ). Vereinfacht ausgedrückt lässt sich die zeitliche Komplexität eines Algorithmus anhand der Anzahl der verschachtelten Schleifen grob abschätzen.

3. Raumkomplexität

  Wenn wir ein Spiel spielen, sind die Anforderungen an unseren Computer umso höher, je größer der Speicher ist, den das Spiel belegt. Je höher die Anforderungen, desto weniger Benutzer gibt es natürlich, daher ist auch die Speichernutzung von entscheidender Bedeutung, weshalb die Speicherplatzkomplexität von den entsprechenden Algorithmus. Es wird hier nicht näher darauf eingegangen.

4. Datenstruktur

  Die Auswahl einer geeigneten Datenstruktur, die effektive Abwägung von Zeitkomplexität und Raumkomplexität sowie die Entwicklung eines geeigneten Algorithmus zur Lösung des Problems sind Dinge, über die wir beim Programmierdesign nachdenken müssen.
  Viele Leute fragen mich: Was ist der Unterschied zwischen Datenstrukturen und Algorithmen und den Algorithmen der künstlichen Intelligenz? Die beiden sind verwandt, aber auch unterschiedlich. Ersteres ist die Grundlage. Jeder Informatikstudent sollte es beherrschen. Es wird Ihnen bei der Arbeit besser helfen. Verstehen Sie das Problem und analysieren Sie die Prinzipien. Letzteres ist relativ schwierig, und wenn Sie sich in Zukunft nicht mehr mit verwandten Arbeiten befassen möchten, ist dies möglicherweise überhaupt nicht erforderlich.
  Warum können viele Menschen Datenstrukturen nicht gut lernen? Der Grund dafür ist, dass das Konzept der Datenstruktur nicht im Wesentlichen verstanden wird und jeder Algorithmus einer Datenstruktur entspricht. Beispielsweise entspricht die binäre Suche einer Sequenzliste (da es unmöglich ist, eine binäre Suche für eine verknüpfte Liste durchzuführen), die Rekursion entspricht einem Baum und der kürzeste Pfad entspricht einem Diagramm.
  Es gibt nur drei Kerndatenstrukturen: lineare Tabellen, Bäume und Diagramme.
  Abstrakter ausgedrückt gibt es eigentlich nur eine Datenstruktur, nämlich einen Graphen.
  Ein Graph ist ein Netzwerk aus Eckpunkten und Kanten wie diesem. Wenn zwei beliebige Punkte in einem Graphen erreichbar sind, spricht man von einem zusammenhängenden Graphen. Von einem Punkt über eine Reihe sich nicht wiederholender Kanten und zurück zu sich selbst nennen wir ihn einen Kreis. Ein Graph ohne Kreis ist eigentlich ein Baum.

  Wenn wir seine Position entsprechend anpassen, wird er in unserer Realität zu einem Baum. Wenn wir die Äste des Baumes abschneiden, wird er zu einer linearen Struktur, die zu einem linearen Tisch wird.
  Im Unterricht gehen wir normalerweise von linearen Tabellen zu Diagrammen über, aber wenn wir umgekehrt denken, stellen wir fest, dass alle Datenstrukturen im Wesentlichen Diagramme sind. Und alle Datenstrukturen können je nach Speichermethode sequentiell oder verkettet gespeichert werden.
  Stapel und Warteschlangen sind zwei Arten von linearen Tabellen. Bäume können je nach Anzahl der Zweige Binärbäume, Ternärbäume, Quadtrees usw. sein. Unter diesen sind Binärbäume am häufigsten. Binäre Suchbäume müssen beherrscht werden, und das können sie auch Schreiben Sie seine gemeinsamen Durchläufe von Hand. ; Der ausgeglichene Binärbaum ist der effizienteste binäre Suchbaum. Sie sind ihm noch nie begegnet, weil viele Bibliotheken ihn für Sie gekapselt haben. Beispielsweise ist die zugrunde liegende Implementierung von Map in C++ ein rot-schwarzer Baum. Dies ist ein ausgeglichener Binärbaum. Die Hash-Tabelle wird komprimiert, wenn ein Konflikt auftritt. Es ist auch möglich, sie in einen ausgeglichenen Binärbaum umzuwandeln. Der Heap ist ein vollständiger Binärbaum, der in Prioritätswarteschlangen verwendet wird, z. B. „priority_queue“ in C++. Diagramme werden hauptsächlich in gerichtete Diagramme und ungerichtete Diagramme unterteilt, und es gibt viele Algorithmen für sie. Der klassischere ist der kürzeste Pfad und der minimale Spannbaum.

5. Wenn ich die Algorithmusfragen für die Rekrutierung von Schulen wirklich nicht beantworten kann, spielt es dann eine Rolle?

  Diese Frage hängt davon ab, ob Sie während des Vorbereitungsprozesses Ihr Bestes gegeben haben. Wenn Sie aufgeben und sich hinlegen, weil Sie es nicht können, dann hat das viel damit zu tun. Wenn Sie Ihr Bestes gegeben haben und es trotzdem können. Wenn Sie es nicht tun, kann es wirklich eine Frage des Talents sein. Es ist sehr schwer zu verbessern und erfordert in der späteren Zeit große Anstrengungen. Derzeit müssen viele Fragen zum Rekrutierungsalgorithmus für Schulen schwer zu lösen sein. Sie werden das sogar finden Wenn der Interviewer dieser Frage noch nie zuvor ausgesetzt war, ist er möglicherweise nicht in der Lage, dies zu tun. Schließlich wird Ihnen in der tatsächlichen Arbeit keine Frage gestellt, sondern ein praktisches Problem. Sie müssen die Kokons abziehen Vereinfachen Sie das Problem schrittweise und lösen Sie es schließlich mit geeigneten Methoden.
  Wenn Sie also befürchten, dass Sie diese von der Schule rekrutierten Algorithmusfragen nicht lösen können, müssen Sie sich keine allzu großen Sorgen machen. Nutzen Sie Ihre ängstliche Zeit, um so viel Code wie möglich zu schreiben. Wenn Sie nicht gut darin sind, Algorithmen zu lernen Sie können versuchen, einige kleine Projekte wie Tetris, Brick Breaking, Match 3 und andere kleine Spiele durchzuführen. Sie können sie so weit wie möglich selbst schreiben. Bei der Implementierung jedes kleinen Spiels werden Sie feststellen, dass jeder Schritt vollständig ist von Algorithmen, aber es ist nicht so starr, und Sie werden es besser verstehen und beherrschen. Relevante Wissenspunkte.

Sie können ein wenig lernen, und es gibt nur eine begrenzte Anzahl grundlegender Algorithmen.
Fügen Sie hier eine Bildbeschreibung ein
Die grundlegende Datenstruktur

ist grundsätzlich in Ordnung, wenn Sie diese beiden Inhaltsblöcke verstehen.

6. Helden-Algorithmus-Training

  In früheren Algorithmen-Trainingslagern war es laut Rückmeldungen von Studenten zu schwierig, einen Algorithmus pro Tag zu lernen, daher haben wir ab dem Trainingslager im Juni damit begonnen, gezielte Schulungen durchzuführen. Es ist nicht notwendig, jeden Monat alle Algorithmen zu lernen Stattdessen lernen wir die Algorithmen gründlich kennen und geben jedem genügend Zeit zum Lernen und Beantworten von Fragen.
  Die täglichen Aufgaben sind hauptsächlich in die folgenden Schritte unterteilt:
    1. Relevante Informationen lesen;
    2. Ansehen des Videos zum Lösen von Fragen des Sternenmeisters;
    3. Beenden der vom Sternenmeister zugewiesenen außerschulischen Übungen (1–4 Fragen pro Tag);
    4. Auf dem Planeten Veröffentlichen Sie täglich Zusammenfassungen und Rezensionen.
    5. Senden Sie Hausaufgaben-Check-ins.

  Der Schulungsinhalt im September ist der grundlegende Algorithmus. Bei der Teilnahme am August-Trainingslager können alle Inhalte der Juni-, Juli- und August-Trainingslager dauerhaft angesehen werden und es wird Ihnen versprochen, weiterhin an den Trainingslagern im Oktober und November teilzunehmen (die Pläne für die Zeit nach Dezember werden später veröffentlicht). . Nachdem Sie sich heute angemeldet haben, können Sie auch beitreten). Sie können also beruhigt sein und müssen sich keine Sorgen machen, dass Sie auch in Zukunft nicht mehr mithalten können, wenn Sie nicht mithalten können. Der Inhalt des August-Trainingslagers wurde archiviert und kann jederzeit auf Planet eingesehen werden .

Acho que você gosta

Origin blog.csdn.net/WhereIsHeroFrom/article/details/132531705
Recomendado
Clasificación