We test out the LightGraph package, to see how easy it is to use with ours, and to compare its speed. It is easy to make a LightGraphs data type. You just put in the adjacency matrix. Since this also works for directed graphs, it could be nice to use their directed graph routines. Their connected components seems slower, but their dijkstra is often faster!


In [1]:
using Laplacians
using LightGraphs

In [21]:
a = grid2(1000) # Laplacians style graph
lg = Graph(a)   # LightGraphs style


Out[21]:
{1000000, 1998000} undirected graph

In [22]:
@time is_connected(lg)


  
Out[22]:
true
0.450431 seconds (44 allocations: 31.890 MB)

In [23]:
@time isConnected(a)


  
Out[23]:
true
0.142486 seconds (8 allocations: 15.259 MB)

Let's subsample, and test out the speed of connected components routines.


In [24]:
as = subsampleEdges(a,0.5);
lgs = Graph(as)


Out[24]:
{1000000, 998947} undirected graph

In [27]:
@time c = components(as);


  0.061239 seconds (8 allocations: 15.259 MB)

In [28]:
@time lgc = connected_components(lgs);


  0.437358 seconds (572.18 k allocations: 73.131 MB)

Let's check if they give the same answers.


In [29]:
vecToComps(c)


Out[29]:
98859-element Array{Array{Int64,1},1}:
 [1]                                                                                              
 [2,1001,1002,2001,2002,3001]                                                                     
 [3,4,1004]                                                                                       
 [5]                                                                                              
 [6]                                                                                              
 [7]                                                                                              
 [8,1008,1009]                                                                                    
 [9]                                                                                              
 [10]                                                                                             
 [11,12,13,14,15,16,17,18,23,1003  …  13024,13025,13026,13027,13028,13029,14009,14015,14016,14027]
 [19,20,21]                                                                                       
 [22]                                                                                             
 [24,25,26]                                                                                       
 ⋮                                                                                                
 [999966]                                                                                         
 [999970]                                                                                         
 [999974,999975,999976]                                                                           
 [999977,999978]                                                                                  
 [999985]                                                                                         
 [999986]                                                                                         
 [999987]                                                                                         
 [999988,999989]                                                                                  
 [999990,999991]                                                                                  
 [999995]                                                                                         
 [999996]                                                                                         
 [999997]                                                                                         

In [30]:
lgc


Out[30]:
98859-element Array{Array{Int64,1},1}:
 [1]                                                                                              
 [2,1001,1002,2001,2002,3001]                                                                     
 [3,4,1004]                                                                                       
 [5]                                                                                              
 [6]                                                                                              
 [7]                                                                                              
 [8,1008,1009]                                                                                    
 [9]                                                                                              
 [10]                                                                                             
 [11,12,13,14,15,16,17,18,23,1003  …  13024,13025,13026,13027,13028,13029,14009,14015,14016,14027]
 [19,20,21]                                                                                       
 [22]                                                                                             
 [24,25,26]                                                                                       
 ⋮                                                                                                
 [999966]                                                                                         
 [999970]                                                                                         
 [999974,999975,999976]                                                                           
 [999977,999978]                                                                                  
 [999985]                                                                                         
 [999986]                                                                                         
 [999987]                                                                                         
 [999988,999989]                                                                                  
 [999990,999991]                                                                                  
 [999995]                                                                                         
 [999996]                                                                                         
 [999997]                                                                                         

To be sure that we are not being unfair in running time, let's time the vecToComps, too.


In [31]:
@time v = vecToComps(c);


  0.032858 seconds (98.90 k allocations: 16.559 MB)

Testing Shortest Paths Code


In [105]:
nexp = 100
tLap = zeros(nexp)
tLG = zeros(nexp)
tLapW = zeros(nexp)
tLGW = zeros(nexp)


Out[105]:
100-element Array{Float64,1}:
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 ⋮  
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0
 0.0

In [106]:
for i in 1:nexp
    a = chimera(1000000,i)
    tic()
    len, pa =  shortestPaths(a,100);
    t = toq()
    tLap[i] = t
    println("graph $i : time $t")
end


graph 1 : time 0.157275335
graph 2 : time 0.928855287
graph 3 : time 0.628510434
graph 4 : time 0.741046117
graph 5 : time 0.562501868
graph 6 : time 1.771566966
graph 7 : time 2.281707172
graph 8 : time 1.25713479
graph 9 : time 2.443579607
graph 10 : time 0.787615754
graph 11 : time 0.38503731
graph 12 : time 0.85096395
graph 13 : time 2.092245319
graph 14 : time 0.934313049
graph 15 : time 2.083324296
graph 16 : time 1.839508011
graph 17 : time 2.378677059
graph 18 : time 0.737971403
graph 19 : time 0.832194423
graph 20 : time 1.744760049
graph 21 : time 0.842615388
graph 22 : time 0.832270503
graph 23 : time 0.751816658
graph 24 : time 0.734181088
graph 25 : time 0.359448181
graph 26 : time 2.316138165
graph 27 : time 0.696948792
graph 28 : time 0.75321349
graph 29 : time 2.11616297
graph 30 : time 0.348678716
graph 31 : time 1.237497125
graph 32 : time 1.165063712
graph 33 : time 0.811851699
graph 34 : time 0.897246249
graph 35 : time 0.750454691
graph 36 : time 0.705361979
graph 37 : time 1.047712793
graph 38 : time 0.842277692
graph 39 : time 0.352600328
graph 40 : time 1.328107594
graph 41 : time 0.239037287
graph 42 : time 0.532566487
graph 43 : time 1.012724503
graph 44 : time 0.715499408
graph 45 : time 1.928092845
graph 46 : time 0.50488969
graph 47 : time 1.425481859
graph 48 : time 1.024145226
graph 49 : time 2.126804497
graph 50 : time 1.149338059
graph 51 : time 0.331222678
graph 52 : time 0.632950736
graph 53 : time 0.739031659
graph 54 : time 0.936926198
graph 55 : time 0.857314364
graph 56 : time 0.821412981
graph 57 : time 1.068154934
graph 58 : time 0.716064339
graph 59 : time 0.863460168
graph 60 : time 0.539561069
graph 61 : time 0.484713077
graph 62 : time 0.850514603
graph 63 : time 2.41604869
graph 64 : time 1.654863658
graph 65 : time 1.191066798
graph 66 : time 0.535297872
graph 67 : time 1.793633333
graph 68 : time 1.312013191
graph 69 : time 0.725693666
graph 70 : time 2.267990525
graph 71 : time 1.970106005
graph 72 : time 0.703268184
graph 73 : time 2.015459113
graph 74 : time 0.709835306
graph 75 : time 0.564300122
graph 76 : time 0.749912606
graph 77 : time 1.759031567
graph 78 : time 0.653794279
graph 79 : time 0.686586271
graph 80 : time 2.265021294
graph 81 : time 1.053056034
graph 82 : time 1.1960401
graph 83 : time 0.62416301
graph 84 : time 0.158542492
graph 85 : time 1.877246471
graph 86 : time 0.602288411
graph 87 : time 1.242679209
graph 88 : time 0.815844724
graph 89 : time 0.819804015
graph 90 : time 0.830730336
graph 91 : time 0.925451229
graph 92 : time 0.210743241
graph 93 : time 0.354116712
graph 94 : time 1.651095182
graph 95 : time 1.62361271
graph 96 : time 1.073295686
graph 97 : time 0.477414615
graph 98 : time 0.718524801
graph 99 : time 1.853755806
graph 100 : time 0.979657831

In [107]:
for i in 1:nexp
    a = chimera(1000000,i)
    lg = Graph(a)
    tic()
    x = dijkstra_shortest_paths(lg, 100);
    t = toq()
    tLG[i] = t
    println("graph $i : time $t")
end


