Girvan-Newman

Splits an undirected graph into k communities by removing, one at a time, the edge that the most shortest paths cross.

Time complexity O(E·V·(V+E)), gograph function partition.GirvanNewman.

gograph keeps each undirected edge once per direction and gives each direction half of the edge's betweenness, so the scores shown are half the usual values.

Friend groups

Twelve friends in three circles: a climbing group, a book club and a band. Each edge joins two friends. Eli climbs and reads, and Hana reads and plays in the band, so each of them links two circles.

An undirected graph with 12 vertices and 21 edges.

Can the three circles be found from who knows whom alone? Split the twelve friends into 3 communities.

Use it in Go

communities, err := partition.GirvanNewman(g, 3)
if err != nil {
	return err
}
for _, c := range communities {
	var members []string
	for _, v := range c.GetAllVertices() {
		members = append(members, v.Label())
	}
	fmt.Println(members)
}

Example graphs

More in Partitioning

  • Maximal cliques: Finds every group of vertices that are all adjacent to each other and can't take one more vertex.
  • Randomized k-cut: Splits an undirected graph into k groups by merging the ends of random edges until k groups are left, and cuts the edges between them.

All algorithms