Heim Web-Frontend js-Tutorial Haufen | Priority Queue-Implementierung mit Javascript

Haufen | Priority Queue-Implementierung mit Javascript

Aug 21, 2024 pm 12:32 PM

Heap | Priority Queue Implementation using Javascript

Einführung

Ein Heap ist eine spezielle baumbasierte Datenstruktur, die die Heap-Eigenschaft erfüllt.
Es handelt sich um einen vollständigen Binärbaum, was bedeutet, dass alle Ebenen des Baums vollständig gefüllt sind, mit Ausnahme der letzten Ebene, die von links nach rechts gefüllt wird.

Es gibt zwei Arten von Heaps:

  1. maximaler Heap
  2. min. Heap.

Max. Heap:

In einem Max-Heap ist für jeden gegebenen Knoten I der Wert von I größer oder gleich den Werten seiner untergeordneten Knoten.
Diese Eigenschaft muss für alle Knoten im Binärbaum wahr sein. Der höchste Wert (Maximum) liegt an der Wurzel des Baumes.

Min. Heap:

In einem Min-Heap ist für jeden gegebenen Knoten I der Wert von I kleiner oder gleich den Werten seiner untergeordneten Knoten.
Diese Eigenschaft muss für alle Knoten im Binärbaum wahr sein. Der niedrigste Wert (Minimum) liegt an der Wurzel des Baums.

Wir können sie als Prioritätswarteschlange bezeichnen, da jedes Mal, wenn wir einen Einfüge- und Löschvorgang ausführen, ein BubbleUp bzw. BubbleDown erfolgt.

Wir können dasselbe in einem Array implementieren, aber wie berechnet man leftChildindex, rightChildIndex und parentIndex?

Formel

Ein Kind bekommen

2i+1(links)
2i+2 (rechts)

Um Eltern zu werden

i-1/2

Unten habe ich eine Implementierung von minHeap hinzugefügt, bitte überprüfen Sie.

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

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

class MinHeap {

    constructor() {

        this.data = [];

        this.length = 0;

    }

 

    insert(value) {

        this.data.push(value);

        this.length++;

        this.bubbleUp(this.length-1);

    }

 

    bubbleUp(index) {

 

        if (index == 0) {

            return ;

        }

 

        const parentIndex = this.getParentIndex(index);

        const parentValue = this.data[parentIndex];

        const value = this.data[index];

 

        if (parentValue > value) {

            this.data[parentIndex] = this.data[index];

            this.data[index] = parentValue;

 

            this.bubbleUp(parentIndex);

        }

    }

 

    getParentIndex(index) {

        return Math.floor((index-1)/2);

    }

 

    getLeftChildIndex(index) {

        return 2*index + 1;

    }

 

    getRightChildIndex(index) {

        return 2*index + 2;

    }

 

    bubbleDown(index) {

        if (index >= this.length) {

            return;

        }

 

        const lIndex = this.getLeftChildIndex(index);

        const rIndex = this.getRightChildIndex(index);

 

        const lValue = this.data[lIndex];

        const rValue = this.data[rIndex];

        const value = this.data[index];

 

        if (lValue < rValue && lValue < value) {

            // swap

            this.data[index] = this.data[lIndex];

            this.data[lIndex] = value;

            this.bubbleDown(lIndex);

        } else if (rValue < lValue && rValue < value) {

            this.data[index] = this.data[rIndex];

            this.data[rIndex] = value;

            this.bubbleDown(rIndex)

        }

    }

 

    delete() {

        if (this.length === 0) {

            return -1;

        }

 

        const out = this.data[0];

        if (this.length == 1) {

            this.data = [];

            this.length = 0;

            return out;

        }

 

        this.data[0] = this.data[this.length-1];

        this.length--;

        this.bubbleDown(0);

    }

}

 

const test = new MinHeap();

 

test.insert(50);

test.insert(100);

test.insert(101);

test.insert(20);

test.insert(110);

console.log(test)

test.delete();

console.log('---------After Delete -------')

console.log(test)

/*

MinHeap { data: [ 20, 50, 101, 100, 110 ], length: 5 }

---------After Delete -------

MinHeap { data: [ 50, 100, 101, 110, 110 ], length: 4 }

*/

Nach dem Login kopieren

Lassen Sie mich wissen, wenn Sie Fragen haben. Nehmen Sie einfach Kontakt auf.

Das obige ist der detaillierte Inhalt vonHaufen | Priority Queue-Implementierung mit Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ersetzen Sie Stringzeichen in JavaScript Ersetzen Sie Stringzeichen in JavaScript Mar 11, 2025 am 12:07 AM

Ersetzen Sie Stringzeichen in JavaScript

JQuery überprüfen, ob das Datum gültig ist JQuery überprüfen, ob das Datum gültig ist Mar 01, 2025 am 08:51 AM

JQuery überprüfen, ob das Datum gültig ist

JQuery Get Element Polsterung/Rand JQuery Get Element Polsterung/Rand Mar 01, 2025 am 08:53 AM

JQuery Get Element Polsterung/Rand

10 JQuery Accords Registerkarten 10 JQuery Accords Registerkarten Mar 01, 2025 am 01:34 AM

10 JQuery Accords Registerkarten

10 lohnt 10 lohnt Mar 01, 2025 am 01:29 AM

10 lohnt

HTTP-Debugging mit Knoten und HTTP-Konsole HTTP-Debugging mit Knoten und HTTP-Konsole Mar 01, 2025 am 01:37 AM

HTTP-Debugging mit Knoten und HTTP-Konsole

JQuery fügen Sie Scrollbar zu Div hinzu JQuery fügen Sie Scrollbar zu Div hinzu Mar 01, 2025 am 01:30 AM

JQuery fügen Sie Scrollbar zu Div hinzu

Benutzerdefinierte Google -Search -API -Setup -Tutorial Benutzerdefinierte Google -Search -API -Setup -Tutorial Mar 04, 2025 am 01:06 AM

Benutzerdefinierte Google -Search -API -Setup -Tutorial

See all articles