Junior — Middle
Heeft u ervaring met de datastructuur Heap?
sobes.tech AI
Antwoord van AI
Ja, ik heb ervaring met de heap-gegevensstructuur in Go. De standaardbibliotheek van Go bevat de "container/heap"-package, dat een interface biedt voor het implementeren van heaps (meestal min-heap of max-heap).
Een heap is een binaire boom die het mogelijk maakt om efficiënt het minimale (of maximale) element in O(1) te krijgen en elementen in O(log n) te plaatsen of te verwijderen.
Voorbeeld van het gebruik van een min-heap in Go:
package main
import (
"container/heap"
"fmt"
)
type IntHeap []int
func (h IntHeap) Len() int { return len(h) }
func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h *IntHeap) Push(x interface{}) {
*h = append(*h, x.(int))
}
func (h *IntHeap) Pop() interface{} {
old := *h
n := len(old)
x := old[n-1]
*h = old[0 : n-1]
return x
}
func main() {
h := &IntHeap{2, 1, 5}
heap.Init(h)
heap.Push(h, 3)
fmt.Printf("min: %d\n", (*h)[0])
for h.Len() > 0 {
fmt.Printf("%d ", heap.Pop(h))
}
}
Dit voorbeeld laat zien hoe je een min-heap maakt, elementen toevoegt en het minimale element eruit haalt.