analyzeStructure method

Map<String, dynamic> analyzeStructure()

Анализирует структуру графа и возвращает статистику

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,
  };
}