From 95ca77d84e0222402a9dead1d06e76c18fa7bb50 Mon Sep 17 00:00:00 2001 From: Alexis Montoison Date: Tue, 25 Mar 2025 14:14:05 -0500 Subject: [PATCH 1/2] Improve degree and nb_edges --- src/graph.jl | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/graph.jl b/src/graph.jl index 2cd9c7fd..19a294c5 100644 --- a/src/graph.jl +++ b/src/graph.jl @@ -221,17 +221,27 @@ function neighbors(g::AdjacencyGraph{T,false}, v::Integer) where {T} return neighbors_v end -function degree(g::AdjacencyGraph, v::Integer) - d = 0 - for u in neighbors(g, v) - if u != v - d += 1 +function degree(g::AdjacencyGraph{T,true}, v::Integer) where {T} + S = pattern(g) + rvS = rowvals(S) + d = S.colptr[v+1] - S.colptr[v] + for index in nzrange(S, v) + row = rvS[index] + if row >= v + (row == v) && (d -= 1) + break end end return d end -function nb_edges(g::AdjacencyGraph) +function degree(g::AdjacencyGraph{T,false}, v::Integer) where {T} + S = pattern(g) + d = S.colptr[v+1] - S.colptr[v] + return d +end + +function nb_edges(g::AdjacencyGraph{T,false}) where {T} ne = 0 for v in vertices(g) for u in neighbors(g, v) @@ -241,6 +251,8 @@ function nb_edges(g::AdjacencyGraph) return ne ÷ 2 end +nb_edges(g::AdjacencyGraph{T,true}) where {T} = nnz(g.S) ÷ 2 + maximum_degree(g::AdjacencyGraph) = maximum(Base.Fix1(degree, g), vertices(g)) minimum_degree(g::AdjacencyGraph) = minimum(Base.Fix1(degree, g), vertices(g)) From 3a39e63b5805074a5dcf53536207f27a864b41a1 Mon Sep 17 00:00:00 2001 From: Alexis Montoison Date: Tue, 25 Mar 2025 14:56:33 -0500 Subject: [PATCH 2/2] Fix graph.jl --- src/graph.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/graph.jl b/src/graph.jl index 19a294c5..f8b197e7 100644 --- a/src/graph.jl +++ b/src/graph.jl @@ -224,7 +224,7 @@ end function degree(g::AdjacencyGraph{T,true}, v::Integer) where {T} S = pattern(g) rvS = rowvals(S) - d = S.colptr[v+1] - S.colptr[v] + d = S.colptr[v + 1] - S.colptr[v] for index in nzrange(S, v) row = rvS[index] if row >= v @@ -237,7 +237,7 @@ end function degree(g::AdjacencyGraph{T,false}, v::Integer) where {T} S = pattern(g) - d = S.colptr[v+1] - S.colptr[v] + d = S.colptr[v + 1] - S.colptr[v] return d end