=================================== Conductance Distance =================================== Introduction ----------- Conductance Distance is a graph similarity metric that compares networks based on their community separation quality. Conductance measures how well-connected a community is internally versus how connected it is to the rest of the network. This distance metric is particularly valuable for analyzing network partitions and evaluating community boundaries in complex networks. Formal Definition --------------- For two graphs G1 and G2, the conductance distance uses the conductance measure φ(S): Let φ(S) be the conductance of a community S: φ(S) = c(S) / min(vol(S), vol(V-S)) where: * c(S) is the number of edges leaving the set S * vol(S) is the sum of degrees of nodes in S * V-S represents the complement of set S For graphs with multiple communities, the overall conductance Φ(G) is: Φ(G) = average(φ(Si)) for all communities Si The distance is then defined as: D(G1, G2) = |Φ(G1) - Φ(G2)| Intuition and Significance ------------------------ This metric captures: * Community isolation quality * Boundary definition strength * Internal vs external connectivity * Community separation effectiveness Applications ----------- Conductance Distance finds applications in various domains: 1. Social Networks * Evaluating community boundaries * Analyzing group isolation * Studying social segregation 2. Communication Networks * Analyzing network partitions * Evaluating network bottlenecks * Studying information flow barriers 3. Biological Networks * Analyzing protein modules * Studying metabolic pathways * Evaluating neural communities Usage Example ------------ ```python from distancia import ConductanceDistance # Create example graphs with communities G1 = nx.Graph() G1.add_edges_from([ (0,1), (1,2), (0,2), # Community 1 (3,4), (4,5), (3,5), # Community 2 (2,3) # Single bridge ]) communities1 = {0:0, 1:0, 2:0, 3:1, 4:1, 5:1} G2 = nx.Graph() G2.add_edges_from([ (0,1), (1,2), (0,2), # Community 1 (3,4), (4,5), (3,5), # Community 2 (0,3), (1,4) # Multiple bridges ]) communities2 = {0:0, 1:0, 2:0, 3:1, 4:1, 5:1} # Calculate conductance distance conductance_calculator = ConductanceDistance() distance = conductance_calculator.compute(G1, G2, communities1, communities2) print(f"Conductance Distance: {distance}") ``` Computational Complexity ---------------------- The computational complexity for comparing two graphs: * Time complexity: O(|E|) for conductance calculation * Space complexity: O(|V|) for community storage * Overall comparison complexity: O(|E|) where |V| is the number of vertices and |E| is the number of edges. Academic References ----------------- 1. Kannan, R., Vempala, S., & Vetta, A. (2004). "On clusterings: Good, bad and spectral." Journal of the ACM, 51(3), 497-515. 2. Leskovec, J., Lang, K. J., & Mahoney, M. (2010). "Empirical comparison of algorithms for network community detection." WWW '10. 3. Andersen, R., Chung, F., & Lang, K. (2006). "Local graph partitioning using PageRank vectors." FOCS '06. 4. Schaeffer, S. E. (2007). "Graph clustering." Computer Science Review, 1(1), 27-64. Conclusion --------- Conductance Distance provides an effective way to compare networks based on their community boundary quality. This metric is particularly useful for: * Evaluating community detection results * Comparing network partitioning quality * Analyzing boundary definitions * Studying community isolation Key considerations: * Sensitive to community size variations * Affected by network density * Requires predefined communities * Balance between internal and external connections Best practices include: * Using consistent community definitions * Considering multiple scales of analysis * Normalizing for network size * Combining with other structural metrics The metric is most effective when used as part of a comprehensive suite of distance measures, as it specifically captures boundary quality while potentially missing other important network properties.