Mindmap-Galerie Wissensrahmen zur Datenstruktur
Sortieren der Wissenspunkte des Datenstruktur-Wissensframeworks. Einschließlich Matrizen, Rekursion, Warteschlangen, Anfangsbäume, Algorithmuskomplexität, Anfangsdatenstrukturen, Freunde, die sich für das Datenstruktur-Wissensframework interessieren, können es herunterladen und sammeln.
Bearbeitet um 2023-03-14 22:21:10Welche Preismethoden gibt es für Projektunteraufträge im Rahmen des EPC-Generalvertragsmodells? EPC (Engineering, Procurement, Construction) bedeutet, dass der Generalunternehmer für den gesamten Prozess der Planung, Beschaffung, Konstruktion und Installation des Projekts verantwortlich ist und für die Testbetriebsdienste verantwortlich ist.
Die Wissenspunkte, die Java-Ingenieure in jeder Phase beherrschen müssen, werden ausführlich vorgestellt und das Wissen ist umfassend. Ich hoffe, es kann für alle hilfreich sein.
Das Software-Anforderungs-Engineering ist ein Schlüsselkapitel für Systemanalytiker. Zu den Kapiteln „Anforderungserhebung“ und „Anforderungsanalyse“ gehören häufig Veröffentlichungen.
Welche Preismethoden gibt es für Projektunteraufträge im Rahmen des EPC-Generalvertragsmodells? EPC (Engineering, Procurement, Construction) bedeutet, dass der Generalunternehmer für den gesamten Prozess der Planung, Beschaffung, Konstruktion und Installation des Projekts verantwortlich ist und für die Testbetriebsdienste verantwortlich ist.
Die Wissenspunkte, die Java-Ingenieure in jeder Phase beherrschen müssen, werden ausführlich vorgestellt und das Wissen ist umfassend. Ich hoffe, es kann für alle hilfreich sein.
Das Software-Anforderungs-Engineering ist ein Schlüsselkapitel für Systemanalytiker. Zu den Kapiteln „Anforderungserhebung“ und „Anforderungsanalyse“ gehören häufig Veröffentlichungen.
Wissensrahmen zur Datenstruktur
B-Baum
Ausgewogener Mehrbaum
Natur
Der Wurzelknoten hat mindestens zwei untergeordnete Knoten
Jeder Nicht-Wurzelknoten hat mindestens M/2 (aufgerundet) Kinder und höchstens M Kinder.
Jeder Nicht-Root-Knoten verfügt über mindestens M/2-1 (aufgerundete) Schlüsselwörter und diese sind in aufsteigender Reihenfolge angeordnet
Der Wert des untergeordneten Knotens zwischen key[i] und key[i 1] liegt zwischen key[i] und key[i 1]
Alle Blattknoten befinden sich auf derselben Ebene
B-Baum
Natur
Seine Definition ist im Grunde die gleiche wie beim B-Baum
Der Teilbaumzeiger eines Nicht-Blattknotens entspricht der Anzahl der Schlüsselwörter
Der Teilbaumzeiger P[i] des Nicht-Blattknotens zeigt auf den Teilbaum, dessen Schlüsselwert zu [k[i],k[i 1]) gehört.
Fügen Sie einen Linkzeiger zu allen Blattknoten hinzu
Alle Schlüsselwörter erscheinen in Blattknoten
suchen
Im Grunde das Gleiche wie B-Tree
charakteristisch
Alle Schlüsselwörter erscheinen in der verknüpften Liste der Blattknoten (dichter Index), und die Schlüsselwörter in der verknüpften Liste sind zufällig geordnet
Es ist unmöglich, den Blattknoten zu treffen
Nicht-Blattknoten entsprechen dem Index von Blattknoten (Sparse-Index), und Blattknoten entsprechen der Datenschicht, in der (Schlüsselwort-)Daten gespeichert werden.
Besser geeignet für Dateiindizierungssysteme
B*-Baum
Fügen Sie Zeiger auf Brüder zwischen den Nicht-Wurzel- und Nicht-Blattknoten des B-Baums hinzu
Unterthema 2
Hash
Suchen (Abrufen)
Der Prozess, bei dem ermittelt wird, ob in einer Sammlung von Datenelementen ein Datenelement mit einem Schlüssel vorhanden ist, der einem bestimmten Schlüssel entspricht.
Ergebnis
Erfolg
scheitern
Suchstruktur
Datenerfassung für die Suche
Suchkontext
statische Umgebung
Die Suchstruktur ändert sich nicht, bevor und nachdem Vorgänge wie Einfügen und Löschen ausgeführt werden.
dynamische Umwelt
Um eine hohe Sucheffizienz aufrechtzuerhalten, wird die Suchstruktur vor und nach Vorgängen wie Einfügen und Löschen automatisch angepasst, und die Struktur kann sich ändern.
Finden
statische Suche
Sequenztabelle
Durchqueren von vorne nach hinten O(n)
geordnete Sequenzliste
Binäre Suche O(log(n))
Indexsequenztabelle
dynamische Suche
binäre Baumstruktur
Binärer Sortierbaum
ausgeglichener Binärbaum
Baumstruktur
B-Baum
B-Baum
Hash-Suche
Der Schlüssel jedes Elements entspricht einem eindeutigen Knotenspeicherort in der Struktur
Hashing-Methode
Geben Sie Daten ein und suchen Sie sie. Verwenden Sie die Hash-Funktion, um den Speicherort zu finden und ihn dann zu speichern oder zu durchsuchen.
Hash-Kollision
Für zwei Daten Ki und Kj (i!=j), Ki!=Kj, aber es gibt Hash(Ki)==Hash(Kj)
Hash-Funktion
Der Bereich der Hash-Funktion muss alle zu speichernden Schlüssel umfassen und wenn die Hash-Tabelle m Adressen zulässt, muss ihr Wertebereich zwischen 0-m-1 liegen
Die durch die Hash-Funktion berechneten Adressen können gleichmäßig im Raum verteilt werden
Die Hash-Funktion sollte relativ einfach sein
Gängige Hash-Funktionen
direkte Adressierungsmethode
Nehmen Sie eine lineare Funktion des Schlüsselworts als Hash-Adresse
Vorteile: einfach und einheitlich
Nachteile: Die Verteilung der Schlüsselwörter muss im Voraus bekannt sein
Verwendungsszenario: Geeignet zum Auffinden relativ kleiner und kontinuierlicher Situationen
Division mit Restrestverfahren
Angenommen, die Anzahl der im Hash zulässigen Adressen sei m, nehmen Sie als Teiler eine Primzahl p, die nicht größer als m, aber am nächsten oder gleich m ist, und dividieren Sie den Schlüssel gemäß der Hash-Funktion: Hash(key) =key%p,p<=m; Code in Hash-Adresse umgewandelt
Quadrat-Medium-Methode
Angenommen, das Schlüsselwort ist 1234, das Quadrat ist 1522756, und extrahieren Sie dann die dreistellige Zahl 227 in der Mitte als Hash-Adresse
Faltmethode
Teilen Sie das Schlüsselwort von links nach rechts in mehrere Teile mit gleichen Ziffern auf, überlagern und summieren Sie diese Teile und verwenden Sie die letzten Ziffern entsprechend der Länge der Hash-Tabelle als Hash-Adresse.
Zufallszahlenmethode
Wählen Sie eine Zufallsfunktion und verwenden Sie den Zufallsfunktionswert des Schlüsselworts als Hash-Adresse
mathematische Analyse
Unter der Annahme von n d Ziffern kann jede Ziffer r unterschiedliche Symbole haben, die in jeder Ziffer vorkommen. Sie können in einigen Ziffern relativ gleichmäßig verteilt sein die Hash-Adresse entsprechend der Hashing-Methode.
Methode zur Handhabung von Hash-Konflikten
geschlossenes Hashing
Sobald ein Konflikt auftritt, suchen Sie nach der nächsten leeren Hash-Tabellenadresse. Solange die Hash-Tabelle groß genug ist, kann die leere Hash-Adresse immer bekannt sein.
lineare Erkundung
Beim Einfügen wird festgestellt, dass die Daten an dieser Position mit den einzufügenden Daten übereinstimmen, und es wird kein Einfügen durchgeführt.
Wenn ein Konflikt auftritt, überprüfen Sie nacheinander den nächsten Bucket und fügen Sie Daten ein, wenn eine leere Position vorhanden ist.
Zweite Erkundung
Unter Verwendung der quadratischen Erkundungsmethode lautet die Formel zum Finden der nächsten leeren Position in der Tabelle H(i)=(H0 i^2)%m,H(i)=(H0-i^2)%m
Wenn die Länge der Tabelle eine Primzahl ist und der Reproduktionsfaktor 0,5 nicht überschreitet, können neue Tabelleneinträge eingefügt werden
doppeltes Hashing
Es sind zwei Hash-Funktionen erforderlich, und wenn eine davon kollidiert, wird die nächste Hash-Funktion zur Berechnung des Offsets verwendet.
Ladefaktor
a=Anzahl der in der Tabelle gefüllten Elemente/Länge der Hash-Tabelle
Kontrollieren Sie ihn unter 0,7-0,8. Wenn er 0,8 überschreitet, erhöht sich der CPU-Cache-Index beim Nachschlagen in der Tabelle.
offenes Hashing
Zunächst wird eine Hash-Funktion verwendet, um die Hash-Adresse des Schlüsselsatzes zu berechnen. Schlüsselcodes mit derselben Adresse gehören zu demselben Teilsatz. Die Elemente in jedem Bucket werden durch einen einzigen verknüpft Verkettete Liste Der Kopf jeder verknüpften Liste Die Punkte bilden einen Vektor mit der gleichen Anzahl von Elementen wie der Anzahl möglicher Buckets.
Blütenfilter
Wenn ein Element zur Menge hinzugefügt wird, werden k Hash-Funktionen verwendet, um das Element in k Punkten in einem Bit-Array abzubilden und sie auf 1 zu setzen. Beim Abrufen prüfen Sie einfach, ob sie alle 1 sind. Das ist in Ordnung da es eins gibt. Wenn es Null ist, ist es nicht, wenn alles 1 ist, ist es wahrscheinlich
Sortieren
Konzept
Es geht darum, einen Satz unordentlicher Daten nach einer bestimmten Regel (aufsteigende oder absteigende Reihenfolge) zu organisieren.
Datenblatt
Eine endliche Menge von zu sortierenden Datenelementen
Sortiercode
Normalerweise verfügen Datenelemente über mehrere Attributfelder, von denen eines zur Unterscheidung von Elementen und als Grundlage für die Sortierung dienen kann. Dieses Feld ist der Sortiercode.
Wenn sich die Sortiercodes der einzelnen Elemente in der Datentabelle voneinander unterscheiden, wird dieser Sortiercode als Hauptsortiercode bezeichnet.
Die Stabilität von Sortieralgorithmen
Zwei Elemente R[i]R[j], ihr Sortiercode K[i]==K[j], und vor der Sortierung liegt das Element R[i] vor R[j] und die Elemente liegen zwischen R[i ] und Die Reihenfolge von R[j] bleibt unverändert
Gängige Sortieralgorithmen
Sortieren durch Einfügen
direkte Einfügungssortierung
Um es in eine sortierte Sequenz einzufügen, suchen Sie zunächst die Position und verschieben Sie dann das Element nach der Position zurück.
Stabilisieren
Hill-Sorte
Reduzieren Sie die inkrementelle Sortierung
Auswahl sortieren
Auswahl sortieren
Stellen Sie jeweils das kleinste Element nach vorne
Turniersortierung
Vergleichen Sie weiterhin zwei nach dem anderen, um den Gewinner zu finden, vergleichen Sie dieses nicht mehr, vergleichen Sie weiterhin die anderen beiden nach dem anderen, ermitteln Sie den Gewinner und machen Sie weiter in der Schleife
instabil
Heap-Sortierung
Erstellen Sie einen großen Heap in aufsteigender Reihenfolge, andernfalls erstellen Sie einen kleinen Heap
instabil
Sortierung tauschen
Blasensortierung
Stabilisieren
Vergleichen Sie zwei benachbarte Elemente nacheinander und tauschen Sie sie aus, wenn die Bedingungen nicht erfüllt sind.
Schnelle Sorte
Nehmen Sie einen Basiswert und platzieren Sie die kleineren links und die größeren rechts. Der linke und der rechte Teil nehmen rekursiv den Basiswert an und dividieren weiter.
Zusammenführen, sortieren
Zusammenführen, sortieren
Teilen Sie die zu sortierende Sequenz in zwei gleich lange Teilsequenzen auf und fügen Sie diese dann zu einer Sequenz zusammen
nicht vergleichende Sortierung
Zählsortierung
Radix-Sortierung
Bild
Eine Datenstruktur, die aus einer Sammlung von Scheitelpunkten und Beziehungen zwischen Scheitelpunkten besteht
Eckpunkte und Kanten
Scheitel
Die Knoten im Diagramm werden Knoten genannt
Seite
Zwischen den Eckpunkten gibt es eine Kante
Klassifizierung von Graphen
gerichteter Graph
In einem gerichteten Graphen ist das Scheitelpunktpaar <x, y> in der Reihenfolge <x, y> <y, x> zwei verschiedene Kanten
Ungerichteter Graph
(x,y)(y,x) ist eine Seite
vollständige Grafik
Wenn es in einem ungerichteten Graphen mit n Eckpunkten n*(n-1)/2 Kanten gibt, gibt es und gibt nur eine Kante zwischen zwei beliebigen Eckpunkten.
Wenn es in einem gerichteten Graphen mit n Eckpunkten n*(n-1) Kanten gibt, dann gibt es nur Kanten in entgegengesetzter Richtung zwischen zwei beliebigen Eckpunkten.
benachbarter Knoten
Wenn im ungerichteten Graphen G (u, v) eine Kante in E (G) ist, dann werden u und v als benachbarte Eckpunkte bezeichnet, und (u, v) soll mit den Eckpunkten u verbunden sein und v.
Wenn <u,v> im gerichteten Graphen G eine Kante in E(G) ist, dann heißt der Scheitelpunkt u neben v, und der Scheitelpunkt v grenzt an den Scheitelpunkt u und die Kante <u, v> soll die Summe der Scheitelpunkte sein, mit denen u und v verbunden sind
Scheitelgrad
die Anzahl der damit verbundenen Kanten
In einem gerichteten Graphen ist der Grad eines Scheitelpunkts gleich der Summe aus In-Grad und Out-Grad des Scheitelpunkts, wobei der In-Grad des Scheitelpunkts v die Anzahl der gerichteten Kanten ist, die mit v enden, bezeichnet als indev( v) der Out-Grad des Scheitelpunkts v. Der Grad ist die Anzahl der gerichteten Kanten mit v als Ausgangspunkt, bezeichnet als outdev(v)
Der Grad eines ungerichteten Graphen ist gleich dem In-Grad und Out-Grad dev(v) = indev(v) = outdev(v)
Weg
Wenn es im Diagramm G = (V, E) eine Reihe von Kanten gibt, die vom Scheitelpunkt vi ausgehen und den Scheitelpunkt vj erreichen können, wird die Scheitelpunktsequenz vom Scheitelpunkt vi nach vj als Pfad vom Scheitelpunkt vi zum Scheitelpunkt vj bezeichnet.
Rechts
Am Rand angebrachte Dateninformationen
Pfadlänge
Bei ungewichteten Diagrammen bezieht sich die Pfadlänge einer Kante auf die Anzahl der Kanten auf dem Pfad.
Bei gewichteten Diagrammen bezieht sich die Länge eines Pfades auf die Summe der Gewichte jeder Kante auf dem Pfad.
Einfache Wege und Schleifen
Wenn sich die Eckpunkte auf dem Pfad nicht wiederholen, wird ein solcher Pfad als einfacher Pfad bezeichnet. Wenn der erste Eckpunkt v1 und der letzte Eckpunkt vm auf dem Pfad zusammenfallen, wird ein solcher Pfad als Schleife oder Ring bezeichnet.
Nebenhandlung
Angenommen, Graph G={V,E} und Graph G1={V1.E1}. Wenn V1 zu V und E1 zu E gehört, dann heißt G1 ein Untergraph von G.
verbundener Graph
Wenn in einem ungerichteten Graphen ein Pfad zwischen zwei Scheitelpunkten vorhanden ist, ist dieser verbunden. Wenn ein beliebiges Scheitelpunktpaar verbunden ist, wird der Graph als verbundener Graph bezeichnet.
Stark verbundener Graph
In einem gerichteten Graphen gibt es zwischen jedem Paar von Scheitelpunkten vi und vj einen Pfad von vi nach vj, und es gibt auch einen Pfad von vj nach vi.
Spannbaum
Der minimal verbundene Teilgraph eines verbundenen Graphen wird Spannbaum des Graphen genannt. Der Spannbaum eines verbundenen Graphen mit n Eckpunkten hat n Eckpunkte und n-1 Kanten.
Diagrammspeicherstruktur
Adjazenzmatrix
Adjazenzliste
Ungerichteter Graph
gerichteter Graph
Graphdurchquerung
Tiefe zuerst
Breite zuerst
verbundenen Komponenten
Wenn es sich bei dem ungerichteten Diagramm um ein nicht verbundenes Diagramm handelt, kann der Tiefensuch- oder Breitensuchalgorithmus ausgehend von einem bestimmten Scheitelpunkt im Diagramm nicht alle Scheitelpunkte des Diagramms durchqueren, sondern nur auf alle Scheitelpunkte des größten zugreifen verbundener Teilgraph, in dem sich der Knoten befindet, bilden diese Eckpunkte eine verbundene Komponente
minimaler Spannbaum
Kriterien
Ein minimaler Spannbaum kann nur mithilfe von Kanten im Diagramm konstruiert werden
Nur n Eckpunkte im Diagramm können mit genau n-1 Kanten verbunden werden
Die ausgewählten n-1 Kanten können keine Schleife bilden.
Gieriger Algorithmus
Treffen Sie bei der Lösung von Problemen immer die Wahl, die Ihnen im Moment am besten erscheint, also die lokal optimale Lösung.
Kruskal-Algorithmus
Suchen Sie jedes Mal eine Kante mit dem kürzesten Gewicht und nicht mehr auf derselben verbundenen Komponente, um sie dem Spannbaum hinzuzufügen.
Primzahlalgorithmus
Finden Sie nebeneinander
Einheit kürzester Weg
Finden Sie ausgehend von einem Scheitelpunkt in einem gewichteten Diagramm den kürzesten Weg zu einem anderen Scheitelpunkt. Der kürzeste Weg ist die minimale Summe der Gewichte jeder Kante entlang des Pfades.
Erste Einführung in Datenstrukturen
Konzept
Daten
Symbole, die objektive Dinge beschreiben, sind Objekte, die im Computer manipuliert werden können. Sie sind eine Sammlung von Symbolen, die vom Computer erkannt und zur Verarbeitung in den Computer eingegeben werden können.
Datenelement
Es ist eine Grundeinheit, aus der Daten bestehen und die in Computern normalerweise als Ganzes verarbeitet wird. Es wird auch als Datensatz bezeichnet.
Datenelement
Ein Datenelement kann aus mehreren Datenelementen bestehen. Ein Datenelement ist die kleinste untrennbare Dateneinheit
Datenstrukturformular
Datenstruktur
ist eine Sammlung von Datenelementen, die eine oder mehrere spezifische Beziehungen zueinander haben
Einstufung
logische Struktur
Struktur festlegen
lineare Struktur
Baumstruktur
Grafische Struktur
physikalische Struktur
Sequentielle Speicherstruktur
Kettenspeicherstruktur
spezifisches Konzept
logische Struktur
Beziehungen zwischen Datenelementen in einem Datenobjekt
Struktur festlegen
Die Datenelemente im Satz haben keine andere Beziehung zwischen ihnen, außer dass sie zum selben Satz gehören.
lineare Struktur
Zwischen Datenelementen besteht eine Eins-zu-Eins-Beziehung
Baumstruktur
Eine hierarchische Eins-zu-viele-Beziehung zwischen Datenelementen
Grafische Struktur
Datenelemente sind Viele-zu-Viele-Beziehungen
physikalische Struktur
Die Speicherform der logischen Datenstruktur im Computer
Sequentielle Speicherstruktur
Datenelemente werden in Speichereinheiten mit aufeinanderfolgenden Adressen gespeichert und die logischen und physischen Beziehungen zwischen den Daten sind konsistent.
Kettenspeicherstruktur
Datenelemente werden in jeder Speichereinheit gespeichert. Die Speichereinheit kann kontinuierlich oder diskontinuierlich sein.
Die logische Struktur ist problemorientiert und die physische Struktur ist computerorientiert. Ihr grundlegendes Ziel besteht darin, Daten und ihre logischen Beziehungen im Speicher des Computers zu speichern.
Programm
Algorithmus
Datenstruktur
Algorithmus
Eine Beschreibung der Schritte zur Lösung eines bestimmten Problems, die in einem Computer als endliche Folge von Anweisungen dargestellt werden, wobei jede Anweisung eine oder mehrere Operationen darstellt
Eigenschaften des Algorithmus
eingeben
Der Algorithmus hat null oder mehr Eingaben
Ausgabe
Es gibt mindestens einen oder mehrere Ausgänge
Endlichkeit
Der Algorithmus endet automatisch nach der Ausführung einer begrenzten Anzahl von Schritten ohne Endlosschleifen und ein Schritt wird innerhalb einer akzeptablen Zeit abgeschlossen
Sicherheit
Jeder Schritt des Algorithmus hat eine bestimmte Bedeutung und es wird keine Mehrdeutigkeit geben.
Durchführbarkeit
Jeder Schritt des Algorithmus muss durchführbar sein, das heißt, jeder Schritt kann durch eine endliche Anzahl von Ausführungen abgeschlossen werden
Anforderungen an den Entwurfsalgorithmus
Richtigkeit
Lesbarkeit
Robustheit
Hohe Zeiteffizienz
und geringer Platzbedarf
Einfachheit
Komplexität des Algorithmus
Zeitkomplexität
Raumkomplexität
Klassifikation der algorithmischen Analyse
durchschnittliche Situation
Erwartete Anzahl von Läufen für jede Eingabegröße
Worst-Case-Szenario
Maximale Anzahl von Läufen für jede Eingabegröße
Best-Case-Szenario
Mindestanzahl von Läufen für jede Eingabegröße, der beste Fall tritt normalerweise nicht ein
Zeitkomplexität – O asymptotische Notation
Allgemeine Algorithmus-O(n)-Berechnungsmethode
Ersetzen Sie alle additiven Konstanten zur Laufzeit durch die Konstante 1
In der modifizierten Funktion „Anzahl der Läufe“ werden nur die Terme höchster Ordnung beibehalten
Wenn der Koeffizient des Termes höchster Ordnung existiert und nicht 1 ist, entfernen Sie die mit diesem Term multiplizierte Konstante
Zeitkomplexitätsberechnung des Divide-and-Conquer-Algorithmus
Die zeitliche Komplexität des binären Suchalgorithmus beträgt lgN
Die zeitliche Komplexität des M-Punkt-Suchalgorithmus beträgt logM^N
Zeitkomplexitätsberechnung eines rekursiven Algorithmus
Gesamtzahl der Rekursionen * Anzahl der Rekursionen pro Zeit
Rekursiver Algorithmus Raumkomplexitätsalgorithmus
N*Space-Größe für jede Rekursion
Rekursion
rekursive Definition
Ein Objekt wird als rekursiv bezeichnet, wenn es sich selbst teilweise enthält oder sich selbst definiert.
rekursiver Prozess
Eine Prozedur ruft sich selbst direkt oder indirekt auf
rekursives Denken
Teilen Sie das Problem in kleinere Probleme auf, die dieselbe Lösung wie das ursprüngliche Problem haben
rekursive Bedingung
Reduzieren Sie die Größe des Problems, sodass das neue Problem dieselbe Lösung wie das ursprüngliche Problem hat
Rekursiven Ausgang festlegen
rekursive Klassifizierung
Datenstrukturrekursion
Problemlösungsrekursion
Rekursiver Aufrufstapel
Schwanzrekursion
Das von einem rekursiven Aufruf zurückgegebene Ergebnis wird immer direkt zurückgegeben
Die Natur der Schwanzrekursion
Zwischenspeichern Sie das Ergebnis einer einzelnen Berechnung und übergeben Sie es an den nächsten Aufruf, was einer automatischen Akkumulation entspricht
Zeitkomplexität
Gesamtzahl der Rekursionen * Anzahl der Rekursionen pro Zeit
Zurückverfolgen
Die Grundidee
Labyrinth-Algorithmus
Vor- und Nachteile der Rekursion
Vorteil
Die Rekursion vereinfacht unsere Denkweise bei der Lösung bestimmter Probleme und macht den Code prägnanter und leichter lesbar.
Mangel
Der Kern der Rekursion besteht darin, sich selbst aufzurufen, und die Kosten für den Aufruf einer Funktion sind sehr hoch. Das System muss für jeden Funktionsaufruf Speicherplatz zuweisen, die Aufrufpunktinformationen auf den Stapel verschieben und nach Beendigung des Funktionsaufrufs Speicherplatz freigeben freigegeben werden, den Stapel öffnen und den Haltepunkt wiederherstellen, wenn die Komplexität der rekursiven Lösung zunimmt
Stapel
Stack-Konzept
Eine spezielle Art einer linearen Tabelle, die das Einfügen und Löschen von Daten nur an einem Ende ermöglicht
Merkmale: Wer zuerst reinkommt, mahlt zuerst raus
Sequenzstapel
Die Datenelemente des sequentiellen Stapels und der Buchsequenztabelle sind gleich. Der Unterschied besteht darin, dass die Push- und Pop-Operationen des sequentiellen Stapels nur an der Spitze des aktuellen Stapels ausgeführt werden dürfen.
gemeinsamer Stapel
Ein Array implementiert zwei Stapel
Prinzip
Da sich zwei Stapel einen Raum teilen und näher zur Mitte rücken, stellen die beiden Enden des Arrays den unteren Teil der beiden Stapel dar, und der obere Teil des Stapels bewegt sich weiter in Richtung Mitte.
Anwendungsszenarien
Die beiden Stapelplatzanforderungen stehen in einem gegensätzlichen Verhältnis, das heißt, einer wächst und der andere schrumpft.
Kettenstapel
Kopfstopfen entfernt
Stack-Anwendung
Halterung passend
Umgekehrter polnischer Ausdruck
Labyrinth-Algorithmus
Warteschlange
Eine spezielle lineare Tabelle, die nur das Einfügen von Daten an einem Ende und das Löschen am anderen Ende ermöglicht
sequentielle Warteschlange
Implementierungsmethode eins
Wenn sich der Kopf der Warteschlange nicht aus der Warteschlange bewegt, bewegen sich alle Elemente vorwärts.
Implementierungsmethode zwei
Beim Entnehmen aus der Warteschlange bewegt sich der Kopf der Warteschlange um eine Position nach hinten
falscher Überlauf
Nach mehreren Warteschlangen- und Entnahmevorgängen tritt ein Überlauf auf. Es ist noch Speicherplatz vorhanden, aber der Warteschlangenvorgang kann nicht ausgeführt werden.
Echtes Überlaufphänomen
Der maximale Speicherplatz ist voll. Setzen Sie den Warteschlangenvorgang fort.
kreisförmige Warteschlange
Eine Ende an Ende verbundene sequentielle Speicherwarteschlange ist eine kreisförmige Warteschlange.
Bestimmen, ob die Warteschlange voll oder leer ist
Verbrauchen Sie einen Speicherplatz weniger
Der Warteschlangenendzeiger plus eins entspricht dem Warteschlangenkopfzeiger. Dies ist die Bedingung für die Feststellung, dass die Warteschlange voll ist.
Voraussetzung für ein Nullurteil ist, dass Schwanz und Kopf gleich sind
Entwerfen Sie eine Markenflagge
Das anfängliche Flag ist auf 0 gesetzt, die Warteschlange wird erfolgreich mit Flag=1 in die Warteschlange eingereiht und die Warteschlange wird erfolgreich aus der Warteschlange entfernt, wenn das Flag auf 0 gesetzt ist.
Team leerer Zustand hinten==vorne&&flag==0,
Vollständiger Zustand hinten==vorne&&flag=1
Setzen Sie einen Zähler
Anfänglich ist die Anzahl = 0, die Warteschlange wurde erfolgreich in die Warteschlange eingereiht, Anzahl 1, und die Warteschlange wurde erfolgreich aus der Warteschlange entfernt, Anzahl 1.
Anzahl der leeren Warteschlangenbedingung ==0
Die Bedingungen dafür, dass die Warteschlange voll ist, sind count>0&&rear==front oder count == MaxSize
verkettete Warteschlange
Die verknüpfte Speicherstruktur der Warteschlange ist eigentlich eine einfach verknüpfte Liste einer linearen Liste, mit der Ausnahme, dass sie nur den Schwanz rein und den Kopf raus haben kann.
Prioritätswarteschlange
Prioritätswarteschlange
Diejenigen mit höherer Priorität werden zuerst aus der Warteschlange entfernt, und diejenigen mit derselben Priorität folgen der First-In-First-Out-Regel.
Bewerbungen in die Warteschlange stellen
Produzenten-Konsumenten-Modell
Nachrichtenwarteschlange
Warteschlangenphänomen
Netzwerkdatenübertragung
Matrix
spezielle Matrix
Eine Matrix mit vielen Elementen mit demselben Wert oder vielen Nullelementen und der Verteilung von Elementen mit demselben Wert oder Nullelementen weist ein bestimmtes Muster auf
Symmetrische Matrix
Eine N*N-Matrix, jedes Aij = Aji
Symmetrischer Matrixkomprimierungsspeicher
Da die oberen und unteren Dreiecke der symmetrischen Matrix gleich sind, muss nur die Hälfte davon gespeichert werden.
Die Beziehung zwischen symmetrischen Matrizen und symmetrischem komprimiertem Speicher
unteres Dreieck
i>jSymmetricMatrix[i][j] == Array[i*(i 1)/2 j]
spärliche Matrix
M*N-Matrix, die Anzahl der gültigen Werte in der Matrix ist weitaus kleiner als die Anzahl der ungültigen Werte und die Verteilung ist unregelmäßig.
Sparse-Matrix-Komprimierungsspeicher
Speichern Sie nur eine kleine Anzahl gültiger Werte
Verwenden Sie {row,col,value}-Tripel, um sie entsprechend ihrer Position im Array in der Reihenfolge der Zeilenpriorität zu speichern.
Matrixinversion
Vertauschen von Zeilen und Spalten
Schneller Rücklauf
erster Bekanntschaftsbaum
Grundbegriffe von Bäumen
Eine Menge bestehend aus N Knoten (N>=0)
Es gibt einen speziellen Knoten, der Wurzelknoten genannt wird. Der Wurzelknoten hat keine Vorgängerknoten.
Mit Ausnahme des Wurzelknotens sind die verbleibenden Knoten in M (M>0) disjunkte Mengen T1, T2 ... Tn unterteilt, von denen jede ein Teilbaum ähnlich einer Baumstruktur ist.
Bäume werden rekursiv definiert
Glossar
Knoten
Ein Knoten enthält ein Datenelement und mehrere Zweige (Zeiger (Indizes)), die auf andere Teilbäume verweisen.
Grad des Knotens
Die Anzahl der Teilbäume, die dem Knoten gehören
Knoten mit Grad 0
Auch Endknoten genannt
Zweigknoten
Knoten mit einem Grad ungleich Null
Nicht-terminaler Knoten
Vorfahrenknoten
Alle Knoten auf den Zweigen vom Wurzelknoten zu diesem Knoten
Nachkommenknoten
Alle Knoten im Teilbaum mit einem Knoten als Wurzelknoten
Elternknoten
Wenn ein Knoten im Baum einen untergeordneten Knoten hat, wird der Knoten als übergeordneter Knoten seines untergeordneten Knotens bezeichnet.
Der Wurzelknoten eines Teilbaums eines Knotens im Baum wird als untergeordneter Knoten dieses Knotens bezeichnet.
Bruderknoten
Knoten mit demselben übergeordneten Knoten
Grad des Baumes
Der maximale Grad aller Knoten im Baum
Knotenebene
Die Anzahl der Zweige entlang des Pfads vom Wurzelknoten zu einem Knoten im Baum
Baumtiefe
Der Maximalwert der Ebenen aller Knoten im Baum
geordneter Baum
Jeder Teilbaum T0, T1 ... des Knotens im Baum ist geordnet
ungeordneter Baum
Die Reihenfolge zwischen den Teilbäumen der Knoten im Baum ist nicht wichtig und sie können ihre Positionen untereinander austauschen.
Wald
Baum m Sammlung von Bäumen
Baumdarstellung
Verzeichnisaufbau
Sammlung Venn-Diagramm
Baumspeicherstruktur
Elternvertretung
Verwenden Sie Zeiger, um die übergeordneten Knoten jedes Knotens anzugeben
Vorteil
Es ist sehr praktisch, die übergeordnete Knotenoperation eines Knotens zu finden.
Mangel
Es ist unpraktisch, die untergeordneten Knoten eines Knotens zu finden.
Kindervertretung
Verwenden Sie Zeiger, um auf die untergeordneten Knoten jedes Knotens zu zeigen
Vorteil
Es ist bequemer, die untergeordneten Knoten eines Knotens zu finden
Mangel
Es ist sehr umständlich, den übergeordneten Knoten eines Knotens zu finden.
Eltern-Kind-Vertretung
Verwenden Sie Zeiger, um sowohl die übergeordneten Knoten jedes Knotens als auch die untergeordneten Knoten jedes Knotens darzustellen.
Vertretung des Kindesbruders
Stellt den ersten untergeordneten Knoten des ersten Knotens dar und gibt außerdem den nächsten Geschwisterknoten jedes Knotens an.
Baumanwendungen
Computerverzeichnis
Binärbaum
Konzept
Ein Binärbaum ist eine endliche Menge von Knoten. Die Menge ist entweder leer oder besteht aus einem Wurzelknoten und zwei Binärbäumen, die als linker Teilbaum und rechter Teilbaum bezeichnet werden.
Merkmale
Jeder Knoten hat höchstens zwei Teilbäume
Die Teilbäume eines Binärbaums können in linke und rechte Teilbäume unterteilt werden und ihre Reihenfolge kann nicht umgekehrt werden.
vollständiger Binärbaum
Alle Zweigknoten haben linke und rechte Teilbäume, und alle Blattknoten befinden sich auf derselben Ebene.
vollständiger Binärbaum
Wenn die Struktur eines Binärbaums mit N Knoten mit der Struktur der ersten N Knoten eines vollständigen Binärbaums übereinstimmt, spricht man von einem vollständigen Binärbaum.
Eigenschaften von Binärbäumen,
Wenn die Ebene des Wurzelknotens mit 1 angegeben ist, gibt es höchstens 2^(i-1) (i>=1) Knoten auf der i-ten Ebene eines nicht leeren Binärbaums.
Wenn die Tiefe eines Binärbaums mit nur dem Wurzelknoten mit 1 angegeben wird, beträgt die maximale Anzahl von Knoten eines Binärbaums mit einer Tiefe von K 2^k-1 (k>=0).
Wenn für jeden Binärbaum die Anzahl der Blattknoten n0 und die Anzahl der Nicht-Blattknoten mit Grad 2 n2 beträgt, dann ist n0 = n2 · 1
Wenn für einen vollständigen Binärbaum mit n Knoten alle Knoten beginnend bei 0 in der Reihenfolge von oben nach unten und von links nach rechts nummeriert sind, dann gilt für den Knoten mit der Seriennummer i:
Wenn i>0, dann ist die Seriennummer des übergeordneten Knotens des Knotens mit der Seriennummer i (i-1)/2. Wenn i==0, dann ist der Knoten mit der Seriennummer i der Wurzelknoten und es gibt keinen Elternknoten.
Wenn 2i 1<n, dann ist die linke Kindnummer des Elternknotens mit der Seriennummer i (i-1)/2. Wenn (2i 1)>=n, dann hat der Knoten mit der Seriennummer i keinen rechten Kindknoten.
Wenn 2i 2<n, dann ist der rechte untergeordnete Knoten des Knotens mit der Seriennummer 2i 2. Wenn 2i 2>=n, dann hat der Knoten mit der fortlaufenden Nummer i keinen rechten untergeordneten Knoten.
Binäre Baumspeicherstruktur
sequentielle Speicherung
Vorteil,
Speichern Sie komplette Binärbäume einfach und platzsparend
Mangel
Für allgemeine Binärbäume, insbesondere Einzelzweigbäume, ist die Speicherplatznutzung nicht ideal.
Kettenspeicher
Unterthema 1
Simulationszeiger (statische verknüpfte Liste)
Grundlegende Operationen von Binärbäumen
Erstellung eines Binärbaums
Durchquerung eines Binärbaums
Prolog
mittlerer Ordnung
Nachwort
Reihenfolge
Initialisieren Sie eine Warteschlange
Stellen Sie den Zeiger des Wurzelknotens in die Warteschlange
Schleifen, wenn die Warteschlange nicht leer ist
Einen Knoten aus der Warteschlange entfernen
Wenn der linke Teilbaum des Knotens nicht leer ist, stellen Sie den linken Teilbaumzeiger des Knotens in die Warteschlange.
Wenn der rechte Teilbaum des Knotens nicht leer ist, stellen Sie den rechten Teilbaum des Knotens in die Warteschlange.
Beenden
Thread-Binärbaum
Cueing-Konzept
Konvertieren Sie den Binärbaum entsprechend der Durchquerung des Binärbaums in eine lineare Sequenz
Mögliche Probleme mit gewöhnlichen Binärbäumen
Rekursives Durchlaufen kann zu einem Stapelüberlauf führen
Die nicht rekursive Version macht das Programm möglicherweise weniger effizient
Es ist schwierig, den Vorgänger oder Nachfolger eines Knotens in einer bestimmten Traversierungsform zu finden.
Es gibt eine große Anzahl von Nullzeigerfeldern im Baum, die Verschwendung verursachen.
Hinweisprozess
Wenn der linke Zeiger eines Knotens leer ist, soll der Zeiger auf den Vorgängerknoten des Knotens zeigen, der beim Durchlaufen des Binärbaums auf eine bestimmte Weise erhalten wurde.
Wenn der rechte Zeiger eines Knotens null ist, soll der Zeiger auf den Nachfolgeknoten des Knotens zeigen, der durch Durchlaufen des Binärbaums gemäß einer bestimmten Durchlaufmethode erhalten wurde.
Hinweis-Flagge
Die Funktion besteht darin, zu unterscheiden, ob es sich um einen untergeordneten Knoten, einen Vorläufer oder einen Nachfolger handelt.
leftThread
0
leftChild
1
leftThread
rightThread
0
rightChild
1
rightThread
Hinweis
Zeiger auf den Vorgänger- oder Nachfolgerknoten im Knoten
Hinweis Binärbaum
Binärbaum mit Knoten des Binärbaums und Hinweisen
Der Prozess des Durchlaufens eines Binärbaums auf eine bestimmte Weise (Vorbestellung, In-Reihenfolge, Nachbestellung) macht ihn zu einem Clued-Binärbaum. Dies wird als Methode zum Einfädeln des Binärbaums bezeichnet.
Haufen
Heap-Konzept
Speichern Sie alle Elemente in einem eindimensionalen Array in Form eines vollständigen Binärbaums und erfüllen Sie Ki<=K2*i 1 und Ki<=K2*i 2 (Ki>=K2*i 1 und Ki>=K2*i 2 ), dieser Heap wird als Min-Heap (Max-Heap) bezeichnet.
Klassifizierung von Haufen
kleiner Haufen
Der Schlüsselcode jedes Knotens ist kleiner als der Schlüsselcode seiner linken und rechten Kinder. Der Schlüsselcode des Knotens oben im Heap ist der kleinste.
großer Haufen
Der Schlüsselcode jedes Knotens ist größer als der Schlüsselcode seiner linken und rechten Kinder. Der Schlüsselcode des Knotens oben im Heap ist der größte.
Eigenschaften des Heaps
Wenn i=0, ist Knoten i der Wurzelknoten und hat keinen übergeordneten Knoten, andernfalls ist der übergeordnete Knoten von Knoten i (i-1)/2
Wenn 2*i 1>n-1, dann hat Knoten i kein linkes Kind, andernfalls ist das linke Kind von Knoten i Knoten 2*i 1
Wenn 2*i 1>n-1, dann hat Knoten i kein linkes Kind, andernfalls ist das linke Kind von Knoten i Knoten 2*i 2
Heap-Erstellung
Von oben nach unten anpassen
Heap-Einfügung
Heap-Löschung
Heap-Anwendungen
Prioritätswarteschlange
Huffman-Baum
Konzept
Weg
Pfadlänge
Der Baum mit der kleinsten gewichteten Pfadlänge wird Huffman-Baum genannt
Konstruieren Sie einen Huffman-Baum
Konstruieren Sie einen Wald aus n Binärbäumen mit nur Wurzelknoten. Jeder Binärbaum hat nur einen Wurzelknoten mit einer Gewichtung.
Wiederholen Sie die folgenden Schritte, bis in F nur noch ein Baum übrig ist
Wählen Sie die beiden kleinsten im Binärbaumwald aus und erstellen Sie einen neuen Binärbaum als linken und rechten Teilbaum. Das Gewicht des Wurzelknotens des neuen Binärbaums ist die Summe der Gewichte der Wurzelknoten des linken und rechten Teilbaums .
Löschen Sie diese beiden Binärbäume im ursprünglichen Binärbaumwald
Fügen Sie einen neuen Binärbaum zur Binärbaum-Gesamtstruktur hinzu
Huffman-Codierung
Codierung
Bei der Datenkommunikation wird der übertragene Text häufig in eine Binärzeichenfolge umgewandelt, die aus den Binärzeichen 0 und 1 besteht. Dies wird als Kodierung bezeichnet.
Kodierung gleicher Länge
Codierung mit ungleicher Länge
Dateikomprimierung
binärer Suchbaum
Natur
Wenn der linke Teilbaum nicht leer ist, sind die Werte aller Knoten im linken Teilbaum kleiner als der Wert des Wurzelknotens
Sein rechter Teilbaum ist nicht leer, dann sind die Werte aller Knoten im rechten Teilbaum größer als der Wert des Wurzelknotens
Seine linken und rechten Teilbäume sind ebenfalls binäre Suchbäume.
arbeiten
suchen
Wenn der Wurzelknoten nicht leer ist
Schlüssel des Wurzelknotens==Schlüssel, der gefunden werden soll, gibt true zurück
Wurzelknotenschlüssel> Suchschlüssel, Suche im linken Teilbaum
Wurzelknotenschlüssel<Suchschlüssel, Suche im rechten Teilbaum
Andernfalls wird false zurückgegeben
einfügen
Überprüfen Sie zunächst, ob der Knoten bereits vorhanden ist. Wenn er vorhanden ist, fügen Sie ihn nicht ein.
Andernfalls fügen Sie das Element an der gefundenen Position ein
löschen
Stellen Sie zunächst fest, ob es sich im Baum befindet, ohne direkt zurückzukehren
Es gibt Situationen
Der zu löschende Knoten hat keine untergeordneten Knoten
Löschen Sie den Knoten direkt
Der zu löschende Knoten hat nur das linke Kind
Löschen Sie den Knoten und stellen Sie sicher, dass der übergeordnete Knoten des gelöschten Knotens auf den linken untergeordneten Knoten des gelöschten Knotens zeigt.
Der zu löschende Knoten hat nur das richtige Kind
Löschen Sie den Knoten und stellen Sie sicher, dass der übergeordnete Knoten des gelöschten Knotens auf den rechten untergeordneten Knoten des gelöschten Knotens zeigt.
Der zu löschende Knoten hat linke und rechte untergeordnete Knoten
Suchen Sie den ersten Knoten in der mittleren Reihenfolge (mit dem kleinsten Schlüsselcode) in seinem rechten Teilbaum, füllen Sie ihn mit seinem Wert in den gelöschten Knoten und behandeln Sie dann das Löschproblem des Knotens.
Leistungsanalyse des binären Suchbaums
Im schlimmsten Fall beträgt die durchschnittliche Suchlänge O(n). Im Allgemeinen beträgt die durchschnittliche Suchlänge O(lgn).
AVL-Baum
AVL-Baumeigenschaften
Seine linken und rechten Teilbäume sind beide AVL-Bäume
Der absolute Wert der Differenz zwischen den Höhen des linken Teilbaums und des rechten Teilbaums (als Ausgleichsfaktor bezeichnet) überschreitet nicht 1 (-1, 0, 1).
Wenn ein Baum sehr ausgeglichen ist, handelt es sich um einen AVL-Baum. Wenn es n Knoten hat, kann seine Höhe bei 0 (lgn) gehalten werden und die durchschnittliche Suchkomplexität beträgt O (lgn).
ausgewogene Rotation
linke Unirotation
rechte Unirotation
Doppelte Drehung nach links und rechts
Doppelte Rechts- und Linksdrehung
Einfügen eines AVL-Baums
Wenn es sich um einen leeren Baum handelt, ist er nach dem Einfügen der Wurzelknoten und gibt direkt nach dem Einfügen „true“ zurück.
Wenn der Baum nicht leer ist, suchen Sie nach der Einfügeposition. Wenn der Schlüssel während des Suchvorgangs gefunden wird, schlägt die Einfügung fehl und gibt direkt false zurück.
Knoten einfügen
Aktualisieren Sie den Ausgleichsfaktor und passen Sie den Baum an
Löschen des AVL-Baums
Der gelöschte Knoten hat nur das linke untergeordnete Element
Der Ausgleichsfaktor des übergeordneten Knotens beträgt 1 oder -1 und die Höhe des übergeordneten Knotens bleibt unverändert. Dann bleibt die Höhe aller Knoten vom übergeordneten Knoten bis zum Stamm unverändert und es ist keine Anpassung erforderlich.
Der gelöschte Knoten hat nur das richtige Kind
Der Gleichgewichtsfaktor des übergeordneten Knotens wird 0. Obwohl der mit dem übergeordneten Knoten verwurzelte Teilbaum ausgeglichen ist, wird seine Höhe um 1 verringert, aber das Gleichgewicht des übergeordneten Knotens muss überprüft werden.
Der gelöschte Knoten hat sowohl linke als auch rechte untergeordnete Knoten.
Ändern Sie, um den ersten Knoten q beim Durchlaufen in der Reihenfolge zu löschen
Wenn der Ausgleichsfaktor des übergeordneten Knotens 2 oder -2 beträgt, verringert sich die Anzahl der Zwerge und der übergeordnete Knoten ist unausgeglichen, was eine Ausgleichsrotation erfordert.
Die Wurzel des höheren Teilbaums des Elternteils ist q
Wenn der Ausgleichsfaktor von q 0 ist, führen Sie eine einzelne Schleife aus, um das übergeordnete Element wiederherzustellen
Wenn der Ausgleichsfaktor von q das gleiche Vorzeichen hat wie der Ausgleichsfaktor (positiv oder negativ) des übergeordneten Elements, führen Sie eine einzelne Schleife aus, um das übergeordnete Element wiederherzustellen.
Wenn der Ausgleichsfaktor von q das entgegengesetzte Vorzeichen (positiv oder negativ) als der Ausgleichsfaktor (positiv oder negativ) des übergeordneten Elements hat, führen Sie eine doppelte Drehung durch, um das übergeordnete Element wiederherzustellen.
roter schwarzer Baum
Konzept
Der Rot-Schwarz-Baum ist ein binärer Suchbaum. Er fügt jedem Knoten ein Speicherbit hinzu, um die Farbe des Knotens darzustellen, und stellt so sicher, dass der längste Pfad nicht das Doppelte des kürzesten Pfads überschreitet, was ungefähr ausgeglichen ist.
Natur
Jeder Knoten ist entweder rot oder schwarz
Der Wurzelknoten des Baums ist schwarz
Wenn ein Knoten rot ist, sind seine beiden untergeordneten Knoten schwarz (es gibt keine zwei aufeinanderfolgenden roten Knoten).
Für jeden Knoten enthalten die einfachen Pfade von diesem Knoten zu allen seinen untergeordneten Blattknoten die gleiche Anzahl schwarzer Knoten (die Anzahl schwarzer Knoten ist auf jedem Pfad gleich).
Jeder Blattknoten ist schwarz (Blattknoten beziehen sich hier auf leere Knoten)
Implementierung einfügen
Wenn der Baum leer ist, muss der neue Knoten nach dem Einfügen in Schwarz geändert werden.
Der übergeordnete Knoten des eingefügten Knotens ist schwarz und verletzt keine Eigenschaften. Er kann direkt eingefügt werden.
Situation drei
Situation vier
Situation fünf
löschen
verwenden
C STL-Bibliothek – Map/Set Multimap Multiset
Java-Bibliothek
Linux Kernel
einige andere Bibliotheken
Vergleich von Rot-Schwarz-Bäumen und AVL-Bäumen