logo

Lernen Sie Datenstrukturen und Algorithmen | DSA-Tutorial

Datenstrukturen und Algorithmen (DSA) beziehen sich auf das Studium von Methoden zum Organisieren und Speichern von Daten und den Entwurf von Verfahren (Algorithmen) zur Lösung von Problemen, die mit diesen Datenstrukturen arbeiten. DSA ist eine der wichtigsten Fähigkeiten, die jeder Informatikstudent haben muss. Es zeigt sich oft, dass Menschen mit guten Kenntnissen dieser Technologien bessere Programmierer sind als andere und daher die Interviews fast aller Technologiegiganten knacken. Das DSA-Tutorial Ziel ist es, Ihnen dabei zu helfen, Datenstrukturen und Algorithmen (DSA) schnell und einfach zu erlernen.



Inhaltsverzeichnis

  • Lernen Sie Algorithmen
  • Erfahren Sie mehr über Komplexitäten
  • Übungs-Spickzettel für Probleme
  • Vollständiges DSA-Formular

    Der Begriff DSA steht für Datenstrukturen und Algorithmen , im Kontext der Informatik.

    Was ist DSA?

    Datenstrukturen und Algorithmen (DSA) beziehen sich auf das Studium von Methoden zum Organisieren und Speichern von Daten und den Entwurf von Verfahren (Algorithmen) zur Lösung von Problemen, die mit diesen Datenstrukturen arbeiten.



    Wie lernt man DSA?

    Das Wichtigste ist, den gesamten Vorgang in kleine Teile zu unterteilen, die nacheinander durchgeführt werden müssen. Der gesamte Prozess zum Erlernen von DSA von Grund auf kann in fünf Teile unterteilt werden:

    1. Lernen Sie mindestens eine Programmiersprache (Dies überlassen wir Ihrer Wahl.)
    2. Lernen Sie Datenstrukturen
    3. Lernen Sie Algorithmen
    4. Erfahren Sie mehr über die Komplexität von Zeit und Raum
    5. Übungsaufgaben zu DSA
    Wie lernt man DSA?

    Wie lernt man DSA?

    In der Hoffnung, dass Sie eine Programmiersprache Ihrer Wahl erlernt haben, lassen Sie uns mit dem nächsten Schritt zum Erlernen von DSA in diesem DSA-Tutorial fortfahren.



    Hier kommt die wichtigste und am meisten erwartete Phase der Roadmap zum Erlernen von Datenstruktur und Algorithmus – die Phase, in der Sie mit dem Erlernen von DSA beginnen. Das Thema DSA besteht aus zwei Teilen:

    • Datenstrukturen
    • Algorithmen

    Obwohl es sich um zwei unterschiedliche Dinge handelt, sind sie doch stark miteinander verknüpft und es ist sehr wichtig, den richtigen Weg einzuschlagen, um sie möglichst effizient zu erlernen. Wenn Sie nicht wissen, welches Sie zuerst lernen sollen, empfehlen wir Ihnen, unsere detaillierte Analyse zum Thema durchzulesen: Hier haben wir den Ablauf des Erlernens einer Datenstruktur und dann die verwandtsten und wichtigsten Algorithmen verfolgt, die von dieser Datenstruktur verwendet werden.

    Lernen Sie Datenstrukturen

    Datenstrukturen sind wesentliche Komponenten, die dabei helfen, Daten effizient im Computerspeicher zu organisieren und zu speichern. Sie bieten eine Möglichkeit, Daten effektiv zu verwalten und zu bearbeiten und ermöglichen schnellere Zugriffs-, Einfügungs- und Löschvorgänge. Zu den gängigen Datenstrukturen gehören: Arrays, verknüpfte Listen, Stapel, Warteschlangen, Bäume und Diagramme , die jeweils spezifische Zwecke erfüllen, basierend auf den Anforderungen des jeweiligen Problems. Das Verständnis von Datenstrukturen ist für den Entwurf effizienter Algorithmen und die Optimierung der Softwareleistung von grundlegender Bedeutung.

    Array ist eine lineare Datenstruktur, die eine Sammlung von Elementen desselben Datentyps speichert. Den Elementen wird zusammenhängender Speicher zugewiesen, was einen zeitlich konstanten Zugriff ermöglicht. Jedes Element hat eine eindeutige Indexnummer.

    • Operationen auf Array:
      • Durchquerung : Iterieren durch die Elemente eines Arrays.
      • Einfügen : Hinzufügen eines Elements zum Array an einem bestimmten Index.
      • Streichung : Entfernen eines Elements aus dem Array an einem bestimmten Index.
      • Suchen : Suchen eines Elements im Array anhand seines Werts oder Index.
    • Arten von Arrays :
      • Eindimensionales Array : Ein einfaches Array mit einer einzelnen Dimension.
      • Mehrdimensionales Array : Ein Array mit mehreren Dimensionen, beispielsweise eine Matrix.
    • Anwendungen von Array :
      • Daten nacheinander speichern
      • Implementierung von Warteschlangen, Stapeln und anderen Datenstrukturen
      • Darstellung von Matrizen und Tabellen
    • Verwandte Themen zu Array:
      • Tutorial zu Arrays
      • Die 50 größten Array-Codierungsprobleme für Interviews
      • Üben Sie Aufgaben zu Arrays

    2. Zeichenfolge

    A Zeichenfolge ist eine Zeichenfolge, die normalerweise zur Darstellung von Text verwendet wird. Es handelt sich um einen Datentyp, der die Manipulation und Verarbeitung von Textdaten in Computerprogrammen ermöglicht.

    • Operationen auf String :
      • Verkettung : Zwei Saiten zusammenfügen.
      • Vergleich : Lexikografischer Vergleich zweier Zeichenfolgen.
      • Teilzeichenfolge Extraktion : Extrahieren eines Teilstrings aus einem String.
      • Suchen : Suche nach einem Teilstring innerhalb eines Strings.
      • Änderung : Zeichen innerhalb einer Zeichenfolge ändern oder ersetzen.
    • Anwendungen von String :
      • Textverarbeitung
      • Mustervergleich
      • Datenvalidierung
      • Datenbankmanagement
    • Zusammenhängende Posts:
      • String-Tutorial
      • Die 50 häufigsten Probleme bei der String-Codierung für Interviews
      • Übe Probleme mit Saiten

    3. Verknüpfte Listen

    A verlinkte Liste ist eine lineare Datenstruktur, die Daten in Knoten speichert, die durch Zeiger verbunden sind. Im Gegensatz zu Arrays werden verknüpfte Listen nicht an zusammenhängenden Speicherorten gespeichert.

    • Merkmale der verknüpften Liste:
      • Dynamisch : Verknüpfte Listen können einfach durch Hinzufügen oder Entfernen von Knoten in der Größe geändert werden.
      • Nicht zusammenhängend : Knoten werden an zufälligen Speicherorten gespeichert und durch Zeiger verbunden.
      • Sequentieller Zugriff : Auf Knoten kann nur sequentiell zugegriffen werden, beginnend am Kopf der Liste.
    • Operationen an der verknüpften Liste:
      • Schaffung : Erstellen einer neuen verknüpften Liste oder Hinzufügen eines neuen Knotens zu einer vorhandenen Liste.
      • Durchquerung : Durch die Liste iterieren und auf jeden Knoten zugreifen.
      • Einfügen : Hinzufügen eines neuen Knotens an einer bestimmten Position in der Liste.
      • Streichung : Einen Knoten aus der Liste entfernen.
      • Suchen : Einen Knoten mit einem bestimmten Wert in der Liste finden.
    • Arten von verknüpften Listen :
      • Einfach verknüpfte Liste : Jeder Knoten zeigt auf den nächsten Knoten in der Liste.
      • Doppelt verknüpfte Liste : Jeder Knoten zeigt sowohl auf den nächsten als auch auf den vorherigen Knoten in der Liste.
      • Zirkuläre verknüpfte Liste : Der letzte Knoten zeigt zurück zum ersten Knoten und bildet eine kreisförmige Schleife.
    • Anwendungen der verknüpften Liste :
      • Verknüpfte Listen werden in verschiedenen Anwendungen verwendet, darunter:
      • Implementierung von Warteschlangen und Stapeln
      • Darstellung von Diagrammen und Bäumen
      • Pflege geordneter Daten
      • Speicherverwaltung
    • Verwandte Themen:
      • Tutorial zur verknüpften Liste
      • Top 50 Probleme auf der verlinkten Liste für Vorstellungsgespräche
      • Üben Sie Probleme mit verknüpften Listen

    4. Matrix/Gitter

    A Matrix ist ein zweidimensionales Array von Elementen, die in Zeilen und Spalten angeordnet sind. Es wird als rechteckiges Raster dargestellt, wobei sich jedes Element am Schnittpunkt einer Zeile und einer Spalte befindet.

    • Schlüssel Konzepte:
      • Reihen : Horizontale Linien von Elementen in einer Matrix.
      • Säulen : Vertikale Linien von Elementen in einer Matrix.
      • Maße : Die Anzahl der Zeilen und Spalten in einer Matrix (z. B. hat eine 3×4-Matrix 3 Zeilen und 4 Spalten).
      • Element Zugang : Auf Elemente kann über Zeilen- und Spaltenindizes zugegriffen werden (z. B. bezieht sich M[2][3] auf das Element in Zeile 2, Spalte 3).
    • Anwendungen von Matrix/Grid :
      • Bildverarbeitung
      • Datenanalyse
      • Optimierungsprobleme
    • Zusammenhängende Posts:
      • Matrix-/Gitter-Tutorial
      • Die 50 größten Probleme in der Matrix/Gitter für Vorstellungsgespräche
      • Üben Sie Probleme mit Matrix/Gitter

    5. Stapel

    Stapel ist eine lineare Datenstruktur, die einer bestimmten Reihenfolge folgt, in der die Operationen ausgeführt werden. Die Reihenfolge kann sein LIFO (Last In First Out) oder FILO (First In Last Out) . LIFO impliziert, dass das zuletzt eingefügte Element zuerst herauskommt und REIHE impliziert, dass das Element, das zuerst eingefügt wird, zuletzt herauskommt.

    • Operation am Stapel :
      • Drücken : Fügt ein Element oben im Stapel hinzu
      • Pop : Entfernt das Element oben im Stapel und gibt es zurück
      • Spähen : Gibt das Element oben im Stapel zurück, ohne es zu entfernen
      • Größe : Gibt die Anzahl der Elemente im Stapel zurück
      • Ist leer : Prüft, ob der Stapel leer ist
    • Anwendungen von Stack :
      • Funktionsaufrufe
      • Ausdrucksbewertung
      • Zurückverfolgen
      • Vorgänge rückgängig machen/wiederholen
    • Verwandte Themen zu Stack:
      • Stack-Tutorial
      • Die 50 größten Probleme im Stack für Vorstellungsgespräche
      • Übe Probleme auf Stack

    6. Warteschlange

    A Warteschlange Datenstruktur ist ein grundlegendes Konzept in der Informatik, das zum Speichern und Verwalten von Daten in einer bestimmten Reihenfolge verwendet wird. Es folgt dem Prinzip Als Erster rein, als erster raus ( FIFO ), wobei das erste zur Warteschlange hinzugefügte Element auch das erste ist, das entfernt wird

    • Vorgang in der Warteschlange :
      • In die Warteschlange stellen : Fügt ein Element am Ende der Warteschlange hinzu
      • Entsprechend : Entfernt ein Element vom Anfang der Warteschlange
      • Spähen : Ruft das vordere Element ab, ohne es zu entfernen
      • Ist leer : Prüft, ob die Warteschlange leer ist
      • Ist voll : Prüft, ob die Warteschlange voll ist
    • Art der Warteschlange :
      • Runde Warteschlange : Letztes Element verbindet sich mit dem ersten Element
      • Doppelendige Warteschlange (Deque) : Operationen können von beiden Enden aus durchgeführt werden
      • Prioritätswarteschlange : Elemente werden nach Priorität angeordnet
    • Anwendungen der Warteschlange :
      • Arbeit planen
      • Nachrichtenwarteschlange
      • Simulationsmodellierung
      • Datenpufferung
    • Verwandte Themen:
      • Warteschlangen-Tutorial
      • Die 50 größten Probleme in der Warteschlange für Vorstellungsgespräche
      • Übungsaufgaben in der Warteschlange

    7. Haufen

    A Haufen ist eine vollständige binäre Baumdatenstruktur, die die Heap-Eigenschaft erfüllt: Für jeden Knoten ist der Wert seiner untergeordneten Knoten kleiner oder gleich seinem eigenen Wert. Zur Implementierung werden üblicherweise Heaps verwendet Prioritätswarteschlangen , wobei sich das kleinste (oder größte) Element immer an der Wurzel des Baums befindet.

    • Operationen von Heap :
      • Einfügen : Fügt dem Heap ein neues Element hinzu und behält dabei die Heap-Eigenschaften bei.
      • Extrahieren-Max/Extrahieren-Min : Entfernt das Root-Element und strukturiert den Heap neu.
      • Erhöhen/Verringern-Taste : Aktualisiert den Wert eines Knotens und strukturiert den Heap neu.
    • Arten von Heaps :
      • Max-Heap : Der Wurzelknoten hat den maximalen Wert unter seinen untergeordneten Knoten.
      • Min-Heap : Der Wurzelknoten hat den Mindestwert unter seinen untergeordneten Knoten.
    • Anwendungen von Heap :
      • Prioritätswarteschlangen
      • Sortierung
      • Graphalgorithmen (z. B. Dijkstra-Algorithmus)
    • Zusammenhängende Posts:
      • Heap-Tutorial
      • Die 50 größten Heap-Probleme für Vorstellungsgespräche
      • Üben Sie Probleme auf dem Heap

    8. Hash

    Hashing ist eine Technik, die mithilfe der sogenannten mathematischen Formeln aus einer Eingabe variabler Größe eine Ausgabe fester Größe (Hash-Wert) generiert Hash-Funktionen . Hashing wird verwendet, um einen Index oder Ort zum Speichern eines Elements in einer Datenstruktur zu bestimmen und so ein effizientes Abrufen und Einfügen zu ermöglichen.

    • Schlüssel Konzepte:
      • Hash-Funktion : Eine mathematische Funktion, die eine Eingabe einem Hash-Wert zuordnet.
      • Hash-tabelle : Eine Datenstruktur, die Schlüssel-Wert-Paare speichert, wobei der Schlüssel ein Hashwert und der Wert die tatsächlichen Daten sind.
      • Kollision : Wenn zwei verschiedene Schlüssel denselben Hashwert erzeugen.
    • Arten von Hash-Funktionen :
      • Divisionsmethode : Dividiert die Eingabe durch eine Konstante und verwendet den Rest als Hashwert.
      • Mittleres Quadrat Methode: Quadriert die Eingabe und verwendet die mittleren Ziffern als Hashwert.
      • Faltmethode : Teilt die Eingabe in gleich große Blöcke und addiert sie, um den Hash-Wert zu erhalten.
      • Multiplikationsmethode : Multipliziert die Eingabe mit einer Konstanten und verwendet den Bruchteil als Hashwert.
    • Techniken zur Kollisionsauflösung :
      • Separate Verkettung (Open Hashing) : Speichert kollidierende Elemente in einer verknüpften Liste mit dem entsprechenden Hashwert.
      • Offene Adressierung (geschlossenes Hashing) : Verwendet verschiedene Strategien, um einen alternativen Ort für kollidierende Elemente innerhalb der Hash-Tabelle zu finden.
    • Anwendungen von Hashing :
      • Effizientes Speichern und Abrufen von Daten in Datenbanken und Dateisystemen.
      • Verifizierung von Passwörtern und digitalen Signaturen.
      • Verteilen von Anfragen auf mehrere Server.
      • Generieren sicherer Hashes für Datenintegrität und Authentifizierung.
    • Zusammenhängende Posts:
      • Hash-Tutorial
      • Üben Sie Aufgaben zum Hashing

    9. Baum

    A Baum ist eine nichtlineare hierarchische Datenstruktur, die aus durch Kanten verbundenen Knoten besteht, wobei ein oberster Knoten als Wurzel bezeichnet wird und Knoten untergeordnete Knoten haben. Es wird in der Informatik zur effizienten Organisation von Daten eingesetzt.

    String-Vergleich in Java
    • Durchquerung des Baumes : Baumdurchquerungsmethoden werden verwendet, um Knoten in einer Baumdatenstruktur zu besuchen und zu verarbeiten. Die drei gängigen Traversalmethoden sind:
      • In Ordnung : Besuchen Sie den linken Teilbaum, den aktuellen Knoten und dann den rechten Teilbaum.
      • Vorbestellen : Besuchen Sie den aktuellen Knoten, den linken Teilbaum und dann den rechten Teilbaum.
      • Nachbestellung : Besuchen Sie den linken Teilbaum, den rechten Teilbaum und dann den aktuellen Knoten.
    • Klassifizierungen von Bäumen:
      • Klassifikationen von Bäume beziehen sich auf die Gruppierung von Bäumen basierend auf bestimmten Merkmalen oder Kriterien. Dies kann die Kategorisierung von Bäumen nach ihrem Gleichgewichtsfaktor, Knotengrad, Ordnungseigenschaften usw. umfassen. Nachfolgend finden Sie einige wichtige Klassifizierungen von Bäumen.
    Einstufung Beschreibung

    Typ

    Beschreibung

    Nach Abschluss

    Bäume können anhand der maximalen Anzahl an Kindern klassifiziert werden, die jeder Knoten haben kann.

    Binärer Baum

    Jeder Knoten hat höchstens zwei Kinder.

    Ternärer Baum

    Jeder Knoten hat höchstens drei Kinder.

    N-ärer Baum

    Jeder Knoten hat höchstens N Kinder.

    Auf Bestellung

    Bäume können anhand der Reihenfolge der Knoten und Teilbäume klassifiziert werden

    Binärer Suchbaum (BST)

    Linkes Kind

    Haufen

    Spezialisierter Binärbaum mit der Heap-Eigenschaft.

    Durch Balance

    Bäume können danach klassifiziert werden, wie ausgewogen sie sind.

    Ausgewogener Baum

    Die Höhen der Teilbäume unterscheiden sich höchstens um eins. Beispiele hierfür sind AVL-Bäume und Rot-Schwarz-Bäume.

    Unausgeglichener Baum

    Die Höhen von Teilbäumen können erheblich unterschiedlich sein, was sich auf die Leistung bei Vorgängen wie Suchen und Einfügen auswirkt.

    • Anwendungen von Bäumen:
      • Dateisysteme
      • Datenbanken
      • XML-Dokumente
      • Künstliche Intelligenz
    • Zusammenhängende Posts:
      • Baum-Tutorial
      • Die 50 größten Probleme bei der Baumcodierung
      • Übe Probleme am Baum

    10. Grafik

    A Graph ist eine nichtlineare Datenstruktur, die aus einer endlichen Menge von Eckpunkten (oder Knoten) und einer Menge von Kanten besteht, die ein Knotenpaar verbinden.

    Lernen Sie Algorithmen

    Sobald Sie die Konzepte von geklärt haben Datenstrukturen , jetzt ist es an der Zeit, Ihre Reise durch die zu beginnen Algorithmen . Basierend auf der Art und Verwendung werden die Algorithmen in mehrere Kategorien eingeteilt, wie unten dargestellt:

    1. Suchalgorithmus

    Suchalgorithmen werden verwendet, um bestimmte Daten innerhalb einer größeren Datenmenge zu lokalisieren. Es hilft dabei, das Vorhandensein eines Zielwerts in den Daten zu finden. Es gibt verschiedene Arten von Suchalgorithmen, jeder mit seinem eigenen Ansatz und seiner eigenen Effizienz.

    • Die gängigsten Suchalgorithmen:
      • Lineare Suche : Iterative Suche von einem Ende zum anderen.
      • Binäre Suche : Divide-and-Conquer-Suche in einem sortierten Array, wobei der Suchraum bei jeder Iteration halbiert wird.
      • Ternäre Suche : Divide-and-Conquer-Suche in einem sortierten Array, wobei der Suchraum bei jeder Iteration in drei Teile geteilt wird.
    • Andere Suchalgorithmen:
      • Sprungsuche
      • Interpolationssuche
      • Exponentielle Suche
    • Verwandte Themen:
      • Üben Sie Aufgaben zum Suchalgorithmus

    2. Sortieralgorithmus

    Sortieralgorithmen werden verwendet, um die Elemente einer Liste in einer bestimmten Reihenfolge anzuordnen, beispielsweise numerisch oder alphabetisch. Es organisiert die Elemente systematisch und erleichtert so die Suche nach und den Zugriff auf bestimmte Elemente.

    Es gibt viele verschiedene Arten von Sortieralgorithmen. Einige weit verbreitete Algorithmen sind:

    Sortieralgorithmus Beschreibung
    Blasensortierung Vergleicht benachbarte Elemente iterativ und tauscht sie aus, wenn sie nicht in der richtigen Reihenfolge sind. Das größte Element sprudelt bei jedem Durchgang an das Ende der Liste.
    Auswahlsortierung Sucht das kleinste Element im unsortierten Teil der Liste und tauscht es mit dem ersten Element aus. Wiederholt diesen Vorgang, bis die gesamte Liste sortiert ist.
    Sortieren durch Einfügen Erstellt die sortierte Liste Element für Element, indem jedes unsortierte Element an der richtigen Position im sortierten Teil eingefügt wird.
    Schnelle Sorte Ein Divide-and-Conquer-Algorithmus, der ein Pivot-Element auswählt, die Liste basierend auf dem Pivot in zwei Unterlisten unterteilt und denselben Prozess rekursiv auf die Unterlisten anwendet.
    Zusammenführen, sortieren Ein weiterer Divide-and-Conquer-Algorithmus, der die Liste rekursiv in kleinere Unterlisten aufteilt, diese sortiert und sie dann wieder zusammenführt, um die sortierte Liste zu erhalten.

    Verwandte Themen:

    • Tutorial zum Sortieralgorithmus
    • Fragen und Probleme im Vorstellungsgespräch am häufigsten sortieren
    • Üben Sie Aufgaben zum Sortieralgorithmus

    3. Divide-and-Conquer-Algorithmus

    Teile und herrsche Algorithmen folgen einer rekursiven Strategie zur Lösung von Problemen, indem sie sie in kleinere Teilprobleme aufteilen, diese Teilprobleme lösen und die Lösungen kombinieren, um die endgültige Lösung zu erhalten.

    Schritte:

    1. Teilen : Partitionieren Sie das Problem in kleinere, unabhängige Teilprobleme.
    2. Erobern : Jedes Teilproblem rekursiv lösen.
    3. Kombinieren : Führen Sie die Lösungen der Teilprobleme zusammen, um die endgültige Lösung zu erhalten.

    Beispiele:

    • Sortierung zusammenführen: Teilt das Array in zwei Hälften, sortiert jede Hälfte rekursiv und führt die sortierten Hälften zusammen.
    • Schnelle Sortierung: Wählt ein Pivot-Element aus, unterteilt das Array basierend auf dem Pivot in zwei Subarrays und sortiert jedes Subarray rekursiv.
    • Binäre Suche: Teilt den Suchraum wiederholt in zwei Hälften, bis das Zielelement gefunden wird oder der Suchraum erschöpft ist.

    In Verbindung stehende Artikel:

    • Tutorial zum Teilen und Erobern
    • Üben Sie Aufgaben zum Divide And Conquer-Algorithmus

    4. Gierige Algorithmen

    Wie der Name schon sagt, baut dieser Algorithmus die Lösung Stück für Stück auf und wählt das nächste Stück aus, das den offensichtlichsten und unmittelbarsten Nutzen bringt, d. h. welches in diesem Moment die optimale Wahl ist. Daher passen die Probleme, bei denen die Auswahl lokal optimaler Lösungen auch zu globalen Lösungen führt, am besten zu Greedy.

    Einige wichtige Probleme gieriger Algorithmen sind:

    Algorithmus Beschreibung
    Fraktionaler Rucksack Ermitteln Sie den maximalen Gesamtwert der Gegenstände, die in den Rucksack gelegt werden können, und erlauben Sie dabei die teilweise Aufnahme von Gegenständen.
    Dijkstras Algorithmus Findet den kürzesten Weg von einem Quellscheitelpunkt zu allen anderen Scheitelpunkten in einem gewichteten Diagramm.
    Kruskals Algorithmus Ermittelt den minimalen Spannbaum eines gewichteten Diagramms.
    Huffman-Codierung Erstellt einen optimalen Präfixcode für eine Reihe von Symbolen und minimiert so die Gesamtcodierungslänge.

    In Verbindung stehende Artikel:

    • Tutorial zum Greedy-Algorithmus
    • Üben Sie Aufgaben zum Greedy-Algorithmus

    5. Rekursion

    Rekursion ist eine Programmiertechnik, bei der sich eine Funktion innerhalb ihrer eigenen Definition selbst aufruft. Es wird normalerweise verwendet, um Probleme zu lösen, die in kleinere Instanzen desselben Problems zerlegt werden können. Zum Beispiel: Türme von Hanoi (TOH) , Faktorielle Berechnung Und Fibonacci-Folge usw.

    Schritte :

    • Basisfall : Definieren Sie eine Bedingung, die die rekursiven Aufrufe stoppt und eine Lösung bereitstellt.
    • Rekursiver Fall : Definieren Sie die Schritte, um das Problem in kleinere Instanzen zu zerlegen und rekursive Aufrufe durchzuführen.
    • Zurückkehren : Geben Sie die Lösung aus den rekursiven Aufrufen zurück und kombinieren Sie sie, um das ursprüngliche Problem zu lösen.

    Der Punkt, der die Rekursion zu einem der am häufigsten verwendeten Algorithmen macht, ist, dass sie die Basis für viele andere Algorithmen bildet, wie z Baumdurchquerungen , Graphdurchquerungen , Divide and Conquers-Algorithmen Und Backtracking-Algorithmen .

    Verwandte Themen:

    Nationalität von Pete Davidson

    6. Backtracking-Algorithmus

    Wie bereits erwähnt, ist die Zurückverfolgen Der Algorithmus ist vom Rekursionsalgorithmus abgeleitet und bietet die Option zum Zurücksetzen, wenn eine rekursive Lösung fehlschlägt. Wenn also eine Lösung fehlschlägt, geht das Programm zu dem Zeitpunkt zurück, an dem sie fehlgeschlagen ist, und baut auf einer anderen Lösung auf. Es probiert also im Grunde alle möglichen Lösungen aus und findet die richtige.

    Einige wichtige und häufigste Probleme von Backtracking-Algorithmen, die Sie lösen müssen, bevor Sie fortfahren, sind:

    Problem Beschreibung
    Knight-Tour-Problem Finden einer Zugfolge eines Springers auf einem Schachbrett, bei der er jedes Feld genau einmal besucht.
    Ratte in einem Labyrinth Einen Weg von der Ausgangsposition zum Ausgang in einem Labyrinth finden, wobei Hindernisse als Wände dargestellt werden.
    N-Queen-Problem Platzieren Sie N Damen auf einem N×N-Schachbrett, sodass sich keine zwei Damen gegenseitig angreifen.
    Teilmengensummenproblem Bestimmen, ob eine Teilmenge der gegebenen Menge mit einer gegebenen Summe existiert.
    Sudoku Lösen eines 9×9-Rasterrätsels mit Zahlen von 1 bis 9, sodass jede Zeile, jede Spalte und jedes 3×3-Untergitter alle Ziffern ohne Wiederholung enthält.

    Verwandter Artikel:

    • Backtracking-Tutorial
    • Üben Sie Aufgaben zum Backtracking-Algorithmus

    7. Dynamische Programmierung

    Dynamische Programmierung ist eine in der Mathematik und Informatik verwendete Methode zur Lösung komplexer Probleme durch Zerlegung in einfachere Teilprobleme. Indem jedes Teilproblem nur einmal gelöst und die Ergebnisse gespeichert werden, werden redundante Berechnungen vermieden, was zu effizienteren Lösungen für eine Vielzahl von Problemen führt.

    Schlüssel Konzepte:

    • Optimaler Unterbau : Die optimale Lösung eines Problems kann aus den optimalen Lösungen seiner Teilprobleme konstruiert werden.
    • Überlappende Teilprobleme : Teilprobleme wiederholen sich häufig im größeren Problem, was zu redundanten Berechnungen führt.
    • Auswendiglernen / Tabellierung : Speichern der Lösungen für Teilprobleme, um eine Neuberechnung zu vermeiden.

    Einige wichtige und häufigste Probleme dynamischer Programmieralgorithmen, die Sie lösen müssen, bevor Sie fortfahren, sind:

    Problem Beschreibung
    Fibonacci-Folge Generieren von Fibonacci-Zahlen mithilfe dynamischer Programmierung, um redundante Berechnungen zu vermeiden.
    Längste gemeinsame Folge Finden der längsten Teilfolge, die zwei Folgen gemeinsam haben.
    Längste ansteigende Folge Finden der längsten Teilsequenz einer gegebenen Sequenz, in der die Elemente in aufsteigender Reihenfolge sortiert sind.
    0/1 Rucksackproblem Bestimmen des Höchstwerts, der durch die Auswahl von Artikeln mit bestimmten Gewichten und Werten erzielt werden kann, ohne dass eine bestimmte Gewichtsgrenze überschritten wird.
    Problem beim Stangenschneiden Maximierung des Gewinns durch Zerschneiden einer Rute vorgegebener Länge und deren Verkauf zu vorgegebenen Preisen.
    Problem mit dem Münzwechsel Bestimmen der Anzahl der Möglichkeiten, Wechselgeld für einen bestimmten Betrag unter Verwendung eines bestimmten Satzes von Münzwerten herauszugeben.
    Entfernung bearbeiten Ermitteln der Mindestanzahl an Operationen (Einfügen, Löschen, Ersetzen), die erforderlich sind, um eine Zeichenfolge in eine andere umzuwandeln.
    Teilmengensummenproblem Bestimmen, ob es eine Teilmenge einer gegebenen Menge mit einer gegebenen Summe gibt.
    Längste palindromische Folge Finden der längsten Teilfolge einer gegebenen Folge, die ein Palindrom ist.
    Maximale Subarray-Summe Finden des zusammenhängenden Subarrays mit der größten Summe innerhalb eines gegebenen eindimensionalen Arrays.
    Partitionieren Sie die Summe der gleichen Teilmengen Bestimmen, ob es möglich ist, eine gegebene Menge in zwei Teilmengen mit gleicher Summe zu unterteilen.
    Minimaler Kostenpfad Ermitteln des Pfads mit minimalen Kosten von der oberen linken Ecke zur unteren rechten Ecke eines bestimmten Rasters.
    Maximales Produkt-Subarray Finden des zusammenhängenden Teilarrays mit dem größten Produkt innerhalb eines bestimmten eindimensionalen Arrays.

    In Verbindung stehende Artikel:

    • Tabellierung vs. Auswendiglernen
    • Wie löst man ein dynamisches Programmierproblem?
    • Tutorial zur dynamischen Programmierung
    • Die 50 häufigsten Probleme bei der dynamischen Programmiercodierung für Vorstellungsgespräche
    • Üben Sie Aufgaben zum dynamischen Programmieralgorithmus

    8. Graphalgorithmen :

    Graphalgorithmen Bei Datenstrukturen und Algorithmen (DSA) handelt es sich um eine Reihe von Techniken und Methoden zur Lösung von Problemen im Zusammenhang mit Graphen, bei denen es sich um eine Sammlung von Knoten und Kanten handelt. Diese Algorithmen dienen dazu, verschiedene Operationen an Diagrammen durchzuführen, z Suchen, Überqueren, den kürzesten Weg finden , und bestimmend Konnektivität . Sie sind für die Lösung einer Vielzahl realer Probleme unerlässlich, darunter Netzwerkrouting, Analyse sozialer Netzwerke und Ressourcenzuweisung.

    Thema

    Beschreibung des Themas

    Algorithmus Beschreibung des Algorithmus
    Graphdurchquerung

    Techniken zum Besuch aller Eckpunkte in einem Diagramm.

    Tiefensuche (DFS) Erkundet jeden Zweig so weit wie möglich, bevor er zurückgeht.
    Breitensuche (BFS) Erkundet Nachbarscheitelpunkte, bevor zur nächsten Scheitelpunktebene übergegangen wird.

    Minimale Spannbäume

    Minimum Spanning Trees sind die kleinsten Bäume, die alle Knoten in einem Diagramm verbinden, ohne Zyklen zu bilden, was durch das Hinzufügen möglichst kurzer Kanten erreicht wird.

    Kruskals Algorithmus

    Es findet einen minimalen Spannbaum für einen verbundenen gewichteten Graphen. Es fügt die kleinste Gewichtskante hinzu, die keinen Kreis bildet.

    Prims Algorithmus

    Es findet auch einen minimalen Spannbaum für einen verbundenen gewichteten Graphen. Es fügt die kleinste Gewichtskante hinzu, die zwei Bäume verbindet.

    Topologische Sortierung

    Topologische Sortierung ist eine lineare Reihenfolge der Scheitelpunkte in einem gerichteten azyklischen Graphen (DAG), sodass für jede gerichtete Kante vom Scheitelpunkt u bis zum Scheitelpunkt v u in der Reihenfolge vor v steht.

    Kahns Algorithmus Kahns Algorithmus findet eine topologische Ordnung eines gerichteten azyklischen Graphen (DAG).
    DFS-basierter Algorithmus DFS-basierte Algorithmen verwenden die Tiefensuche, um eine topologische Sortierung in einem gerichteten azyklischen Graphen (DAG) durchzuführen.

    Kürzester Weg

    Ein kürzester Pfad in einem Diagramm ist der Pfad zwischen zwei Eckpunkten in einem Diagramm, der im Vergleich zu allen anderen Pfaden zwischen denselben beiden Eckpunkten die minimale Summe der Gewichte entlang seiner Kanten aufweist.

    Dijkstras Algorithmus

    Gieriger Algorithmus, um den kürzesten Weg zwischen allen Knoten in O(E * V logV)-Zeit zu finden.

    Floyd-Warshall-Algorithmus

    Findet den kürzesten Weg zwischen allen Knotenpaaren in O(V^3)-Zeit.

    Bellman Ford-Algorithmus

    Findet den kürzesten Weg von einer einzelnen Quelle in O(V * E)-Zeit.

    Johnson-Algorithmus

    Findet die kürzesten Pfade zwischen allen Scheitelpunktpaaren in der Zeit O(V^2 logV + V * E).

    Stark verbundene Komponenten

    Eine stark verbundene Komponente (SCC) eines gerichteten Graphen ist eine maximale Menge von Scheitelpunkten, so dass es einen Pfad von jedem Scheitelpunkt in der Menge zu jedem anderen Scheitelpunkt in der Menge gibt.

    Kosarajus Algorithmus

    Der Kosaraju-Algorithmus ist ein Zweidurchlauf-Algorithmus, der die stark verbundenen Komponenten (SCCs) eines gerichteten Graphen effizient findet.

    Tarjans Algorithmus

    Der Tarjan-Algorithmus ist ein weiterer effizienter Algorithmus zum Auffinden von SCCs in einem gerichteten Graphen

    Verwandte Themen:

    • Diagramm-Tutorial
    • Die 50 häufigsten Probleme bei der Graphcodierung bei Interviews
    • Übungsaufgabe zu Graphalgorithmen

    9 . Mustersuche

    Mustersuche ist eine grundlegende Technik in der DSA, mit der das Vorkommen eines bestimmten Musters in einem bestimmten Text gefunden wird.

    Nachfolgend sind einige Standardalgorithmen für die Mustersuche aufgeführt:

    Algorithmus Beschreibung Zeitkomplexität
    Rohe Gewalt Es vergleicht das Muster mit jedem Teilstring des Textes O(mn)
    Knuth-Morris-Pratt Es verwendet eine vorberechnete Fehlerfunktion, um unnötige Vergleiche zu überspringen O(m + n)
    Boyer-Moore Es vergleicht das Muster von rechts nach links und überspringt Zeichen basierend auf der letzten Nichtübereinstimmung O(mn)
    Rabin-Karp Es verwendet Hashing, um schnell nach potenziellen Übereinstimmungen zu suchen O(m + n)

    Verwandte Themen:

    • Tutorial zur Mustersuche
    • Übungsaufgabe auf Mustersuche

    10 . Mathematische Algorithmen

    Mathematische Algorithmen sind eine Klasse von Algorithmen, die Probleme im Zusammenhang mit mathematischen Konzepten lösen. Sie werden häufig in verschiedenen Bereichen eingesetzt, darunter Computergrafik, numerische Analyse, Optimierung und Kryptographie.

    Algorithmus Beschreibung
    GCD Und LCM Finden Sie den größten gemeinsamen Teiler und das kleinste gemeinsame Vielfache zweier Zahlen.
    Primfaktorisierung Zerlegen Sie eine Zahl in ihre Primfaktoren.
    Fibonacci-Zahlen Erzeugen Sie die Fibonacci-Folge, wobei jede Zahl die Summe der beiden vorhergehenden ist.
    Katalanische Zahlen Zählen Sie die Anzahl gültiger Ausdrücke mit einer bestimmten Anzahl von Klammerpaaren.
    Modulararithmetik Führen Sie arithmetische Operationen mit Zahlen modulo eines bestimmten Werts durch.
    Euler-Tient-Funktion Zählen Sie die Anzahl der positiven ganzen Zahlen, die kleiner als eine gegebene Zahl sind und dazu relativ teilerfremd sind.
    nCr-Berechnungen Berechnen Sie den Binomialkoeffizienten, der die Anzahl der Möglichkeiten darstellt, r Elemente aus einer Menge von n Elementen auszuwählen.
    Primzahlen und Primzahltests Bestimmen Sie, ob eine gegebene Zahl eine Primzahl ist, und finden Sie Primzahlen effizient.
    Sieb-Algorithmen Finden Sie alle Primzahlen bis zu einem bestimmten Grenzwert.

    Verwandte Themen:

    • Übungsaufgabe zum mathematischen Algorithmus

    11. Geometrische Algorithmen

    Geometrische Algorithmen sind eine Klasse von Algorithmen, die Probleme im Zusammenhang mit der Geometrie lösen. Geometrische Algorithmen sind für die Lösung einer Vielzahl von Problemen in der Informatik unerlässlich, wie zum Beispiel:

    Algorithmus Beschreibung
    Konvexe Hülle Findet das kleinste konvexe Polygon, das eine Reihe von Punkten enthält.
    Nächstes Punktepaar Findet die beiden Punkte in einer Menge, die einander am nächsten liegen.
    Linienkreuzung Bestimmt, ob sich zwei Linien schneiden, und findet, falls ja, den Schnittpunkt.
    Punkt im Polygon Bestimmt, ob ein bestimmter Punkt innerhalb oder außerhalb eines Polygons liegt.

    Verwandte Themen:

    • Übungsaufgabe zu geometrischen Algorithmen

    12. Bitweise Algorithmen

    Bitweise Algorithmen sind Algorithmen, die mit einzelnen Zahlenbits arbeiten. Diese Algorithmen manipulieren die binäre Darstellung von Zahlen, um Aufgaben wie Bitmanipulation, bitweise logische Operationen (AND, OR, XOR) auszuführen. Bits verschieben , Und Einstellung oder Löschen bestimmter Bits innerhalb einer Zahl. Bitweise Algorithmen werden häufig verwendet Low-Level-Programmierung, Kryptographie und Optimierungsaufgaben wo eine effiziente Manipulation einzelner Bits erforderlich ist.

    Thema Beschreibung
    Bitverschiebung Verschiebt Bits um eine angegebene Anzahl von Positionen nach links oder rechts.
    Linksverschiebung (<<) Verschiebt Bits nach links und multipliziert so die Zahl effektiv mit 2.
    Rechtsverschiebung (>>) Verschiebt Bits nach rechts und teilt die Zahl effektiv durch 2.
    Bits extrahieren Verwenden von Masken, um bestimmte Bits aus einer Ganzzahl zu extrahieren.
    Bits setzen Verwenden von Masken, um bestimmte Bits in einer Ganzzahl auf 1 zu setzen.
    Bits löschen Verwenden von Masken, um bestimmte Bits in einer Ganzzahl auf 0 zu setzen.
    Bits umschalten Verwenden von XOR (^), um bestimmte Bits in einer Ganzzahl umzuschalten.
    Zählen Bits setzen Zählen der Anzahl gesetzter Bits (1s) in einer Ganzzahl.

    Verwandte Themen:

    • Tutorial zu bitweisen Algorithmen
    • Übungsaufgabe zu bitweisen Algorithmen

    13. Randomisierte Algorithmen

    Randomisierte Algorithmen sind Algorithmen, die Zufälligkeit zur Lösung von Problemen nutzen. Sie nutzen zufällige Eingaben, um ihre Ziele zu erreichen, was oft zu einfacheren oder effizienteren Lösungen führt.

    Arten randomisierter Algorithmen:

    • Las Vegas : Erzeugt immer ein korrektes Ergebnis, aber die Laufzeit ist zufällig.
    • Monte Carlo : Kann mit geringer Wahrscheinlichkeit zu einem falschen Ergebnis führen, die Laufzeit ist jedoch normalerweise schneller.

    Wichtige Algorithmen, die Randomisierungsalgorithmen verwenden:

    Tojson Java
    Algorithmus Beschreibung
    Schnelle Sorte Ein randomisierter Sortieralgorithmus mit einer durchschnittlichen Zeitkomplexität von O(n log n).
    Liste überspringen Eine zufällige Datenstruktur, die schnelle Such- und Einfügevorgänge ermöglicht.
    Bloom-Filter Eine probabilistische Datenstruktur für effiziente Mengenzugehörigkeitstests.

    14. Branch-and-Bound-Algorithmus

    Der Branch-and-Bound-Algorithmus ist eine Methode, die bei kombinatorischen Optimierungsproblemen verwendet wird, um systematisch nach der besten Lösung zu suchen. Dabei wird das Problem in kleinere Teilprobleme oder Zweige unterteilt und dann bestimmte Zweige basierend auf den Grenzen der optimalen Lösung eliminiert. Dieser Prozess wird fortgesetzt, bis die beste Lösung gefunden ist oder alle Zweige untersucht wurden.

    Standardprobleme zum Branch-and-Bound-Algorithmus:

    Einzigartiges Problem Beschreibung
    0/1 Rucksack mit Branch and Bound Implementierungsdetails des Branch-and-Bound-Ansatzes zur Lösung des 0/1-Knapsack-Problems.
    0/1 Rucksack mit Least Cost Branch and Bound Lösung des 0/1-Knapsack-Problems mit der kostengünstigsten Branch-and-Bound-Technik.
    8 Puzzle-Problem mit Branch and Bound Anwendung von Branch and Bound zur Lösung des 8-Puzzle-Problems, einem beliebten Schiebepuzzlespiel.
    N-Queen-Problem mit Branch and Bound Unter Verwendung von Branch and Bound werden Lösungen für das N-Damen-Problem, ein klassisches Schachproblem, gefunden.

    Verwandte Themen:

    • Tutorial zum Branch-and-Bound-Algorithmus

    Erfahren Sie mehr über Komplexitäten

    Bei Datenstrukturen und Algorithmen (DSA) besteht das Hauptziel darin, Probleme effektiv und effizient zu lösen. Um die Effizienz eines Programms zu bestimmen, betrachten wir zwei Arten von Komplexitäten:

    1. Zeitkomplexität : Dies sagt uns, wie lange die Ausführung unseres Codes dauert.
    2. Weltraumkomplexität : Dies sagt uns, wie viel Speicher unser Code verwendet.

    Asymptotische Notation :

    Um die Effizienz von Algorithmen zu vergleichen, verwenden wir die asymptotische Notation, ein mathematisches Werkzeug zur Schätzung Zeit bezogen auf Eingabegröße ohne den Code auszuführen. Der Schwerpunkt liegt auf der Anzahl der Grundoperationen im Programm.

    Notation Beschreibung
    Big-O (Ο) Beschreibt das Worst-Case-Szenario und stellt eine obere Zeitgrenze des Algorithmus bereit.
    Omega (Ω) Beschreibt das Best-Case-Szenario und bietet eine niedrigere Zeitgrenze des Algorithmus.
    Theta (θ) Stellt die durchschnittliche Komplexität eines Algorithmus dar.

    Die am häufigsten verwendete Notation für die Codeanalyse ist Big-O-Notation , wodurch eine Obergrenze für die Laufzeit oder Speichernutzung in Bezug auf die Eingabegröße festgelegt wird.

    Verwandte Themen:

    Übungs-Spickzettel für Probleme:

    Kuratierte Problemlisten aus den folgenden Artikeln:

    • DSA-Roadmap von Sandeep Jain
    • SDE-BLATT – Ein vollständiger Leitfaden für die SDE-Vorbereitung
    • techcodeview.com Master Sheet – Liste aller Spickzettel