


JavaScript-Datenstrukturen und -Algorithmen, Diagramme und Diagrammalgorithmen_Grundkenntnisse
Definition des Diagramms
Der Graph besteht aus einer endlichen, nicht leeren Menge von Scheitelpunkten und einer Menge von Kanten zwischen den Scheitelpunkten. Er wird normalerweise ausgedrückt als: G(V,E), wobei G einen Graphen darstellt und V der Scheitelpunkt des Graphen G ist . Menge, E ist die Menge der Kanten im Graphen G.
Gerichteter Graph
Gerichtete Kante: Wenn die Kante vom Scheitelpunkt Vi nach Vj eine Richtung hat, wird diese Kante als gerichtete Kante oder auch als Bogen (Arc) bezeichnet und durch ein geordnetes Paar
Ungeordneter Graph
Ungerichtete Kante: Wenn die Kante zwischen den Eckpunkten Vi und Vj keine Richtung hat, wird diese Kante als ungerichtete Kante (Kante) bezeichnet und durch ein ungeordnetes Paar (Vi, Vj) dargestellt.
Einfaches Bild
Einfaches Diagramm: Wenn in der Diagrammstruktur keine Kante von einem Scheitelpunkt zu sich selbst vorhanden ist und dieselbe Kante nicht wiederholt erscheint, wird ein solches Diagramm als einfaches Diagramm bezeichnet.
Grafiken
stellt den Scheitelpunkt
darDer erste Schritt beim Erstellen einer Diagrammklasse besteht darin, eine Vertex-Klasse zu erstellen, um Scheitelpunkte und Kanten zu speichern. Die Funktion dieser Klasse ist dieselbe wie die der Knotenklasse der verknüpften Liste und des binären Suchbaums. Die Vertex-Klasse verfügt über zwei Datenelemente: eines, das den Vertex identifiziert, und einen booleschen Wert, der angibt, ob er besucht wurde. Sie heißen label bzw. wasVisited.
Funktion Vertex(label){
This.label = label;
}
Wir speichern alle Scheitelpunkte in einem Array und in der Graph-Klasse können sie anhand ihrer Position im Array referenziert werden
stellt eine Kante dar
Die eigentlichen Informationen des Diagramms werden an den „Kanten“ gespeichert, da sie die Struktur des Diagramms beschreiben. Ein übergeordneter Knoten eines Binärbaums kann nur zwei untergeordnete Knoten haben, aber die Struktur des Diagramms ist viel flexibler. Mit einem Scheitelpunkt können eine Kante oder mehrere Kanten verbunden sein.
Wir nennen die Methode zur Darstellung der Kanten eines Diagramms eine Adjazenzliste oder ein Adjazenzlisten-Array. Es wird ein Array gespeichert, das aus einer Liste benachbarter Scheitelpunkte eines Scheitelpunkts besteht
Konstruktionsdiagramm
Definieren Sie eine Graph-Klasse wie folgt:
Funktion Graph(v){
This.vertices = v;//höchster Punkt der Vertices
This.edges = 0;
This.adj = [];
for(var i =0;I
This.adj[i].push('');
}
This.addEdge = addEdge;
This.toString = toString;
}
Diese Klasse zeichnet auf, wie viele Kanten ein Diagramm darstellt, und zeichnet die Anzahl der Scheitelpunkte mithilfe einer Länge und der Anzahl der Scheitelpunkte im Diagramm auf.
Funktion addEdge(){
This.adj[v].push(w);
This.adj[w].push(v);
This.edges ;
}
Hier verwenden wir eine for-Schleife, um jedem Element im Array ein Unterarray hinzuzufügen, um alle angrenzenden Scheitelpunkte zu speichern, und alle Elemente mit leeren Zeichenfolgen zu initialisieren.
Diagrammdurchlauf
Tiefendurchquerung
DepthFirstSearch, auch Tiefensuche genannt, wird als DFS bezeichnet.
Wenn Sie beispielsweise nach einem Schlüssel in einem Zimmer suchen, können Sie von jedem Raum aus nacheinander die Ecken, Nachttische, Betten, Unterbetten, Kleiderschränke, Fernsehschränke usw. durchsuchen , um keine Sackgasse zu verpassen, suchen Sie nach dem Durchsuchen aller Schubladen und Lagerschränke nach dem nächsten Raum.
Tiefensuche:
Die Tiefensuche besteht darin, einen nicht besuchten Scheitelpunkt zu besuchen, ihn als besucht zu markieren und dann rekursiv auf andere nicht besuchte Scheitelpunkte in der Adjazenzliste des ursprünglichen Scheitelpunkts zuzugreifen
Fügen Sie ein Array zur Graph-Klasse hinzu:
this.marked = [];//Speichern Sie die besuchten Scheitelpunkte
for(var i=0;i
}
Tiefensuchfunktion:
Funktion dfs(v){
This.marked[v] = true;
//Die if-Anweisung ist hier nicht erforderlich
If(this.adj[v] != undefiniert){
print("Besuchter Scheitelpunkt: " v );
for every(var w in this.adj[v]){
If(!this.marked[w]){
This.dfs(w);
}
}
}
}
Breitensuche
Die Breitensuche (BFS) ist eine blinde Suchmethode, die darauf abzielt, alle Knoten im Diagramm systematisch zu erweitern und zu untersuchen, um Ergebnisse zu finden. Mit anderen Worten: Es berücksichtigt nicht die möglichen Positionen der Ergebnisse und durchsucht das gesamte Diagramm gründlich, bis die Ergebnisse gefunden werden.
Die Breitensuche beginnt am ersten Scheitelpunkt und versucht, Scheitelpunkte so nah wie möglich daran zu finden, wie unten gezeigt:
Sein Funktionsprinzip ist:
1. Suchen Sie zunächst die nicht besuchten Scheitelpunkte neben dem aktuellen Scheitelpunkt und fügen Sie sie der Liste und Warteschlange der besuchten Scheitelpunkte hinzu
2. Nehmen Sie dann den nächsten Scheitelpunkt v aus dem Diagramm und fügen Sie ihn der Liste der besuchten Scheitelpunkte
hinzu
3. Fügen Sie schließlich alle nicht besuchten Scheitelpunkte neben v zur Warteschlange hinzu
Im Folgenden finden Sie die Definition der Breitensuchfunktion:
var queue = [];
This.marked = true;
Queue.push(s);//Am Ende der Warteschlange hinzufügen
While(queue.length>0){
var v = queue.shift();//Vom Kopf der Warteschlange entfernen
If(v == undefiniert){
print("Visited vertex: " v);
}
for every(var w in this.adj[v]){
If(!this.marked[w]){
This.edgeTo[w] = v;
This.marked[w] = true;
queue.push(w);
}
}
}
}
Kürzester Weg
Bei der Durchführung einer Breitensuche wird automatisch der kürzeste Weg von einem Scheitelpunkt zu einem anderen verbundenen Scheitelpunkt gefunden
Bestimmen Sie den Weg
Um den kürzesten Pfad zu finden, müssen Sie den Breitensuchalgorithmus ändern, um den Pfad von einem Scheitelpunkt zum anderen aufzuzeichnen. Wir benötigen ein Array, um alle Kanten von einem Scheitelpunkt zum nächsten zu speichern Array-EdgeTo
this.edgeTo = [];//Füge diese Zeile zur Graph-Klasse hinzu
//bfs-Funktion
Funktion bfs(s){
var queue = [];
This.marked = true;
Queue.push(s);//Am Ende der Warteschlange hinzufügen
While(queue.length>0){
var v = queue.shift();//Vom Kopf der Warteschlange entfernen
If(v == undefiniert){
print("Visited vertex: " v);
}
for every(var w in this.adj[v]){
If(!this.marked[w]){
This.edgeTo[w] = v;
This.marked[w] = true;
queue.push(w);
}
}
}
}
Topologischer Sortieralgorithmus
Topologische Sortierung sortiert alle Scheitelpunkte des gerichteten Graphen so, dass die gerichteten Kanten von den vorherigen Scheitelpunkten zu den späteren Scheitelpunkten zeigen.
Der topologische Sortieralgorithmus ähnelt BFS. Der Unterschied besteht darin, dass der topologische Sortieralgorithmus die besuchten Scheitelpunkte nicht sofort ausgibt. Stattdessen werden alle benachbarten Scheitelpunkte in der Adjazenzliste des aktuellen Scheitelpunkts aufgerufen Die Liste ist im Stapel erschöpft.
Der topologische Sortieralgorithmus ist in zwei Funktionen unterteilt: topSort(), mit der der Sortiervorgang eingerichtet und eine Hilfsfunktion topSortHelper() aufgerufen und dann die sortierte Scheitelpunktliste angezeigt wird
Die Hauptarbeit des topologischen Sortieralgorithmus wird in der rekursiven Funktion topSortHelper() abgeschlossen. Diese Funktion markiert den aktuellen Scheitelpunkt als besucht und greift dann rekursiv auf jeden Scheitelpunkt in der aktuellen Scheitelpunkt-Nachbarschaftsliste zu, um diese Scheitelpunkte als besucht zu markieren. Abschließend wird der aktuelle Scheitelpunkt auf den Stapel verschoben.
//topSort()-Funktion
Funktion topSort(){
var stack = [];
var besuchte = [];
for(var i =0;i
}
for(var i = 0;i
This.topSortHelper(i,visited,stack);
}
}
for(var i = 0;i
print(this.vertexList[stack[i]]);
}
}
}
//topSortHelper()-Funktion
Funktion topSortHelper(v,visited,stack){
besuchte[v] = true;
for every(var w in this.adj[v]){
If(!visited[w]){
This.topSortHelper(visited[w],visited,stack);
}
}
stack.push(v);
}

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Zu den häufigsten Herausforderungen, mit denen Algorithmen für maschinelles Lernen in C++ konfrontiert sind, gehören Speicherverwaltung, Multithreading, Leistungsoptimierung und Wartbarkeit. Zu den Lösungen gehören die Verwendung intelligenter Zeiger, moderner Threading-Bibliotheken, SIMD-Anweisungen und Bibliotheken von Drittanbietern sowie die Einhaltung von Codierungsstilrichtlinien und die Verwendung von Automatisierungstools. Praktische Fälle zeigen, wie man die Eigen-Bibliothek nutzt, um lineare Regressionsalgorithmen zu implementieren, den Speicher effektiv zu verwalten und leistungsstarke Matrixoperationen zu nutzen.

