Skip to content

Instantly share code, notes, and snippets.

@neetsdkasu
Last active September 22, 2017 07:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save neetsdkasu/df6bc8b4d198468558bfc3fb0fc1664d to your computer and use it in GitHub Desktop.
Save neetsdkasu/df6bc8b4d198468558bfc3fb0fc1664d to your computer and use it in GitHub Desktop.
Compare My Heap And My BinHeap
IF "%~1"=="" (
vbc /nologo /debug+ /out:TestCompareHeapBinHeapDbg.exe Heap.vb BinHeap.vb TestCompareHeapBinHeap.vb
)
IF "%~1"=="1" (
vbc /nologo /debug- /optimize+ /out:TestCompareHeapBinHeapOpt.exe Heap.vb BinHeap.vb TestCompareHeapBinHeap.vb
)
IF "%~1"=="2" (
vbc /nologo /out:TestCompareHeapBinHeapNFg.exe Heap.vb BinHeap.vb TestCompareHeapBinHeap.vb
)

My Heap: https://gist.github.com/neetsdkasu/62af5f81adb04d4f9183f3aa36ca9bba
My BinHeap: https://gist.github.com/neetsdkasu/d7b10c8908c97a2ebec50af96ee3e12a


Debug On

C:\> vbc /nologo /debug+ /out:TestCompareHeapBinHeap.exe Heap.vb BinHeap.vb TestCompareHeapBinHeap.vb
Data size: 1000000
[Average (20)]
Heap         Push:   1352.65 ms
Heap       Update:    566.20 ms
Heap          Pop:   8964.60 ms
BinHeap      Push:   2449.20 ms
BinHeap    Update:    389.15 ms
BinHeap       Pop:  12765.60 ms

Debug Off, Optimize On

C:\> vbc /nologo /debug- /optimize+ /out:TestCompareHeapBinHeap.exe Heap.vb BinHeap.vb TestCompareHeapBinHeap.vb
Data size: 1000000
[Average (20)]
Heap         Push:    993.80 ms
Heap       Update:    357.20 ms
Heap          Pop:   6577.00 ms
BinHeap      Push:   1913.40 ms
BinHeap    Update:    254.20 ms
BinHeap       Pop:   7133.90 ms

No Flag

C:\> vbc /nologo /out:TestCompareHeapBinHeap.exe Heap.vb BinHeap.vb TestCompareHeapBinHeap.vb
Data size: 1000000
[Average (20)]
Heap         Push:   1031.15 ms
Heap       Update:    362.65 ms
Heap          Pop:   6961.60 ms
BinHeap      Push:   1988.20 ms
BinHeap    Update:    267.45 ms
BinHeap       Pop:   7330.60 ms
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment