


Detaillierte grafische Erläuterung des Heap-Sort-Heap-Sortieralgorithmus und der JavaScript-Code-Implementierung_Grundkenntnisse
1. Ich muss über Binärbäume sprechen
Um den Heap zu verstehen, müssen Sie zunächst den Binärbaum verstehen. In der Informatik ist ein Binärbaum eine Baumstruktur, in der jeder Knoten höchstens zwei Unterbäume hat. Normalerweise werden Teilbäume als „linker Teilbaum“ und „rechter Teilbaum“ bezeichnet. Binärbäume werden häufig zur Implementierung binärer Suchbäume und binärer Heaps verwendet.
Jeder Knoten eines Binärbaums hat höchstens zwei Teilbäume (es gibt keine Knoten mit einem Grad größer als 2). Die Teilbäume eines Binärbaums sind in linke und rechte Teilbäume unterteilt, und die Reihenfolge kann nicht umgekehrt werden. Die i-te Ebene eines Binärbaums hat höchstens 2i – 1 Knoten; ein Binärbaum mit der Tiefe k hat höchstens 2k – 1 Knoten für jeden Binärbaum T, wenn die Anzahl der Endknoten n0 ist mit Grad 2 ist n2, dann ist n0 = n2 + 1.
Drei Hauptunterschiede zwischen Bäumen und Binärbäumen:
Die Anzahl der Knoten eines Baums muss mindestens 1 betragen, während die Anzahl der Knoten eines Binärbaums 0 betragen kann
Es gibt keine Begrenzung für den maximalen Grad eines Knotens in einem Baum, während der maximale Grad eines Knotens in einem Binärbaum 2 beträgt
Die Knoten des Baums sind nicht in links und rechts unterteilt, während die Knoten des Binärbaums in links und rechts unterteilt sind
Binärbäume werden in vollständige Binärbäume und vollständige Binärbäume unterteilt
Vollständiger Binärbaum: Ein Baum mit der Tiefe k und 2k – 1 Knoten wird als vollständiger Binärbaum bezeichnet
(vollständiger Binärbaum mit Tiefe 3)
Vollständiger Binärbaum: Ein Binärbaum mit der Tiefe k und n Knoten. Genau dann, wenn jeder seiner Knoten den Knoten mit den Nummern 1 bis n im vollständigen Binärbaum mit der Tiefe k entspricht, wird er als vollständiger Binärbaum bezeichnet
(vollständiger Binärbaum mit Tiefe 3)
2. Was ist ein Haufen?
Ein Heap (Binärheap) kann als vollständiger Binärbaum betrachtet werden. Eine „ausgezeichnete“ Eigenschaft eines vollständigen Binärbaums ist, dass jede Ebene außer der untersten Ebene voll ist, wodurch der Heap Arrays zur Darstellung (gewöhnlich) verwenden kann Binärbäume werden normalerweise durch verknüpfte Listen als Basiscontainer dargestellt. Jeder Knoten entspricht einem Element im Array.
Wie unten gezeigt, handelt es sich um die Beziehung zwischen einem Heap und einem Array
(Zusammenhang zwischen Heap und Array)
Für einen gegebenen Index i eines Knotens können die Indizes des übergeordneten Knotens und des untergeordneten Knotens dieses Knotens einfach berechnet werden:
Parent(i) = floor(i/2), der Index des übergeordneten Knotens von i
Left(i) = 2i, der Index des linken untergeordneten Knotens von i
Right(i) = 2i + 1, i ist der Index des rechten untergeordneten Knotens
Binäre Heaps werden im Allgemeinen in zwei Typen unterteilt: maximaler Heap und minimaler Heap.
Maximaler Heap:
Der maximale Elementwert im Max-Heap erscheint am Wurzelknoten (oben im Heap)
Der Elementwert jedes übergeordneten Knotens im Heap ist größer oder gleich seinem untergeordneten Knoten (falls vorhanden)
(maximaler Heap)
Mindestheap:
Der kleinste Elementwert im Min-Heap erscheint am Wurzelknoten (oben im Heap)
Der Elementwert jedes übergeordneten Knotens im Heap ist kleiner oder gleich seinem untergeordneten Knoten (falls vorhanden)
(min. Heap)
3. Heap-Sortierprinzip
Heap-Sortierung besteht darin, die maximale Anzahl an der Spitze des Heaps zu entfernen, den verbleibenden Heap weiter an den maximalen Heap anzupassen und die maximale Anzahl an der Spitze des Heaps erneut zu entfernen. Dieser Vorgang wird bis dahin fortgesetzt ist nur noch eine Zahl übrig. Definieren Sie die folgenden Operationen auf dem Heap:
Max-Heapify: Passen Sie die untergeordneten Endknoten des Heaps so an, dass die untergeordneten Knoten immer kleiner sind als der übergeordnete Knoten
Erstellen Sie einen maximalen Heap (Build-Max-Heap): Ordnen Sie alle Daten im Heap neu an, um ihn zu einem maximalen Heap zu machen
Heap-Sortierung: Entfernen Sie den Wurzelknoten der ersten Daten und führen Sie eine rekursive Operation zur maximalen Heap-Anpassung durch
Bevor wir mit der folgenden Diskussion fortfahren, muss darauf hingewiesen werden, dass Arrays alle nullbasiert sind, was bedeutet, dass sich unser Heap-Datenstrukturmodell ändern wird
(Nullbasiert)
Dementsprechend müssen auch einige Berechnungsformeln entsprechend angepasst werden:
Parent(i) = floor((i-1)/2), der Index des übergeordneten Knotens von i
Left(i) = 2i + 1, i ist der Index des linken untergeordneten Knotens
Right(i) = 2(i + 1), i ist der Index des rechten untergeordneten Knotens
Die Funktion der maximalen Heap-Anpassung (MAX-HEAPIFY) besteht darin, die Eigenschaften des maximalen Heaps beizubehalten und ist die Kernunterroutine zum Erstellen des maximalen Heaps. Der Funktionsprozess ist wie in der Abbildung dargestellt:
(Max-Heapify)
Da der Heap nach einer Anpassung immer noch gegen die Heap-Eigenschaften verstößt, sind rekursive Tests erforderlich, um sicherzustellen, dass der gesamte Heap die Heap-Eigenschaften erfüllt. Dies kann in JavaScript wie folgt ausgedrückt werden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
Im Allgemeinen wird Rekursion hauptsächlich in der Divide-and-Conquer-Methode verwendet, Divide-and-Conquer ist hier jedoch nicht erforderlich. Darüber hinaus erfordern rekursive Aufrufe das Schieben/Löschen des Stapels, was im Vergleich zur Iteration einen leichten Leistungsnachteil mit sich bringt. Nach der 20/80-Regel kann dies natürlich ignoriert werden. Wenn Sie jedoch das Gefühl haben, dass Sie sich bei der Verwendung der Rekursion unwohl fühlen, können Sie auch die Iteration verwenden, z. B. die folgende:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
Die Funktion zum Erstellen eines maximalen Heaps (Build-Max-Heap) besteht darin, ein Array in einen maximalen Heap umzuwandeln. Er akzeptiert zwei Parameter: Array und Heap-Größe rufen Max-Heapify von unten auf top. Transformieren Sie das Array und erstellen Sie einen maximalen Heap. Da Max-Heapify sicherstellen kann, dass die Knoten nach dem Knoten mit dem Index i die maximale Heap-Eigenschaft erfüllen, kann ein Bottom-up-Aufruf von Max-Heapify diese Eigenschaft während des Transformationsprozesses beibehalten. Wenn die Anzahl der Elemente im maximalen Heap n beträgt, beginnt Build-Max-Heap bei Parent(n) und ruft Max-Heapify aufwärts auf. Der Vorgang ist wie folgt:
In JavaScript wie folgt beschrieben:
1 2 3 4 5 6 7 8 |
|
Heap-Sort ist der Schnittstellenalgorithmus der Heap-Sortierung, der zuerst Build-Max-Heap aufruft, um das Array in einen maximalen Heap umzuwandeln, dann die oberen und unteren Elemente des Heaps auszutauschen und dann das untere anzuheben Rufen Sie schließlich Max-Heapify auf, um die maximalen Heap-Eigenschaften beizubehalten. Da das oberste Element des Heaps das größte Element im Heap sein muss, wird nach einer Operation das größte im Heap vorhandene Element vom Heap getrennt. Nach n-1-maliger Wiederholung wird das Array angeordnet. Der gesamte Vorgang läuft wie folgt ab:
In JavaScript wie folgt beschrieben:
1 2 3 4 5 6 7 8 9 |
|
4.JavaScript-Sprachimplementierung
Abschließend organisieren Sie das Obige wie folgt in den vollständigen Javascript-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
5. Anwendung des Heap-Sortieralgorithmus
(1) Algorithmusleistung/-komplexität
Die zeitliche Komplexität der Heap-Sortierung ist sehr stabil (wir können sehen, dass sie nicht empfindlich auf die Eingabedaten reagiert) und ist O(n㏒n)-Komplexität. Der beste Fall ist derselbe wie der schlechteste Fall.
Die räumliche Komplexität variiert jedoch von Implementierung zu Implementierung. Zwei häufige Komplexitäten wurden oben diskutiert: O(n) und O(1). Im Einklang mit dem Prinzip der Platzersparnis empfehle ich die O(1)-Komplexitätsmethode.
(2) Algorithmusstabilität
Heap-Sortierung umfasst eine große Anzahl von Screening- und Verschiebungsprozessen und ist ein instabiler Sortieralgorithmus.
(3) Algorithmus-anwendbare Szenarien
Heap-Sortierung verursacht einen relativ großen Aufwand beim Einrichten und Anpassen des Heaps und ist nicht geeignet, wenn nur wenige Elemente vorhanden sind. Es ist jedoch immer noch eine gute Wahl, wenn viele Elemente vorhanden sind. Insbesondere bei der Lösung von Problemen wie „die ersten n größten Zahlen“ ist es fast der bevorzugte Algorithmus.

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

