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.
Time complexity O(V·E), gograph function partition.RandomizedKCut.
gograph picks the edges to contract at random, so the cut can change each time the server restarts.
Karate club
The 34 members of a university karate club, numbered 1 to 34 as in the study. Each edge joins two members who also spent time together outside the club's classes and meetings. A dispute between the instructor (1) and an officer (34) split the club in two, and most members sit near the side they joined.
An undirected graph with 34 vertices and 78 edges.
Split the club in two and try to break as few ties between members as possible.
Use it in Go
cut, err := partition.RandomizedKCut(g, 2)
if err != nil {
return err
}
for _, group := range cut.Supernodes {
var members []string
for _, v := range group {
members = append(members, v.Label())
}
fmt.Println(members)
}
for _, e := range cut.CutEdges {
fmt.Println(e.Source().Label(), e.Destination().Label())
}
Example graphs
- Friend groups, 12 vertices and 21 edges
- Office network, 13 vertices and 16 edges
- Maze, 30 vertices and 31 edges
- Karate club, 34 vertices and 78 edges
More in Partitioning
- Maximal cliques: Finds every group of vertices that are all adjacent to each other and can't take one more vertex.
- Girvan-Newman: Splits an undirected graph into k communities by removing, one at a time, the edge that the most shortest paths cross.