实现 PriorityQueue Test Benchmark
This commit is contained in:
@@ -433,8 +433,9 @@ func (tree *Tree) Put(key, value 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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -870,56 +871,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) fix3Size(cur *Node, lefts, rigths int) {
|
||||
if lefts > rigths {
|
||||
l := cur.children[0]
|
||||
llsize, lrsize := getChildrenSize(l)
|
||||
if lrsize > llsize {
|
||||
tree.rlrotate3(cur)
|
||||
} else {
|
||||
tree.rrotate3(cur)
|
||||
}
|
||||
} else {
|
||||
r := cur.children[1]
|
||||
rlsize, rrsize := getChildrenSize(r)
|
||||
if rlsize > rrsize {
|
||||
tree.lrrotate3(cur)
|
||||
} else {
|
||||
tree.lrotate3(cur)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (tree *Tree) fix6Size(cur *Node, lefts, rigths int) {
|
||||
if lefts > rigths {
|
||||
l := cur.children[0]
|
||||
llsize, lrsize := getChildrenSize(l)
|
||||
if lrsize > llsize {
|
||||
tree.rlrotate(cur)
|
||||
} else {
|
||||
tree.rrotate(cur)
|
||||
}
|
||||
} else {
|
||||
r := cur.children[1]
|
||||
rlsize, rrsize := getChildrenSize(r)
|
||||
if rlsize > rrsize {
|
||||
tree.lrrotate(cur)
|
||||
} else {
|
||||
tree.lrotate(cur)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
|
||||
@@ -325,7 +325,7 @@ ALL:
|
||||
var l []int
|
||||
m := make(map[int]int)
|
||||
|
||||
for i := 0; len(l) < 20; i++ {
|
||||
for i := 0; len(l) < 50; 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 < 50; i++ {
|
||||
|
||||
tree.Remove(l[i])
|
||||
gods.Remove(l[i])
|
||||
|
||||
Reference in New Issue
Block a user