Die unterste Ebene der C++-Sortierfunktion verwendet die Zusammenführungssortierung, ihre Komplexität beträgt O(nlogn) und bietet verschiedene Auswahlmöglichkeiten für Sortieralgorithmen, einschließlich schneller Sortierung, Heap-Sortierung und stabiler Sortierung.

01Ausblicksübersicht Derzeit ist es schwierig, ein angemessenes Gleichgewicht zwischen Detektionseffizienz und Detektionsergebnissen zu erreichen. Wir haben einen verbesserten YOLOv5-Algorithmus zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern entwickelt, der mehrschichtige Merkmalspyramiden, Multierkennungskopfstrategien und hybride Aufmerksamkeitsmodule verwendet, um die Wirkung des Zielerkennungsnetzwerks in optischen Fernerkundungsbildern zu verbessern. Laut SIMD-Datensatz ist der mAP des neuen Algorithmus 2,2 % besser als YOLOv5 und 8,48 % besser als YOLOX, wodurch ein besseres Gleichgewicht zwischen Erkennungsergebnissen und Geschwindigkeit erreicht wird. 02 Hintergrund und Motivation Mit der rasanten Entwicklung der Fernerkundungstechnologie wurden hochauflösende optische Fernerkundungsbilder verwendet, um viele Objekte auf der Erdoberfläche zu beschreiben, darunter Flugzeuge, Autos, Gebäude usw. Objekterkennung bei der Interpretation von Fernerkundungsbildern

