mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-27 00:30:18 +00:00
67 lines
1.9 KiB
Markdown
67 lines
1.9 KiB
Markdown
|
# GoLLRB
|
||
|
|
||
|
GoLLRB is a Left-Leaning Red-Black (LLRB) implementation of 2-3 balanced binary
|
||
|
search trees in Go Language.
|
||
|
|
||
|
## Overview
|
||
|
|
||
|
As of this writing and to the best of the author's knowledge,
|
||
|
Go still does not have a balanced binary search tree (BBST) data structure.
|
||
|
These data structures are quite useful in a variety of cases. A BBST maintains
|
||
|
elements in sorted order under dynamic updates (inserts and deletes) and can
|
||
|
support various order-specific queries. Furthermore, in practice one often
|
||
|
implements other common data structures like Priority Queues, using BBST's.
|
||
|
|
||
|
2-3 trees (a type of BBST's), as well as the runtime-similar 2-3-4 trees, are
|
||
|
the de facto standard BBST algoritms found in implementations of Python, Java,
|
||
|
and other libraries. The LLRB method of implementing 2-3 trees is a recent
|
||
|
improvement over the traditional implementation. The LLRB approach was
|
||
|
discovered relatively recently (in 2008) by Robert Sedgewick of Princeton
|
||
|
University.
|
||
|
|
||
|
GoLLRB is a Go implementation of LLRB 2-3 trees.
|
||
|
|
||
|
## Maturity
|
||
|
|
||
|
GoLLRB has been used in some pretty heavy-weight machine learning tasks over many gigabytes of data.
|
||
|
I consider it to be in stable, perhaps even production, shape. There are no known bugs.
|
||
|
|
||
|
## Installation
|
||
|
|
||
|
With a healthy Go Language installed, simply run `go get github.com/petar/GoLLRB/llrb`
|
||
|
|
||
|
## Example
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"github.com/petar/GoLLRB/llrb"
|
||
|
)
|
||
|
|
||
|
func lessInt(a, b interface{}) bool { return a.(int) < b.(int) }
|
||
|
|
||
|
func main() {
|
||
|
tree := llrb.New(lessInt)
|
||
|
tree.ReplaceOrInsert(1)
|
||
|
tree.ReplaceOrInsert(2)
|
||
|
tree.ReplaceOrInsert(3)
|
||
|
tree.ReplaceOrInsert(4)
|
||
|
tree.DeleteMin()
|
||
|
tree.Delete(4)
|
||
|
c := tree.IterAscend()
|
||
|
for {
|
||
|
u := <-c
|
||
|
if u == nil {
|
||
|
break
|
||
|
}
|
||
|
fmt.Printf("%d\n", int(u.(int)))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
## About
|
||
|
|
||
|
GoLLRB was written by [Petar Maymounkov](http://pdos.csail.mit.edu/~petar/).
|
||
|
|
||
|
Follow me on [Twitter @maymounkov](http://www.twitter.com/maymounkov)!
|