So implementieren Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem. Einführung: Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Spracherkennungstechnologie zu einem wichtigen Bestandteil des Bereichs der künstlichen Intelligenz geworden. Das auf WebSocket und JavaScript basierende Online-Spracherkennungssystem zeichnet sich durch geringe Latenz, Echtzeit und plattformübergreifende Eigenschaften aus und hat sich zu einer weit verbreiteten Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem implementieren.

Die Technologie zur Gesichtserkennung und -erkennung ist bereits eine relativ ausgereifte und weit verbreitete Technologie. Derzeit ist JS die am weitesten verbreitete Internetanwendungssprache. Die Implementierung der Gesichtserkennung und -erkennung im Web-Frontend hat im Vergleich zur Back-End-Gesichtserkennung Vor- und Nachteile. Zu den Vorteilen gehören die Reduzierung der Netzwerkinteraktion und die Echtzeiterkennung, was die Wartezeit des Benutzers erheblich verkürzt und das Benutzererlebnis verbessert. Die Nachteile sind: Es ist durch die Größe des Modells begrenzt und auch die Genauigkeit ist begrenzt. Wie implementiert man mit js die Gesichtserkennung im Web? Um die Gesichtserkennung im Web zu implementieren, müssen Sie mit verwandten Programmiersprachen und -technologien wie JavaScript, HTML, CSS, WebRTC usw. vertraut sein. Gleichzeitig müssen Sie auch relevante Technologien für Computer Vision und künstliche Intelligenz beherrschen. Dies ist aufgrund des Designs der Webseite erwähnenswert

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen in PHP und JS. Mit der rasanten Entwicklung des Internets und der Technologie ist der Aktienhandel für viele Anleger zu einer wichtigen Möglichkeit geworden. Die Aktienanalyse ist ein wichtiger Teil der Anlegerentscheidung, und Kerzendiagramme werden häufig in der technischen Analyse verwendet. Wenn Sie lernen, wie man Kerzendiagramme mit PHP und JS zeichnet, erhalten Anleger intuitivere Informationen, die ihnen helfen, bessere Entscheidungen zu treffen. Ein Candlestick-Chart ist ein technischer Chart, der Aktienkurse in Form von Candlesticks anzeigt. Es zeigt den Aktienkurs

