DRESS Graph¶
A Continuous Framework for Structural Graph Refinement
DRESS is a parameter-free, self-regularising algorithm that computes a unique self-consistent edge similarity for any graph. Given an edge list, DRESS iteratively solves a nonlinear fixed-point system where every edge's similarity value depends on its neighbours' values. It converges to a unique, bounded solution in \([0, 2]\) with no tuning parameters.
This work is an independent continuation of research from the author's master's thesis:
A fast heuristic algorithm for community detection in large-scale complex networks Eduar Castrillo, Universidad Nacional de Colombia, 2018 bdigital.unal.edu.co/69933
DRESS emerged from intuition while developing algorithms for community detection. What started as an edge scoring function turned out to be a fundamental structural object: a single algorithm that simultaneously enables graph isomorphism testing, community detection, classification, retrieval, and edge-importance ranking.
On the name
DRESS was originally named DSS (Dynamic Structural Similarity), then renamed to DRESS to emphasise the diffusive and recursive nature of the equation. The word Dynamic in the original name referred to the fact that the underlying fixed-point system is a discrete dynamical system, but it was dropped to avoid confusion with dynamic graphs (graphs that change over time), which are a different concept entirely.
Key properties¶
| Property |
|---|
| Bounded \([0, 2]\), self-similarity \(= 2\) |
| Parameter-free (self-regularising, no damping factor) |
| Scale invariant (degree-0 homogeneous) |
| Unique deterministic fixed point |
| Numerically stable (no overflow, no error amplification) |
| Low complexity: \(O(E)\) per iteration, \(O(N + E)\) memory |
| Graph fingerprinting (practical): MiVIA / IsoBench 100 % |
| Community detection (improves SCAN) |
| Weighted + directed support |
| Massively parallelisable (per-edge independent updates) |
The equation at a glance¶
For each edge \((u, v)\) in the graph, the fixed-point equation is:
The corresponding discrete-time iteration is:
where \(\|u\|^{(t)} = \sqrt{\displaystyle\sum_{x \in N[u]} \bar{w}_{ux}\, d_{ux}^{(t)}}\), \(N[u] = N(u) \cup \{u\}\) is the closed neighbourhood (including a self-loop with \(\bar{w}_{uu} = 2\), \(d_{uu} = 2\)), and \(\bar{w}\) is the combined weight for the chosen variant.
See The DRESS Equation for the full derivation.
Current Applications¶
- Graph Isomorphism: sorting DRESS edge values produces a canonical fingerprint. 100 % accuracy on MiVIA and IsoBench benchmarks.
- Community Detection: DRESS values classify edges as intra- or inter-community, improving SCAN and enabling agglomerative hierarchical clustering.
- Classification: percentile-based DRESS fingerprints fed to standard classifiers match or exceed Weisfeiler-Leman baselines on TU benchmark datasets.
- Retrieval: DRESS fingerprint distances correlate strongly with graph edit distance, achieving state-of-the-art precision on GED-based retrieval benchmarks.
- GED Regression: DRESS fingerprint differences fed to a simple regressor predict graph edit distance with 15× lower MSE than TaGSim on LINUX graphs — no GNN required.
- Edge Robustness: DRESS edge values double as an O(km) edge-importance ranking that outperforms O(nm) betweenness centrality and four other baselines (65–97% win rates, p < 0.0001 across 224 graphs).
See Applications Overview for details.
Language bindings¶
DRESS is implemented in C with bindings for:
- C / C++: static and shared libraries
- Python: pybind11 (
pip install dress-graph) - Rust:
dress-graphcrate - Go: CGo bindings
- Julia: native FFI module
- R:
.Callinterface - MATLAB / Octave: MEX gateway
- JavaScript / WASM: browser and Node.js
See Installation to get started.
Why 'DRESS'?
DRESS computes an
edge labelling that reveals the graph's hidden structural identity. It
dresses the bare skeleton (adjacency) with meaningful values. A graph
without DRESS is "naked" topology; after DRESS, every edge wears the
structural role that fits it best. And dress_fit() is literally fitting
the dress to the graph: few iterations give a loose fit, more iterations
tighten it, and at steady state the fit is true to size.