|
Option Explicit On |
|
Option Strict On |
|
Option Compare Binary |
|
Option Infer On |
|
|
|
Imports System |
|
Imports System.Collections.Generic |
|
|
|
Module TestCompareHeapBinHeap |
|
Sub Main() |
|
Dim rand As New Random() |
|
|
|
Const DATA_SIZE As Integer = 1000000 |
|
|
|
Dim xs(DATA_SIZE) As Integer |
|
Dim ys(DATA_SIZE) As Integer |
|
For i As Integer = 0 To DATA_SIZE |
|
xs(i) = rand.Next(10000000) |
|
ys(i) = rand.Next(10000000) |
|
Next i |
|
|
|
Dim cmp As Comparison(Of Integer) = Function(a As Integer, b As Integer) As Integer |
|
Return a.CompareTo(b) |
|
End Function |
|
|
|
Dim hp As New Heap(Of Integer)(DATA_SIZE + 10, cmp) |
|
Dim bh As New BinHeap(Of Integer)(cmp) |
|
|
|
Dim hs(DATA_SIZE) As HItem(Of Integer) |
|
Dim bs(DATA_SIZE) As BHItem(Of Integer) |
|
|
|
Dim t1 As Integer, t2 As Integer |
|
|
|
Console.WriteLine("Data size: {0}", DATA_SIZE) |
|
|
|
Dim hp_push As Integer = 0 |
|
Dim hp_update As Integer = 0 |
|
Dim hp_pop As Integer = 0 |
|
Dim bh_push As Integer = 0 |
|
Dim bh_update As Integer = 0 |
|
Dim bh_pop As Integer = 0 |
|
|
|
Const TestCount As Integer = 20 |
|
|
|
For k As Integer = 1 TO TestCount |
|
|
|
Console.WriteLine("[test {0}]", k) |
|
|
|
For i As Integer = 0 To DATA_SIZE |
|
xs(i) = rand.Next(10000000) |
|
ys(i) = rand.Next(10000000) |
|
Next i |
|
|
|
t1 = Environment.TickCount |
|
For i As Integer = 0 To DATA_SIZE |
|
hs(i) = hp.Push(xs(i)) |
|
Next i |
|
t2 = Environment.TickCount |
|
Console.WriteLine("{0,-8} {1,8}: {2,7} ms", "Heap", "Push", t2 - t1) |
|
hp_push += t2 - t1 |
|
|
|
t1 = Environment.TickCount |
|
For i As Integer = 0 To DATA_SIZE |
|
hp.Update(hs(i), ys(i)) |
|
Next i |
|
t2 = Environment.TickCount |
|
Console.WriteLine("{0,-8} {1,8}: {2,7} ms", "Heap", "Update", t2 - t1) |
|
hp_update += t2 - t1 |
|
|
|
t1 = Environment.TickCount |
|
For i As Integer = 0 To DATA_SIZE |
|
hp.Pop() |
|
Next i |
|
t2 = Environment.TickCount |
|
Console.WriteLine("{0,-8} {1,8}: {2,7} ms", "Heap", "Pop", t2 - t1) |
|
hp_pop += t2 - t1 |
|
|
|
t1 = Environment.TickCount |
|
For i As Integer = 0 To DATA_SIZE |
|
bs(i) = bh.Push(xs(i)) |
|
Next i |
|
t2 = Environment.TickCount |
|
Console.WriteLine("{0,-8} {1,8}: {2,7} ms", "BinHeap", "Push", t2 - t1) |
|
bh_push += t2 - t1 |
|
|
|
t1 = Environment.TickCount |
|
For i As Integer = 0 To DATA_SIZE |
|
bh.Update(bs(i), ys(i)) |
|
Next i |
|
t2 = Environment.TickCount |
|
Console.WriteLine("{0,-8} {1,8}: {2,7} ms", "BinHeap", "Update", t2 - t1) |
|
bh_update += t2 - t1 |
|
|
|
t1 = Environment.TickCount |
|
For i As Integer = 0 To DATA_SIZE |
|
bh.Pop() |
|
Next i |
|
t2 = Environment.TickCount |
|
Console.WriteLine("{0,-8} {1,8}: {2,7} ms", "BinHeap", "Pop", t2 - t1) |
|
bh_pop += t2 - t1 |
|
|
|
Next k |
|
|
|
Console.WriteLine("[Average ({0})]", TestCount) |
|
Console.WriteLine("{0,-8} {1,8}: {2,9:F02} ms", "Heap", "Push", CDbl(hp_push) / CDbl(TestCount)) |
|
Console.WriteLine("{0,-8} {1,8}: {2,9:F02} ms", "Heap", "Update", CDbl(hp_update) / CDbl(TestCount)) |
|
Console.WriteLine("{0,-8} {1,8}: {2,9:F02} ms", "Heap", "Pop", CDbl(hp_pop) / CDbl(TestCount)) |
|
Console.WriteLine("{0,-8} {1,8}: {2,9:F02} ms", "BinHeap", "Push", CDbl(bh_push) / CDbl(TestCount)) |
|
Console.WriteLine("{0,-8} {1,8}: {2,9:F02} ms", "BinHeap", "Update", CDbl(bh_update) / CDbl(TestCount)) |
|
Console.WriteLine("{0,-8} {1,8}: {2,9:F02} ms", "BinHeap", "Pop", CDbl(bh_pop) / CDbl(TestCount)) |
|
|
|
End Sub |
|
End Module |