Skip to content

Commit 2f3c24b

Browse files
committed
More efficient reset of visited vertices in order.jl
1 parent 744827d commit 2f3c24b

1 file changed

Lines changed: 15 additions & 12 deletions

File tree

src/order.jl

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -366,20 +366,24 @@ function vertices(
366366
n = nb_vertices(g, Val(side))
367367
degrees_dist2 = zeros(T, n)
368368
visited = fill(false, n)
369+
vertices_visited = zeros(T, n-1)
370+
num_visited = zero(T)
369371
for v in vertices(g, Val(side))
370372
for w1 in neighbors(g, Val(side), v)
371373
for w2 in neighbors(g, Val(other_side), w1)
372374
if w2 != v && !visited[w2]
373375
degrees_dist2[v] += 1
374376
visited[w2] = true
377+
num_visited += 1
378+
vertices_visited[num_visited] = w2
375379
end
376380
end
377381
end
378-
for w1 in neighbors(g, Val(side), v)
379-
for w2 in neighbors(g, Val(other_side), w1)
380-
visited[w2] = false
381-
end
382+
for k in 1:num_visited
383+
z = vertices_visited[k]
384+
visited[z] = false
382385
end
386+
num_visited = 0
383387
end
384388
if degree_increasing(; degtype, direction)
385389
degrees = zeros(T, n)
@@ -390,26 +394,25 @@ function vertices(
390394
db = DegreeBuckets(T, degrees, maxd2; reproduce_colpack=order.reproduce_colpack)
391395
π = T[]
392396
sizehint!(π, n)
393-
fill!(visited, false)
394397
for _ in 1:nb_vertices(g, Val(side))
395398
u = pop_next_candidate!(db; direction)
396399
direction == :low2high ? push!(π, u) : pushfirst!(π, u)
397400
for w in neighbors(g, Val(side), u)
398401
for v in neighbors(g, Val(other_side), w)
399-
if v == u || visited[v]
400-
continue
401-
else
402+
if v != u && !visited[v]
402403
visited[v] = true
404+
num_visited += 1
405+
vertices_visited[num_visited] = v
403406
end
404407
already_ordered(db, v) && continue
405408
update_bucket!(db, v; degtype, direction)
406409
end
407410
end
408-
for w in neighbors(g, Val(side), u)
409-
for v in neighbors(g, Val(other_side), w)
410-
visited[v] = false # reset only the toggled ones to false
411-
end
411+
for k in 1:num_visited
412+
z = vertices_visited[k]
413+
visited[z] = false
412414
end
415+
num_visited = 0
413416
end
414417
return π
415418
end

0 commit comments

Comments
 (0)