Sobes.tech
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.