gpt4 book ai didi

algorithm - 戈朗 : benchmark Radix Tree Lookup

转载 作者:数据小太阳 更新时间:2023-10-29 03:27:13 27 4
gpt4 key购买 nike

为了练习 Golang,我一直在尝试对我编写的 Radix Tree 实现进行基准测试。

但我遇到了“我应该如何对其进行基准测试?”的问题。在下面的代码中显示了两种情况,或者说我想对 LookUp 函数进行基准测试的不同方式。

  • 情况 1:使用存在于树上的单个 byte slice 段,这意味着它将通过所有子节点等成功查找...

  • 情况 2:使用函数从树中的现有数据生成随机 slice ,这意味着它也将成功查找...

我知道花费的时间将取决于树的深度...我认为案例 2 是否接近现实世界的实现?

问题:哪种情况对基准测试更有效或更有用?

基准:

func BenchmarkLookUp(b *testing.B) {
radix := New()
insertData(radix, sampleData2)

textToLookUp := randomBytes()

for i := 0; i < b.N; i++ {
radix.LookUp(textToLookUp) // Case 1
//radix.LookUp(randomBytes()) // Case 2
}
}

func randomBytes() []byte {
strings := sampleData2()
return []byte(strings[random(0, len(strings))])
}

func sampleData2() []string {
return []string{
"romane",
"romanus",
"romulus",
...
}
}

结果案例 1:

PASS
BenchmarkLookUp-4 10000000 146 ns/op
ok github.com/falmar/goradix 2.068s
PASS
BenchmarkLookUp-4 10000000 149 ns/op
ok github.com/falmar/goradix 2.244s

结果案例 2:

PASS
BenchmarkLookUp-4 3000000 546 ns/op
ok github.com/falmar/goradix 3.094s
PASS
BenchmarkLookUp-4 3000000 538 ns/op
ok github.com/falmar/goradix 4.481s

没有匹配时的结果:

PASS
BenchmarkLookUp-4 10000000 194 ns/op
ok github.com/falmar/goradix 3.189s
PASS
BenchmarkLookUp-4 10000000 191 ns/op
ok github.com/falmar/goradix 3.243s

最佳答案

如果您的基准测试是随机的,那么将很难比较不同实现之间从一次运行到下一次运行的性能。

相反,静态实现几个不同的基准案例,强调算法的不同领域。这些案例应该代表不同的场景,例如没有匹配项的情况(因为您已经有),源数据中有很多项目将在查找中返回的情况,有很多项目的情况和只有 1 件商品将被退回,等等。

关于algorithm - 戈朗 : benchmark Radix Tree Lookup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37245579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com