Bei der Verwendung komplexer Datenstrukturen in Java wird Comparator verwendet, um einen flexiblen Vergleichsmechanismus bereitzustellen. Zu den spezifischen Schritten gehören: Definieren einer Komparatorklasse und Umschreiben der Vergleichsmethode, um die Vergleichslogik zu definieren. Erstellen Sie eine Komparatorinstanz. Verwenden Sie die Methode „Collections.sort“ und übergeben Sie die Sammlungs- und Komparatorinstanzen.

1. Hintergrund des Baus der 58-Portrait-Plattform Zunächst möchte ich Ihnen den Hintergrund des Baus der 58-Portrait-Plattform mitteilen. 1. Das traditionelle Denken der traditionellen Profiling-Plattform reicht nicht mehr aus. Der Aufbau einer Benutzer-Profiling-Plattform basiert auf Data-Warehouse-Modellierungsfunktionen, um Daten aus mehreren Geschäftsbereichen zu integrieren, um genaue Benutzerporträts zu erstellen Und schließlich muss es über Datenplattformfunktionen verfügen, um Benutzerprofildaten effizient zu speichern, abzufragen und zu teilen sowie Profildienste bereitzustellen. Der Hauptunterschied zwischen einer selbst erstellten Business-Profiling-Plattform und einer Middle-Office-Profiling-Plattform besteht darin, dass die selbst erstellte Profiling-Plattform einen einzelnen Geschäftsbereich bedient und bei Bedarf angepasst werden kann. Die Mid-Office-Plattform bedient mehrere Geschäftsbereiche und ist komplex Modellierung und bietet allgemeinere Funktionen. 2.58 Benutzerporträts vom Hintergrund der Porträtkonstruktion im Mittelbahnsteig 58