Einführung in die Verwendung von JavaScript und WebSocket zur Implementierung eines Online-Bestellsystems in Echtzeit: Mit der Popularität des Internets und dem Fortschritt der Technologie haben immer mehr Restaurants damit begonnen, Online-Bestelldienste anzubieten. Um ein Echtzeit-Online-Bestellsystem zu implementieren, können wir JavaScript und WebSocket-Technologie verwenden. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation zwischen Client und Server in Echtzeit realisieren kann. Im Echtzeit-Online-Bestellsystem, wenn der Benutzer Gerichte auswählt und eine Bestellung aufgibt

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

Mit der rasanten Entwicklung der Internetfinanzierung sind Aktieninvestitionen für immer mehr Menschen zur Wahl geworden. Im Aktienhandel sind Kerzendiagramme eine häufig verwendete Methode der technischen Analyse. Sie können den sich ändernden Trend der Aktienkurse anzeigen und Anlegern helfen, genauere Entscheidungen zu treffen. In diesem Artikel werden die Entwicklungskompetenzen von PHP und JS vorgestellt, der Leser wird zum Verständnis des Zeichnens von Aktienkerzendiagrammen geführt und es werden spezifische Codebeispiele bereitgestellt. 1. Aktien-Kerzendiagramme verstehen Bevor wir uns mit dem Zeichnen von Aktien-Kerzendiagrammen befassen, müssen wir zunächst verstehen, was ein Kerzendiagramm ist. Candlestick-Charts wurden von den Japanern entwickelt

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest
