Skip to content

Instantly share code, notes, and snippets.

@arbenson
Last active April 15, 2020 16:32
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 arbenson/5c0075b64b858db06874873a863d6b98 to your computer and use it in GitHub Desktop.
Save arbenson/5c0075b64b858db06874873a863d6b98 to your computer and use it in GitHub Desktop.
Simple triangle enumeration julia
using SparseArrays
function find_triangles(A::SparseMatrixCSC{Int64,Int64})
n = size(A, 1) # number of nodes
d = vec(sum(A, dims=2)) # degree vector
deg_order = zeros(Int64, n)
deg_order[sortperm(d)] = 1:n
triangles = []
for i = 1:n
N_i = findnz(A[:, i])[1] # neighbors of node i
# only look over pairs of neighbors with higher degree order
N_i_keep = [j for j in N_i if deg_order[j] > deg_order[i]]
for jj = 1:length(N_i_keep)
for kk = (jj + 1):length(N_i_keep)
j = N_i_keep[jj]
k = N_i_keep[kk]
# check for triangle
if A[j, k] > 0
# triangle (i, j, k)
push!(triangles, (i, j, k))
end
end
end
end
return triangles
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment