add subset algorithm

This commit is contained in:
kevin
2020-08-06 23:06:26 +08:00
parent 63583d4744
commit f02eeef0f6
11 changed files with 93 additions and 73 deletions

View File

@@ -119,7 +119,7 @@ func TestConsistent_next(t *testing.T) {
m[val]++
}
entropy := mathx.CalcEntropy(m, total)
entropy := mathx.CalcEntropy(m)
assert.Equal(t, size, len(m))
assert.True(t, entropy > .95)

View File

@@ -237,7 +237,7 @@ func TestRoundRobin_initialize(t *testing.T) {
for k, v := range m {
mi[k] = v
}
entropy := mathx.CalcEntropy(mi, total)
entropy := mathx.CalcEntropy(mi)
assert.True(t, entropy > .95)
}
@@ -265,7 +265,7 @@ func TestRoundRobin_next(t *testing.T) {
m[val]++
}
entropy := mathx.CalcEntropy(m, total)
entropy := mathx.CalcEntropy(m)
assert.Equal(t, size, len(m))
assert.True(t, entropy > .95)

View File

@@ -47,7 +47,7 @@ func TestConsistentHash(t *testing.T) {
for k, v := range keys {
mi[k] = v
}
entropy := mathx.CalcEntropy(mi, requestSize)
entropy := mathx.CalcEntropy(mi)
assert.True(t, entropy > .95)
}

View File

@@ -2,9 +2,14 @@ package mathx
import "math"
func CalcEntropy(m map[interface{}]int, total int) float64 {
func CalcEntropy(m map[interface{}]int) float64 {
var entropy float64
var total int
for _, v := range m {
total += v
}
for _, v := range m {
proba := float64(v) / float64(total)
entropy -= proba * math.Log2(proba)

View File

@@ -13,5 +13,5 @@ func TestCalcEntropy(t *testing.T) {
for i := 0; i < total; i++ {
m[i] = count
}
assert.True(t, CalcEntropy(m, total*count) > .99)
assert.True(t, CalcEntropy(m) > .99)
}

View File

@@ -65,7 +65,7 @@ func TestUnstable_Distribution(t *testing.T) {
for k, v := range m {
mi[k] = v
}
entropy := CalcEntropy(mi, total)
entropy := CalcEntropy(mi)
assert.True(t, len(m) > 1)
assert.True(t, entropy > 0.95)
}