@@ -362,23 +362,19 @@ func BenchmarkFibHeap_Enqueue(b *testing.B) {
362362
363363 heap := NewFloatFibHeap ()
364364
365- slice := make ([]float64 , 0 , b .N )
366365 for i := 0 ; i < b .N ; i ++ {
367- slice = append (slice , 2 * 1E10 * (rand .Float64 ()- 0.5 ))
368- }
369-
370- for i := 0 ; i < b .N ; i ++ {
371- heap .Enqueue (slice [i ])
366+ heap .Enqueue (2 * 1E10 * (rand .Float64 () - 0.5 ))
372367 }
373368}
374369
375370// Runs in O(log(N)) time
376371func BenchmarkFibHeap_DequeueMin (b * testing.B ) {
377372
378373 heap := NewFloatFibHeap ()
374+ N := 1000000
379375
380- slice := make ([]float64 , 0 , b . N )
381- for i := 0 ; i < b . N ; i ++ {
376+ slice := make ([]float64 , 0 , N )
377+ for i := 0 ; i < N ; i ++ {
382378 slice = append (slice , 2 * 1E10 * (rand .Float64 ()- 0.5 ))
383379 heap .Enqueue (slice [i ])
384380 }
@@ -392,27 +388,35 @@ func BenchmarkFibHeap_DequeueMin(b *testing.B) {
392388// Runs in O(1) amortized time
393389func BenchmarkFibHeap_DecreaseKey (b * testing.B ) {
394390 heap := NewFloatFibHeap ()
391+ N := 10000000
395392
396- sliceFlt := make ([]float64 , 0 , b . N )
397- sliceE := make ([]* Entry , 0 , b . N )
398- for i := 0 ; i < b . N ; i ++ {
393+ sliceFlt := make ([]float64 , 0 , N )
394+ sliceE := make ([]* Entry , 0 , N )
395+ for i := 0 ; i < N ; i ++ {
399396 sliceFlt = append (sliceFlt , 2 * 1E10 * (float64 (i )- 0.5 ))
400397 sliceE = append (sliceE , heap .Enqueue (sliceFlt [i ]))
401398 }
402399
400+ b .ResetTimer ()
401+ offset := float64 (2 )
403402 for i := 0 ; i < b .N ; i ++ {
403+ // Change offset if b.N larger than N
404+ if i % N == 0 && i > 0 {
405+ offset *= float64 (i / N )
406+ }
404407 // Shift-decrease keys
405- heap .DecreaseKey (sliceE [i ], sliceFlt [i ] - 2E10 )
408+ heap .DecreaseKey (sliceE [i % N ], sliceFlt [i % N ] - offset )
406409 }
407410}
408411
409412// Runs in O(log(N)) time
410413func BenchmarkFibHeap_Delete (b * testing.B ) {
411414 heap := NewFloatFibHeap ()
415+ N := 1000000
412416
413- sliceFlt := make ([]float64 , 0 , b . N )
414- sliceE := make ([]* Entry , 0 , b . N )
415- for i := 0 ; i < b . N ; i ++ {
417+ sliceFlt := make ([]float64 , 0 , N )
418+ sliceE := make ([]* Entry , 0 , N )
419+ for i := 0 ; i < N ; i ++ {
416420 sliceFlt = append (sliceFlt , 2 * 1E10 * (float64 (i )- 0.5 ))
417421 sliceE = append (sliceE , heap .Enqueue (sliceFlt [i ]))
418422 }
0 commit comments