A pure Clojure implementation of heap.
Import it using
(require '[heap.core :as heap])
Or
Copy the source code in src/clojure/heap/core.clj to your project.
Equal to the theoretical limit.
Single add: O(logn)
Single poll: O(logn)
Space: n
heapCreate a heap with a comparator[ and an entry]. O(1)
| Argument | Type | Function | Remarks | 
|---|---|---|---|
comparator | Function | A comparator function, deciding a max / min heap | Two arguments. Return true on matching the condition, false otherwise | 
[value] | Any | The first entry of the heap | 
Example
;; define a max heap containing maps
(def x (heap (fn [a b] (> (:id a) (:id b))) {:id 3}))
;; without initial value
(def x (heap (fn [a b] (> (:id a) (:id b)))))
get-sizeGet the size (length) of heap. O(1)
| Argument | Type | Function | Remarks | 
|---|---|---|---|
heap | heap.core.Heap | A heap object | 
Example
(def x (heap (fn [a b] (> (:id a) (:id b))) {:id 3}))
(get-size x)
;; return 1
peekGet the top value of the heap. If it is a min heap, return the smallest value; otherwise return the largest value. Return nil if the heap is empty. O(1)
| Argument | Type | Function | Remarks | 
|---|---|---|---|
heap | heap.core.Heap | A heap object | 
Example
(def x (heap (fn [a b] (> (:id a) (:id b))) {:id 3}))
(peek x)
;; return {:id 3}
addInsert an entry to the heap. The heap will be reorganized to fit the new value. O(logn), n = size of the heap
| Argument | Type | Function | Remarks | 
|---|---|---|---|
heap | heap.core.Heap | A heap object | |
value | Any | The value to be inserted to the heap | Should be applicable as one argument of the comparator | 
Example
(def x (heap (fn [a b] (> (:id a) (:id b))) {:id 3}))
(push x {:id 4})
(get-size x)
;; return 2
pollDelete and return the top value of the heap. If it is a min heap, return the smallest value; otherwise return the largest value. O(logn), n = size of the heap
| Argument | Type | Function | Remarks | 
|---|---|---|---|
heap | heap.core.Heap | A heap object | 
Example
(def x (heap (fn [a b] (> (:id a) (:id b))) {:id 3}))
(pop x)
;; return {:id 3}
(pop x)
;; return nil
Can you improve this documentation? These fine people already did:
Yuchen Liu, jiarui0000, Zhu Jiarui & clojure-financeEdit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs | 
| ← | Move to previous article | 
| → | Move to next article | 
| Ctrl+/ | Jump to the search field |