analyzeStructure method
Анализирует структуру графа и возвращает статистику
Implementation
Map<String, dynamic> analyzeStructure() {
int maxBranching = 0;
double avgBranching = 0;
int totalNodes = 0;
int maxDepth = 0;
final branchingDistribution = <int, int>{};
for (final node in nodes.values) {
final edges = getNodeEdges(node);
final branching = edges.length;
maxBranching = max(maxBranching, branching);
branchingDistribution[branching] = (branchingDistribution[branching] ?? 0) + 1;
totalNodes++;
}
avgBranching = totalNodes > 1
? branchingDistribution.entries.map((e) => e.key * e.value).reduce((a, b) => a + b) /
(totalNodes - 1) // исключаем листья
: 0;
final depths = getDepths();
maxDepth = depths.values.isEmpty ? 0 : depths.values.reduce(max);
return {
'totalNodes': totalNodes,
'maxBranching': maxBranching,
'averageBranching': avgBranching,
'maxDepth': maxDepth,
'branchingDistribution': branchingDistribution,
'isBalanced': isBalanced(),
'centralNodes': findCentralNodes().map((n) => n.key).toList(),
'leafCount': getLeaves().length,
};
}