Datenstrukturen und Algorithmen sind die Grundlage der Java-Entwicklung. In diesem Artikel werden die wichtigsten Datenstrukturen (wie Arrays, verknüpfte Listen, Bäume usw.) und Algorithmen (wie Sortier-, Such-, Diagrammalgorithmen usw.) ausführlich untersucht. Diese Strukturen werden anhand praktischer Beispiele veranschaulicht, darunter die Verwendung von Arrays zum Speichern von Bewertungen, verknüpfte Listen zum Verwalten von Einkaufslisten, Stapel zum Implementieren von Rekursionen, Warteschlangen zum Synchronisieren von Threads sowie Bäume und Hash-Tabellen für schnelle Suche und Authentifizierung. Wenn Sie diese Konzepte verstehen, können Sie effizienten und wartbaren Java-Code schreiben.

Autor |. Rezensiert von Wang Hao |. Die Chonglou News App ist eine wichtige Möglichkeit für Menschen, Informationsquellen in ihrem täglichen Leben zu erhalten. Zu den beliebten ausländischen Nachrichten-Apps gehörten um 2010 Zite und Flipboard, während es sich bei den beliebten inländischen Nachrichten-Apps hauptsächlich um die vier großen Portale handelte. Mit der Beliebtheit der von Toutiao vertretenen Nachrichtenempfehlungsprodukte der neuen Ära sind Nachrichten-Apps in eine neue Ära eingetreten. Was Technologieunternehmen angeht, egal um welches Unternehmen es sich handelt, solange sie die hochentwickelte Nachrichtenempfehlungsalgorithmus-Technologie beherrschen, werden sie grundsätzlich die Initiative und Mitsprache auf technischer Ebene haben. Werfen wir heute einen Blick auf einen Beitrag zum RecSys2023 Best Long Paper Nomination Award – GoingBeyondLocal:GlobalGraph-EnhancedP

Der AVL-Baum ist ein ausgewogener binärer Suchbaum, der schnelle und effiziente Datenoperationen gewährleistet. Um ein Gleichgewicht zu erreichen, führt es Links- und Rechtsdrehungen durch und passt Teilbäume an, die das Gleichgewicht verletzen. AVL-Bäume nutzen den Höhenausgleich, um sicherzustellen, dass die Höhe des Baums im Verhältnis zur Anzahl der Knoten immer klein ist, wodurch Suchoperationen mit logarithmischer Zeitkomplexität (O(logn)) erreicht werden und die Effizienz der Datenstruktur auch bei großen Datensätzen erhalten bleibt.