graph 1 : time 0.1024683
graph 2 : time 1.046985715
graph 3 : time 0.729514845
graph 4 : time 0.923873393
graph 5 : time 2.081961896
graph 6 : time 0.828859167
graph 7 : time 1.167749709
graph 8 : time 2.679251768
graph 9 : time 1.07845828
graph 10 : time 0.521480354
graph 11 : time 0.560253723
graph 12 : time 0.961765623
graph 13 : time 0.743453264
graph 14 : time 1.621570968
graph 15 : time 0.941802642
graph 16 : time 0.864799805
graph 17 : time 1.068522535
graph 18 : time 2.592392524
graph 19 : time 1.071555119
graph 20 : time 0.674786872
graph 21 : time 0.679052765
graph 22 : time 0.833518101
graph 23 : time 0.929067561
graph 24 : time 0.864176383
graph 25 : time 0.541582205
graph 26 : time 0.797464445
graph 27 : time 0.938903691
graph 28 : time 0.868045836
graph 29 : time 0.784497356
graph 30 : time 0.602001156
graph 31 : time 2.656157307
graph 32 : time 0.996491693
graph 33 : time 0.91636858
graph 34 : time 1.154634857
graph 35 : time 0.985008687
graph 36 : time 0.94366295
graph 37 : time 2.685493646
graph 38 : time 1.14629409
graph 39 : time 0.536882932
graph 40 : time 2.310639135
graph 41 : time 0.443440792
graph 42 : time 0.720367433
graph 43 : time 0.919444481
graph 44 : time 0.7826267
graph 45 : time 0.687870276
graph 46 : time 0.709048982
graph 47 : time 0.394742257
graph 48 : time 1.036085885
graph 49 : time 1.262206425
graph 50 : time 1.501881283
graph 51 : time 0.50707875
graph 52 : time 1.214084877
graph 53 : time 0.843871846
graph 54 : time 1.119644553
graph 55 : time 2.695900333
graph 56 : time 1.088468848
graph 57 : time 2.645182618
graph 58 : time 0.907828553
graph 59 : time 0.933286586
graph 60 : time 0.715587164
graph 61 : time 0.732956407
graph 62 : time 1.099927569
graph 63 : time 1.175113679
graph 64 : time 0.56308853
graph 65 : time 1.436347681
graph 66 : time 0.67799118
graph 67 : time 2.182452545
graph 68 : time 0.386249138
graph 69 : time 0.962150979
graph 70 : time 1.146955623
graph 71 : time 1.054600355
graph 72 : time 0.948912785
graph 73 : time 0.709240807
graph 74 : time 0.957472174
graph 75 : time 0.667712832
graph 76 : time 0.872074402
graph 77 : time 2.335739753
graph 78 : time 0.962783175
graph 79 : time 2.43246195
graph 80 : time 0.959568783
graph 81 : time 1.196693408
graph 82 : time 2.173345962
graph 83 : time 0.748064703
graph 84 : time 1.677466668
graph 85 : time 0.884154106
graph 86 : time 2.080571607
graph 87 : time 1.264419639
graph 88 : time 1.112915847
graph 89 : time 1.061126768
graph 90 : time 2.725352476
graph 91 : time 1.354890608
graph 92 : time 0.412411095
graph 93 : time 0.460465893
graph 94 : time 0.551368793
graph 95 : time 0.52789641
graph 96 : time 0.845639767
graph 97 : time 2.37966868
graph 98 : time 0.537544873
graph 99 : time 0.846114407
graph 100 : time 2.973283454

In [108]:
for i in 1:nexp
    a = wtedChimera(1000000,i)
    tic()
    len, pa =  shortestPaths(a,100);
    t = toq()
    tLapW[i] = t
    println("graph $i : time $t")
end


graph 1 : time 2.110845529
graph 2 : time 4.179539232
graph 3 : time 3.52925238
graph 4 : time 1.109663883
graph 5 : time 1.443755588
graph 6 : time 0.795051231
graph 7 : time 1.889270151
graph 8 : time 2.147416059
graph 9 : time 4.28907586
graph 10 : time 2.872148854
graph 11 : time 2.803786198
graph 12 : time 1.440558358
graph 13 : time 0.943639223
graph 14 : time 2.239154962
graph 15 : time 1.631246066
graph 16 : time 2.031459944
graph 17 : time 1.926253048
graph 18 : time 2.829226766
graph 19 : time 1.98325763
graph 20 : time 2.550215384
graph 21 : time 1.797792106
graph 22 : time 3.421989275
graph 23 : time 3.624863382
graph 24 : time 0.987482411
graph 25 : time 2.859985992
graph 26 : time 1.121990057
graph 27 : time 1.49604734
graph 28 : time 3.152010096
graph 29 : time 1.060971825
graph 30 : time 2.28811561
graph 31 : time 2.204080297
graph 32 : time 1.217375194
graph 33 : time 2.322522799
graph 34 : time 2.274813355
graph 35 : time 4.054550711
graph 36 : time 3.237646732
graph 37 : time 4.100984635
graph 38 : time 2.012630634
graph 39 : time 2.621735282
graph 40 : time 1.856719747
graph 41 : time 2.274723234
graph 42 : time 0.582292062
graph 43 : time 1.921666356
graph 44 : time 1.839085818
graph 45 : time 0.587486305
graph 46 : time 0.9682097
graph 47 : time 2.296566071
graph 48 : time 3.023098428
graph 49 : time 2.055626055
graph 50 : time 2.484077391
graph 51 : time 0.481317381
graph 52 : time 0.961107485
graph 53 : time 1.346781653
graph 54 : time 0.978061496
graph 55 : time 0.946669866
graph 56 : time 3.412782992
graph 57 : time 2.357383903
graph 58 : time 1.575535509
graph 59 : time 1.773159515
graph 60 : time 0.877092005
graph 61 : time 2.585954847
graph 62 : time 2.025908091
graph 63 : time 2.068347652
graph 64 : time 3.219374965
graph 65 : time 2.068923633
graph 66 : time 3.163632828
graph 67 : time 1.409310683
graph 68 : time 2.09950638
graph 69 : time 1.180067644
graph 70 : time 2.104834564
graph 71 : time 3.550726014
graph 72 : time 3.310997888
graph 73 : time 1.445289247
graph 74 : time 1.50092245
graph 75 : time 1.51277849
graph 76 : time 1.704613675
graph 77 : time 1.298848274
graph 78 : time 1.905187708
graph 79 : time 2.118761659
graph 80 : time 3.438881521
graph 81 : time 2.199544641
graph 82 : time 3.854044537
graph 83 : time 3.692328342
graph 84 : time 2.129791704
graph 85 : time 1.84631052
graph 86 : time 3.265163834
graph 87 : time 4.450996935
graph 88 : time 3.542819877
graph 89 : time 2.069829049
graph 90 : time 4.457931373
graph 91 : time 1.921656955
graph 92 : time 0.677498555
graph 93 : time 0.684751675
graph 94 : time 1.1175786
graph 95 : time 0.928295015
graph 96 : time 2.083393847
graph 97 : time 0.840623804
graph 98 : time 0.520243394
graph 99 : time 1.792909829
graph 100 : time 4.350851338

In [109]:
for i in 1:nexp
    a = wtedChimera(1000000,i)
    lg = Graph(a)
    tic()
    x = dijkstra_shortest_paths(lg, 100);
    t = toq()
    tLGW[i] = t
    println("graph $i : time $t")
end


