Walktrap algorithm for community detection.
Uses random walks to compute distances between nodes. Nodes are merged into communities based on these distances, creating a hierarchical structure that captures the graph's community organization.
Algorithm
- Compute transition probabilities P^t (t-step random walk)
- Define distance between nodes based on transition probability differences
- Merge closest communities iteratively (hierarchical agglomerative)
- Return hierarchy of community partitions
When to Use
| Use Case | Recommendation |
|---|---|
| Hierarchical structure | ✓ Good |
| Local structure matters | ✓ Captures neighborhood via walks |
| Large graphs | Consider faster alternatives |
| Quality priority | Good balance of speed and quality |
Complexity
- Time: O(V² × log V) for hierarchical clustering
- Space: O(V²) for distance matrix
Example
# Basic usage (walk_length=4 is default)
communities = Yog.Community.Walktrap.detect(graph)
# With options
communities = Yog.Community.Walktrap.detect_with_options(graph,
walk_length: 5,
target_communities: 3
)
# Full hierarchical detection
dendrogram = Yog.Community.Walktrap.detect_hierarchical(graph, 4)References
Summary
Types
Options for Walktrap algorithm
Functions
Returns default options for Walktrap.
Detects communities using Walktrap with default options.
Full hierarchical Walktrap detection.
Detects communities using Walktrap with custom options.
Types
Functions
@spec default_options() :: walktrap_options()
Returns default options for Walktrap.
Defaults
walk_length: 4 - Number of steps in random walktarget_communities: nil - Full dendrogram (all levels)
@spec detect(Yog.graph()) :: Yog.Community.Result.t()
Detects communities using Walktrap with default options.
Example
communities = Yog.Community.Walktrap.detect(graph)
IO.inspect(communities.num_communities)
@spec detect_hierarchical(Yog.graph(), integer()) :: Yog.Community.Dendrogram.t()
Full hierarchical Walktrap detection.
Returns a dendrogram with community structure at each merge level.
Parameters
graph- The graph to analyzewalk_length- Number of steps in random walk (default: 4)
Example
dendrogram = Yog.Community.Walktrap.detect_hierarchical(graph, 4)
IO.inspect(length(dendrogram.levels))
@spec detect_with_options(Yog.graph(), keyword() | map()) :: Yog.Community.Result.t()
Detects communities using Walktrap with custom options.
Options
:walk_length- Length of random walks (default: 4):target_communities- Stop when this many communities reached (default: nil = full)
Example
communities = Yog.Community.Walktrap.detect_with_options(graph,
walk_length: 5,
target_communities: 3
)