我一直在嘗試對我為使用 Golang 練習(xí)而編寫的 Radix Tree 實(shí)現(xiàn)進(jìn)行基準(zhǔn)測試。但是我在“我應(yīng)該如何對其進(jìn)行基準(zhǔn)測試?”上遇到了一個問題。在下面的代碼中顯示了兩種情況,或者說我想對 LookUp 函數(shù)進(jìn)行基準(zhǔn)測試的不同方式。案例1:使用樹上存在的一個字節(jié)片,這意味著它將通過所有子節(jié)點(diǎn)等成功查找...案例 2:使用 func 從樹中的現(xiàn)有數(shù)據(jù)生成隨機(jī)切片,這意味著它也將成功查找...我知道時間花費(fèi)將取決于樹的深度......我認(rèn)為案例 2 是否接近現(xiàn)實(shí)世界的實(shí)現(xiàn)?問題:哪種情況對基準(zhǔn)測試更有效或更有用?基準(zhǔn):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", ... }}結(jié)果案例一:PASSBenchmarkLookUp-4 10000000 146 ns/opok github.com/falmar/goradix 2.068sPASSBenchmarkLookUp-4 10000000 149 ns/opok github.com/falmar/goradix 2.244s結(jié)果案例2:PASSBenchmarkLookUp-4 3000000 546 ns/opok github.com/falmar/goradix 3.094sPASSBenchmarkLookUp-4 3000000 538 ns/opok github.com/falmar/goradix 4.481s不匹配時的結(jié)果:PASSBenchmarkLookUp-4 10000000 194 ns/opok github.com/falmar/goradix 3.189sPASSBenchmarkLookUp-4 10000000 191 ns/opok github.com/falmar/goradix 3.243s
1 回答

鴻蒙傳說
TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個贊
如果您的基準(zhǔn)是隨機(jī)的,那么從一次運(yùn)行到下一次比較不同實(shí)現(xiàn)之間的性能將變得非常困難。
相反,靜態(tài)實(shí)現(xiàn)一些不同的基準(zhǔn)案例,這些案例強(qiáng)調(diào)算法的不同領(lǐng)域。這些案例應(yīng)該代表不同的場景,例如沒有匹配項的情況(就像您已經(jīng)擁有的那樣),源數(shù)據(jù)中有很多項目將在查找中返回的情況,有很多項目的情況和只有 1 件商品將被退回,等等。
- 1 回答
- 0 關(guān)注
- 176 瀏覽
添加回答
舉報
0/150
提交
取消