实现 PriorityQueue Test Benchmark

This commit is contained in:
2019-04-08 02:11:37 +08:00
parent 09dbba1a88
commit 9e2bdb12dd
9 changed files with 289 additions and 166 deletions

View File

@@ -436,8 +436,9 @@ func (tree *Tree) Put(key interface{}) {
if cur.size > 8 {
factor := cur.size / 10 // or factor = 1
if cur.children[1].size >= cur.children[0].size*2+factor || cur.children[0].size >= cur.children[1].size*2+factor {
tree.fixSize(cur)
ls, rs := cur.children[0].size, cur.children[1].size
if rs >= ls*2+factor || ls >= rs*2+factor {
tree.fixSize(cur, ls, rs)
}
}
@@ -866,16 +867,17 @@ func (tree *Tree) fixSizeWithRemove(cur *Node) {
cur.size--
if cur.size > 8 {
factor := cur.size / 10 // or factor = 1
if cur.children[1].size >= cur.children[0].size*2+factor || cur.children[0].size >= cur.children[1].size*2+factor {
tree.fixSize(cur)
ls, rs := getChildrenSize(cur)
if rs >= ls*2+factor || ls >= rs*2+factor {
tree.fixSize(cur, ls, rs)
}
}
cur = cur.parent
}
}
func (tree *Tree) fixSize(cur *Node) {
if cur.children[0].size > cur.children[1].size {
func (tree *Tree) fixSize(cur *Node, ls, rs int) {
if ls > rs {
llsize, lrsize := getChildrenSize(cur.children[0])
if lrsize > llsize {
tree.rlrotate(cur)

View File

@@ -319,13 +319,13 @@ func TestTravalsal(t *testing.T) {
func TestRemoveAll(t *testing.T) {
ALL:
for c := 0; c < 5000; c++ {
for c := 0; c < 10000; c++ {
tree := New(compare.Int)
gods := avltree.NewWithIntComparator()
var l []int
m := make(map[int]int)
for i := 0; len(l) < 20; i++ {
for i := 0; len(l) < 100; i++ {
v := randomdata.Number(0, 100000)
if _, ok := m[v]; !ok {
m[v] = v
@@ -335,7 +335,7 @@ ALL:
}
}
for i := 0; i < 20; i++ {
for i := 0; i < 100; i++ {
tree.Remove(l[i])
gods.Remove(l[i])
@@ -391,6 +391,23 @@ ALL:
}
}
func BenchmarkSkipRemove(b *testing.B) {
sl := skiplist.New(skiplist.Int)
l := loadTestData()
b.N = len(l)
for _, v := range l {
sl.Set(v, v)
}
b.ResetTimer()
b.StartTimer()
for _, v := range l {
sl.Remove(v)
}
}
func BenchmarkSkipListGet(b *testing.B) {
sl := skiplist.New(skiplist.Int)
l := loadTestData()