@@ -219,15 +219,28 @@ function vertices(
219219 g:: BipartiteGraph , :: Val{side} , :: DynamicDegreeBasedOrder{degtype,direction}
220220) where {side,degtype,direction}
221221 other_side = 3 - side
222+ # compute dist-2 degrees in an optimized way
223+ n = nb_vertices (g, Val (side))
224+ degrees_dist2 = zeros (Int, n)
225+ dist2_neighbor = falses (n)
226+ for v in vertices (g, Val (side))
227+ fill! (dist2_neighbor, false )
228+ for w1 in neighbors (g, Val (side), v)
229+ for w2 in neighbors (g, Val (other_side), w1)
230+ dist2_neighbor[w2] = true
231+ end
232+ end
233+ degrees_dist2[v] = sum (dist2_neighbor)
234+ end
222235 if degree_increasing (; degtype, direction)
223- degrees = zeros (Int, nb_vertices (g, Val (side)) )
236+ degrees = zeros (Int, n )
224237 else
225- degrees = [ degree_dist2 (g, Val (side), v) for v in vertices (g, Val (side))] # TODO : optimize
238+ degrees = degrees_dist2
226239 end
227- maxd2 = maximum (v -> degree_dist2 (g, Val (side), v), vertices (g, Val (side))) # TODO : optimize
240+ maxd2 = maximum (degrees_dist2)
228241 db = DegreeBuckets (degrees, maxd2)
229242 π = Int[]
230- visited = falses (nb_vertices (g, Val (side)) )
243+ visited = falses (n )
231244 for _ in 1 : nb_vertices (g, Val (side))
232245 u = pop_next_candidate! (db; direction)
233246 direction == :low2high ? push! (π, u) : pushfirst! (π, u)
0 commit comments