Skip to content

Commit fc90363

Browse files
committed
faster trianglemap, idea by Federico Florio, Gabriele Gatti and Ricardo Garcia
1 parent 6fa00c7 commit fc90363

File tree

1 file changed

+7
-12
lines changed

1 file changed

+7
-12
lines changed

src/SimpleGraphs/generators/randgraphs.jl

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -127,22 +127,17 @@ function randbn(
127127
end
128128

129129
"maps 1:binomial(n,2) into an upper triangle of [1,n]×[1,n]"
130-
function trianglemap(r)
131-
j = floor(Int, (1+sqrt(8r-7))/2) + 1
132-
i = r - binomial(j-1,2)
133-
Edge(i, j)
130+
function trianglemap(r, n)
131+
j, i = fldmod1(r, n - 1)
132+
i j ? Edge(i + 1, j) : Edge(n - i + 1, n - j + 1)
134133
end
135134

136135
"maps 1:n*(n-1) into non-diagonal elements of [1,n]×[1,n]"
137-
function nondiagmap(r,n)
138-
j = div(r-1, n-1)
139-
i = r - j*(n-1)
140-
j += 1
141-
i += (i >= j)
142-
Edge(i, j)
136+
function nondiagmap(r, n)
137+
j, i = fldmod1(r, n - 1)
138+
i j ? Edge(i + 1, j) : Edge(i, j)
143139
end
144140

145-
146141
"""
147142
erdos_renyi(n, p)
148143
@@ -182,7 +177,7 @@ function erdos_renyi(
182177
g = if is_directed
183178
SimpleDiGraphFromIterator(nondiagmap(r,n) for r in seq)
184179
else
185-
SimpleGraphFromIterator(trianglemap(r) for r in seq)
180+
SimpleGraphFromIterator(trianglemap(r,n) for r in seq)
186181
end
187182
# complete to exactly n vertices
188183
add_vertices!(g, n - nv(g))

0 commit comments

Comments
 (0)