graph 1 : time 0.102765886
graph 2 : time 1.010568334
graph 3 : time 0.73455243
graph 4 : time 0.744312084
graph 5 : time 0.501533801
graph 6 : time 0.656156479
graph 7 : time 1.078464111
graph 8 : time 1.225795544
graph 9 : time 0.961360329
graph 10 : time 2.316190059
graph 11 : time 0.514371085
graph 12 : time 0.988589426
graph 13 : time 0.66449644
graph 14 : time 1.098261919
graph 15 : time 0.852101211
graph 16 : time 0.866978261
graph 17 : time 1.351094506
graph 18 : time 2.285211927
graph 19 : time 2.440445626
graph 20 : time 0.491848174
graph 21 : time 2.445333934
graph 22 : time 0.723611326
graph 23 : time 0.876081898
graph 24 : time 0.844240076
graph 25 : time 0.465651408
graph 26 : time 0.78266752
graph 27 : time 0.804940698
graph 28 : time 0.859372245
graph 29 : time 0.684782605
graph 30 : time 0.517619581
graph 31 : time 1.000412581
graph 32 : time 0.833410634
graph 33 : time 0.850887277
graph 34 : time 1.018031182
graph 35 : time 0.863970853
graph 36 : time 0.835602296
graph 37 : time 1.002320993
graph 38 : time 1.057235658
graph 39 : time 0.478827907
graph 40 : time 2.527517804
graph 41 : time 0.419129206
graph 42 : time 0.689159112
graph 43 : time 0.772012059
graph 44 : time 2.103725225
graph 45 : time 0.597703012
graph 46 : time 0.678368215
graph 47 : time 0.35082579
graph 48 : time 2.545016364
graph 49 : time 1.228782159
graph 50 : time 4.316305231
graph 51 : time 0.66978866
graph 52 : time 0.760374871
graph 53 : time 0.838647804
graph 54 : time 1.059882685
graph 55 : time 3.251441888
graph 56 : time 1.092562441
graph 57 : time 2.489876674
graph 58 : time 1.131913453
graph 59 : time 1.166117909
graph 60 : time 2.037836962
graph 61 : time 0.633859672
graph 62 : time 1.123415934
graph 63 : time 1.079773414
graph 64 : time 0.522129052
graph 65 : time 1.277937574
graph 66 : time 0.63898747
graph 67 : time 0.658969813
graph 68 : time 0.385223582
graph 69 : time 0.901914882
graph 70 : time 1.054069985
graph 71 : time 0.879683828
graph 72 : time 0.873378683
graph 73 : time 0.672664486
graph 74 : time 0.91035099
graph 75 : time 0.712454651
graph 76 : time 0.875697613
graph 77 : time 0.796067779
graph 78 : time 1.169217993
graph 79 : time 0.900615241
graph 80 : time 1.02475536
graph 81 : time 1.168432609
graph 82 : time 0.891843776
graph 83 : time 0.793680646
graph 84 : time 0.333590159
graph 85 : time 0.888833315
graph 86 : time 0.910245753
graph 87 : time 1.421998378
graph 88 : time 1.010424073
graph 89 : time 1.055499274
graph 90 : time 0.966871629
graph 91 : time 1.126724733
graph 92 : time 0.438733224
graph 93 : time 0.473742781
graph 94 : time 0.521613157
graph 95 : time 0.532659537
graph 96 : time 0.830701976
graph 97 : time 0.636283312
graph 98 : time 0.539592228
graph 99 : time 0.822951847
graph 100 : time 1.135567173

In [111]:
mean(tLap)


Out[111]:
1.0689032777399998

In [112]:
mean(tLG)


Out[112]:
1.13637294031

In [113]:
mean(tLapW)


Out[113]:
2.15341279088

In [114]:
mean(tLGW)


Out[114]:
1.0214824341000002

In [121]:
i = 6


Out[121]:
6

In [131]:
Profile.clear()
i = i + 1
@profile chimera(100000,i);
ProfileView.view()


Out[131]:
Profile results Function:

In [136]:
a1 = grownGraph(1000,2);
@time a11 = productGraph(a1,a1);
nnz(a11)


  
Out[136]:
7952000
3.886340 seconds (61 allocations: 265.612 MB, 91.63% gc time)

In [138]:
@time a11 = productGraph(a1,a1);


  2.283499 seconds (60 allocations: 265.612 MB, 151.86% gc time)

In [141]:
@time a10 = generalizedNecklace(a1,a1,2);


  5.468156 seconds (31.89 k allocations: 320.776 MB, 94.43% gc time)

In [143]:
@time a0 = joinGraphs(a11,a10,100);


  8.682505 seconds (53 allocations: 1.023 GB, 79.51% gc time)

In [150]:
@time (ai,aj,av) = findnz(a11);
n = size(a11)[1]
@time ax = sparse(ai,aj,av,n,n);


  1.814595 seconds (14 allocations: 182.007 MB, 95.28% gc time)
  3.839271 seconds (23 allocations: 280.824 MB, 87.24% gc time)

In [155]:
@time rt = randishKruskal(a11);


 10.901156 seconds (7.95 M allocations: 767.093 MB, 52.49% gc time)

In [156]:
@time rt = randishPrim(a11);


 16.265951 seconds (7.95 M allocations: 1.083 GB, 54.24% gc time)

In [157]:
a = wtedChimera(50);

In [159]:
x = minimum(a.nzval)


Out[159]:
0.02186374208034043

In [160]:
a.nzval = a.nzval / x;
minimum(a.nzval)


Out[160]:
1.0

In [161]:
n


Out[161]:
1000000

In [ ]: