Heim > Backend-Entwicklung > Golang > So implementieren Sie Min-Heap in der Go-Sprache

So implementieren Sie Min-Heap in der Go-Sprache

PHPz
Freigeben: 2023-03-30 09:48:13
Original
1111 Leute haben es durchsucht

Min-Heap ist eine Datenstruktur, mit der das kleinste Element schnell gefunden werden kann. In der Go-Sprache können wir das Heap-Paket verwenden, um einen minimalen Heap zu implementieren. In diesem Artikel werden wir detailliert beschreiben, wie man Min-Heap in der Go-Sprache implementiert.

Was ist ein Min-Heap?

Min Heap ist eine binäre Baumstruktur, die die folgenden zwei Bedingungen erfüllt:

  1. Der Wert des übergeordneten Knotens ist kleiner oder gleich dem Wert seines untergeordneten Knotens.
  2. Jedes Level wird von links nach rechts gefüllt.

Zum Beispiel ist das Folgende ein Min-Heap:

      2
    /   \
   5     3
  / \   / \
 7   6 8   4
Nach dem Login kopieren

In einem Min-Heap ist der Wurzelknoten immer das kleinste Element, daher beträgt die Zeitkomplexität zum Finden des Mindestwerts O(1). Die zeitliche Komplexität der Einfüge- und Löschvorgänge des minimalen Heaps beträgt O(log n).

Wie implementiert man Min-Heap?

In der Go-Sprache können wir das Heap-Paket verwenden, um einen minimalen Heap zu implementieren. Das Heap-Paket bietet die folgenden drei Methoden zum Implementieren des minimalen Heaps:

  1. Init: Initialisieren Sie einen leeren minimalen Heap.
  2. Push: Elemente in den Min-Heap einfügen.
  3. Pop: Entfernen Sie das kleinste Element aus dem Min-Heap und geben Sie es zurück.

Zuerst müssen wir eine Datenstruktur zum Speichern von Elementen definieren. In diesem Artikel verwenden wir den Typ int als Elemente. Da wir den Typ int in den Typ heap.Interface konvertieren müssen, müssen wir drei Methoden der Schnittstelle heap.Interface implementieren: Len, Less und Swap.

type MinHeap []int

func (h MinHeap) Len() int           { return len(h) }
func (h MinHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h MinHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }
Nach dem Login kopieren

Im obigen Code haben wir einen MinHeap-Typ definiert und die Methoden Len, Less und Swap implementiert. Die Len-Methode gibt die Anzahl der Elemente im minimalen Heap zurück, die Less-Methode vergleicht die Größen zweier Elemente und die Swap-Methode tauscht die Positionen zweier Elemente aus.

Als nächstes müssen wir die minimale Heap-Initialisierungsmethode implementieren. Wir können die Funktion heap.Init verwenden, um einen leeren Min-Heap zu initialisieren.

h := &MinHeap{}
heap.Init(h)
Nach dem Login kopieren

Jetzt haben wir einen leeren Min-Heap initialisiert. Als nächstes können wir die Funktion heap.Push verwenden, um Elemente einzufügen.

heap.Push(h, 2)
heap.Push(h, 5)
heap.Push(h, 3)
heap.Push(h, 7)
heap.Push(h, 6)
heap.Push(h, 8)
heap.Push(h, 4)
Nach dem Login kopieren

Im obigen Code verwenden wir die Funktion heap.Push, um Elemente in den Min-Heap einzufügen.

Wir können auch die Funktion heap.Pop verwenden, um das kleinste Element zu entfernen und zurückzugeben.

for h.Len() > 0 {
     fmt.Printf("%d ", heap.Pop(h))
}
Nach dem Login kopieren

Im obigen Code verwenden wir die Schleife und die Funktion heap.Pop, um alle Elemente im Min-Heap auszugeben.

Vollständiger Code:

package main

import (
    "container/heap"
    "fmt"
)

type MinHeap []int

func (h MinHeap) Len() int           { return len(h) }
func (h MinHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h MinHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }

func (h *MinHeap) Push(x interface{}) {
    *h = append(*h, x.(int))
}

func (h *MinHeap) Pop() interface{} {
    old := *h
    n := len(old)
    x := old[n-1]
    *h = old[0 : n-1]
    return x
}

func main() {
    h := &MinHeap{}
    heap.Init(h)

    heap.Push(h, 2)
    heap.Push(h, 5)
    heap.Push(h, 3)
    heap.Push(h, 7)
    heap.Push(h, 6)
    heap.Push(h, 8)
    heap.Push(h, 4)

    for h.Len() > 0 {
        fmt.Printf("%d ", heap.Pop(h))
    }
}
Nach dem Login kopieren

Im obigen Code implementieren wir zusätzlich zur Implementierung der Methoden Len, Less und Swap auch die Methoden Push und Pop. Die Push-Methode fügt ein Element in den Min-Heap ein, und die Pop-Methode entfernt das Element aus dem Min-Heap und gibt das kleinste Element zurück.

Zusammenfassung

Dieser Artikel stellt vor, wie man einen minimalen Heap in der Go-Sprache implementiert. Mithilfe der vom Heap-Paket bereitgestellten Funktionen können wir beim Einfügen und Löschen von Elementen schnell einen Min-Heap mit einer Zeitkomplexität von O(log n) implementieren. Wenn Sie andere Heap-Typen implementieren müssen, lesen Sie bitte die Dokumentation des Heap-Pakets.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie Min-Heap in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage