Если O(E + Ngroups^2)
- это опция, где E
- это число ребер в данном графике, а Ngroups
- это количество групп, вы можете сделать это следующим образом.
Вы можете создать матрицу смежности для результирующего графа. Затем переберите все ребра в данном графе, как
for each edge u in Graph
for v such that edge u->v exists
let w be the weight of u->v
A[group(u)][group(v)] := A[group(u)][group(v)] + w;
Вы можете перестроить новый граф из матрицы смежности, если хотите.
Одной из возможных оптимизаций является использование сбалансированного дерева для удержания ребер, начинающихся в конкретной группе узлов, вместо всей матрицы смежности, это приведет к O(E*log(Ngroups))
сложности времени.