Yog.Community.CliquePercolation (YogEx v0.97.1)

Copy Markdown View Source

Clique Percolation Method (CPM) for detecting overlapping communities.

Identifies communities by finding "chains" of adjacent k-cliques. Two k-cliques are adjacent if they share k-1 nodes. Unlike other algorithms, CPM can identify nodes that belong to multiple communities.

Algorithm

  1. Find all maximal cliques (using Bron-Kerbosch)
  2. Extract all k-cliques from maximal cliques
  3. Build adjacency between k-cliques (share k-1 nodes)
  4. Find connected components of k-cliques
  5. Merge cliques in each component to form communities

When to Use

Use CaseRecommendation
Overlapping communities✓ Only algorithm in this module
Dense networks with cliques✓ Excellent
Sparse graphs✗ May find no communities
Non-overlapping neededConvert with to_communities/1

Complexity

  • Time: O(3^(V/3)) for maximal clique enumeration (worst case)
  • Space: O(V + E)

Note: Clique enumeration can be expensive on large or dense graphs.

Example

# Detect overlapping communities (k=3 finds triangles)
overlapping = Yog.Community.CliquePercolation.detect_overlapping(graph)

# Convert to non-overlapping (assigns node to first community)
communities = Yog.Community.CliquePercolation.to_communities(overlapping)

# With custom k
overlapping = Yog.Community.CliquePercolation.detect_overlapping_with_options(graph,
  k: 4
)

References

Summary

Types

Options for Clique Percolation Method

Functions

Returns default options for CPM.

Detects overlapping communities using CPM with default options.

Detects overlapping communities using CPM with custom options.

Converts overlapping communities to standard communities.

Types

cpm_options()

@type cpm_options() :: %{k: integer()}

Options for Clique Percolation Method

Functions

default_options()

@spec default_options() :: cpm_options()

Returns default options for CPM.

Defaults

  • k: 3 - Size of the clique (typically 3 or 4)

detect_overlapping(graph)

@spec detect_overlapping(Yog.graph()) :: Yog.Community.Overlapping.t()

Detects overlapping communities using CPM with default options.

Returns overlapping communities where each node can belong to multiple communities.

Example

overlapping = Yog.Community.CliquePercolation.detect_overlapping(graph)
IO.inspect(overlapping.num_communities)

detect_overlapping_with_options(graph, opts)

@spec detect_overlapping_with_options(Yog.graph(), keyword() | map()) ::
  Yog.Community.Overlapping.t()

Detects overlapping communities using CPM with custom options.

Options

  • :k - Clique size (default: 3)

Example

overlapping = Yog.Community.CliquePercolation.detect_overlapping_with_options(graph,
  k: 4
)

to_communities(overlapping)

Converts overlapping communities to standard communities.

Each node is assigned to the first community in its membership list.

Example

overlapping = Yog.Community.CliquePercolation.detect_overlapping(graph)
communities = Yog.Community.CliquePercolation.to_communities(overlapping)
IO.inspect(communities.num_communities)