From fb9e9281ab9e93415d0476a56adf1d4d554bf203 Mon Sep 17 00:00:00 2001 From: Andreas Noack Date: Thu, 20 Apr 2017 22:24:13 -0400 Subject: [PATCH 1/2] Initial dematlabification --- .../ktruss/code/julia/ktruss.jl | 43 +++++++++---------- .../ktruss/code/julia/runKtrussBenchmark.jl | 12 +++--- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/SubgraphIsomorphism/ktruss/code/julia/ktruss.jl b/SubgraphIsomorphism/ktruss/code/julia/ktruss.jl index 9bfff12..8c460d7 100644 --- a/SubgraphIsomorphism/ktruss/code/julia/ktruss.jl +++ b/SubgraphIsomorphism/ktruss/code/julia/ktruss.jl @@ -1,36 +1,35 @@ function calcx(E, m, n, k) - tmp = E.'*E; - R = E * ( tmp - spdiagm( diag(tmp) ) ); - r,c,v = findnz(R); - id = v.==2; - A = sparse( r[id], c[id], 1, m, n); - s = sum(A, 2); - x = s .< (k-2); - return(x, !x); + tmp = E.' * E + R = E * ( tmp - spdiagm( diag(tmp) ) ) + r,c,v = findnz(R) + id = v .== 2 + A = sparse( r[id], c[id], 1, m, n) + s = sum(A, 2) + x = s .< (k - 2) + return x, !x end function ktruss(inc_mtx_file, k) - if ~isfile( inc_mtx_file ) - println("unable to open input file"); - return (-1); + if !isfile( inc_mtx_file ) + println("unable to open input file") + return (-1) end - # load input data - t_read_inc=@elapsed ii = readdlm( inc_mtx_file, '\t', Int64); - println("incidence matrix read time : ", t_read_inc); + # load input data + t_read_inc = @elapsed ii = readdlm( inc_mtx_file, '\t', Int64) + println("incidence matrix read time : ", t_read_inc) - t_create_inc=@elapsed E = sparse( ii[:,1], ii[:,2], ii[:,3] ); - println("sparse adj. matrix creation time : ", t_create_inc); + t_create_inc = @elapsed E = sparse( ii[:,1], ii[:,2], ii[:,3] ) + println("sparse adj. matrix creation time : ", t_create_inc) - # - tic(); - m,n = size(E); - x, xc = calcx(E, m, n, k); + tic() + m,n = size(E) + x, xc = calcx(E, m, n, k) while sum(xc) != sum( any(E,2) ) E[find(x), :] = 0 - x, xc = calcx(E, m, n, k); + x, xc = calcx(E, m, n, k) end - + toc() return E end diff --git a/SubgraphIsomorphism/ktruss/code/julia/runKtrussBenchmark.jl b/SubgraphIsomorphism/ktruss/code/julia/runKtrussBenchmark.jl index 6003400..ec5377c 100644 --- a/SubgraphIsomorphism/ktruss/code/julia/runKtrussBenchmark.jl +++ b/SubgraphIsomorphism/ktruss/code/julia/runKtrussBenchmark.jl @@ -1,5 +1,5 @@ -include("ktruss.jl"); +include("ktruss.jl") inc_mtx_file = "../../../data/ktruss_example.tsv" @@ -8,16 +8,16 @@ E_expected = [1 1 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 1 0 0 - 0 0 0 0 0]; + 0 0 0 0 0] -@time E = ktruss(inc_mtx_file, 3); +@time E = ktruss(inc_mtx_file, 3) if sum( E - E_expected ) > 0 - println("Unable to verify results"); + println("Unable to verify results") else - println("passed"); - println(E); + println("passed") + println(E) end ####################################################### From d762cc75b6d913912ddeb19472bbbb5e6c9e1784 Mon Sep 17 00:00:00 2001 From: Andreas Noack Date: Thu, 20 Apr 2017 23:28:35 -0400 Subject: [PATCH 2/2] Some optimizations --- .../ktruss/code/julia/ktruss.jl | 40 +++++++++---------- .../ktruss/code/julia/runKtrussBenchmark.jl | 1 + 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/SubgraphIsomorphism/ktruss/code/julia/ktruss.jl b/SubgraphIsomorphism/ktruss/code/julia/ktruss.jl index 8c460d7..b839fc6 100644 --- a/SubgraphIsomorphism/ktruss/code/julia/ktruss.jl +++ b/SubgraphIsomorphism/ktruss/code/julia/ktruss.jl @@ -1,15 +1,13 @@ -function calcx(E, m, n, k) - tmp = E.' * E - R = E * ( tmp - spdiagm( diag(tmp) ) ) - r,c,v = findnz(R) - id = v .== 2 - A = sparse( r[id], c[id], 1, m, n) - s = sum(A, 2) - x = s .< (k - 2) - return x, !x +function calcx(Et, k) + n, m = size(Et) + tmp = Et*Et' + Rt = ( tmp - Diagonal( diag(tmp) ) )*Et + s = vec(sum(t -> t == 2, Rt, 1)) + x = find(t -> t < (k - 2), s) + return x end -function ktruss(inc_mtx_file, k) +function ktruss(inc_mtx_file, k; time = true) if !isfile( inc_mtx_file ) println("unable to open input file") return (-1) @@ -17,20 +15,20 @@ function ktruss(inc_mtx_file, k) # load input data t_read_inc = @elapsed ii = readdlm( inc_mtx_file, '\t', Int64) - println("incidence matrix read time : ", t_read_inc) + time && println("incidence matrix read time : ", t_read_inc) - t_create_inc = @elapsed E = sparse( ii[:,1], ii[:,2], ii[:,3] ) - println("sparse adj. matrix creation time : ", t_create_inc) + t_create_inc = @elapsed Et = sparse( ii[:,2], ii[:,1], ii[:,3] ) + time && println("sparse adj. matrix creation time : ", t_create_inc) - tic() - m,n = size(E) - x, xc = calcx(E, m, n, k) - while sum(xc) != sum( any(E,2) ) - E[find(x), :] = 0 - x, xc = calcx(E, m, n, k) + time && tic() + m = size(Et, 2) + x = calcx(Et, k) + while (m - length(x)) != sum( any(Et,1) ) + Et[:, x] = 0 + x = calcx(Et, k) end - toc() - return E + time && toc() + return Et' end diff --git a/SubgraphIsomorphism/ktruss/code/julia/runKtrussBenchmark.jl b/SubgraphIsomorphism/ktruss/code/julia/runKtrussBenchmark.jl index ec5377c..1f1f777 100644 --- a/SubgraphIsomorphism/ktruss/code/julia/runKtrussBenchmark.jl +++ b/SubgraphIsomorphism/ktruss/code/julia/runKtrussBenchmark.jl @@ -11,6 +11,7 @@ E_expected = [1 1 0 0 0 0 0 0 0 0] +E = ktruss(inc_mtx_file, 3, time = false) @time E = ktruss(inc_mtx_file, 3) if sum( E - E_expected ) > 0