/** * Интерфейсы для системы алгоритмов работы с графами */ import { CSElement } from '../core/CSElement'; export type NodeId = string; export type EdgeWeight = number; export type GraphPath = NodeId[]; export type GraphCycle = NodeId[]; export type ConnectedComponent = NodeId[]; export type PathFindingAlgorithm = 'bfs' | 'dfs' | 'dijkstra' | 'astar'; export type CycleDetectionAlgorithm = 'dfs' | 'tarjan'; export type ComponentAnalysisAlgorithm = 'dfs' | 'bfs' | 'tarjan' | 'kosaraju'; export interface GraphAnalysisOptions { /** Максимальная глубина поиска */ maxDepth?: number; /** Учитывать направление связей */ directed?: boolean; /** Включать веса рёбер */ weighted?: boolean; /** Функция для получения веса ребра */ getEdgeWeight?: (from: CSElement, to: CSElement) => number; /** Фильтр для узлов */ nodeFilter?: (node: CSElement) => boolean; /** Фильтр для рёбер */ edgeFilter?: (from: CSElement, to: CSElement) => boolean; /** Максимальное время выполнения (мс) */ timeout?: number; } export interface PathFindingOptions extends GraphAnalysisOptions { /** Алгоритм поиска пути */ algorithm?: PathFindingAlgorithm; /** Эвристическая функция для A* */ heuristic?: (from: CSElement, to: CSElement) => number; /** Максимальная длина пути */ maxPathLength?: number; } export interface CycleDetectionOptions extends GraphAnalysisOptions { /** Алгоритм обнаружения циклов */ algorithm?: CycleDetectionAlgorithm; /** Найти все циклы или только первый */ findAll?: boolean; /** Минимальная длина цикла */ minCycleLength?: number; } export interface ComponentAnalysisOptions extends GraphAnalysisOptions { /** Алгоритм анализа компонент */ algorithm?: ComponentAnalysisAlgorithm; /** Анализировать сильно связанные компоненты */ stronglyConnected?: boolean; /** Минимальный размер компоненты */ minComponentSize?: number; } export interface PathResult { /** Найденный путь */ path: GraphPath; /** Общая стоимость пути */ cost: number; /** Количество шагов */ steps: number; /** Время выполнения (мс) */ executionTime: number; /** Алгоритм, использованный для поиска */ algorithm: PathFindingAlgorithm; /** Дополнительная информация */ metadata: { visitedNodes: number; exploredEdges: number; isOptimal: boolean; }; } export interface CycleResult { /** Найденные циклы */ cycles: GraphCycle[]; /** Общее количество циклов */ totalCycles: number; /** Время выполнения (мс) */ executionTime: number; /** Алгоритм, использованный для поиска */ algorithm: CycleDetectionAlgorithm; /** Дополнительная информация */ metadata: { visitedNodes: number; maxCycleLength: number; minCycleLength: number; hasSelfLoops: boolean; }; } export interface ComponentResult { /** Найденные компоненты связности */ components: ConnectedComponent[]; /** Общее количество компонент */ totalComponents: number; /** Время выполнения (мс) */ executionTime: number; /** Алгоритм, использованный для анализа */ algorithm: ComponentAnalysisAlgorithm; /** Дополнительная информация */ metadata: { largestComponentSize: number; smallestComponentSize: number; averageComponentSize: number; isolatedNodes: number; }; } export interface GraphAnalysisResult { /** Результаты поиска путей */ paths?: PathResult[]; /** Результаты обнаружения циклов */ cycles?: CycleResult; /** Результаты анализа компонент связности */ components?: ComponentResult; /** Общая статистика графа */ graphStats: GraphStatistics; } export interface GraphStatistics { /** Общее количество узлов */ nodeCount: number; /** Общее количество рёбер */ edgeCount: number; /** Максимальная глубина */ maxDepth: number; /** Средняя степень узла */ averageDegree: number; /** Плотность графа */ density: number; /** Является ли граф связным */ isConnected: boolean; /** Является ли граф ациклическим */ isAcyclic: boolean; /** Является ли граф деревом */ isTree: boolean; /** Диаметр графа */ diameter: number; } export interface GraphRepresentation { /** Список смежности */ adjacencyList: Map>; /** Матрица смежности */ adjacencyMatrix?: number[][]; /** Список рёбер */ edgeList: Array<{ from: NodeId; to: NodeId; weight?: number; }>; /** Узлы графа */ nodes: Map; /** Является ли граф направленным */ directed: boolean; /** Является ли граф взвешенным */ weighted: boolean; } export interface GraphAlgorithmsManager { findPath(from: CSElement, to: CSElement, options?: PathFindingOptions): Promise; findShortestPath(from: CSElement, to: CSElement, options?: PathFindingOptions): Promise; findAllPaths(from: CSElement, to: CSElement, options?: PathFindingOptions): Promise; detectCycles(root: CSElement, options?: CycleDetectionOptions): Promise; hasCycle(root: CSElement, options?: CycleDetectionOptions): Promise; findCycle(root: CSElement, options?: CycleDetectionOptions): Promise; findConnectedComponents(root: CSElement, options?: ComponentAnalysisOptions): Promise; findStronglyConnectedComponents(root: CSElement, options?: ComponentAnalysisOptions): Promise; isConnected(root: CSElement, options?: GraphAnalysisOptions): Promise; buildGraph(root: CSElement, options?: GraphAnalysisOptions): Promise; analyzeGraph(root: CSElement, options?: GraphAnalysisOptions): Promise; getGraphStatistics(root: CSElement, options?: GraphAnalysisOptions): Promise; getDistance(from: CSElement, to: CSElement, options?: GraphAnalysisOptions): Promise; getNeighbors(node: CSElement, options?: GraphAnalysisOptions): CSElement[]; getDegree(node: CSElement, options?: GraphAnalysisOptions): number; topologicalSort(root: CSElement, options?: GraphAnalysisOptions): Promise; minimumSpanningTree(root: CSElement, options?: GraphAnalysisOptions): Promise; calculateCentrality(root: CSElement, options?: GraphAnalysisOptions): Promise>; getMetrics(): AlgorithmMetrics; clearCache(): void; configure(config: Partial): void; on(event: string, callback: (...args: any[]) => void): void; off(event: string, callback: (...args: any[]) => void): void; } export interface GraphAlgorithmEvent { type: 'algorithm-start' | 'algorithm-progress' | 'algorithm-complete' | 'algorithm-error'; algorithm: string; nodeId?: NodeId; progress?: number; result?: any; error?: Error; timestamp: number; } export type GraphAlgorithmEventCallback = (event: GraphAlgorithmEvent) => void; export interface GraphAlgorithmsConfig { /** Максимальное время выполнения по умолчанию (мс) */ defaultTimeout: number; /** Максимальная глубина по умолчанию */ defaultMaxDepth: number; /** Включить кэширование результатов */ enableCaching: boolean; /** Размер кэша */ cacheSize: number; /** Включить события */ enableEvents: boolean; /** Включить отладочную информацию */ enableDebug: boolean; } export interface AlgorithmCache { /** Кэш результатов поиска путей */ paths: Map; /** Кэш результатов обнаружения циклов */ cycles: Map; /** Кэш результатов анализа компонент */ components: Map; /** Кэш статистики графов */ statistics: Map; /** Время жизни кэша (мс) */ ttl: number; } export interface AlgorithmMetrics { /** Общее количество выполненных алгоритмов */ totalExecutions: number; /** Среднее время выполнения по алгоритмам */ averageExecutionTime: Map; /** Количество попаданий в кэш */ cacheHits: number; /** Количество промахов кэша */ cacheMisses: number; /** Использование памяти */ memoryUsage: number; /** Последнее время выполнения */ lastExecutionTime: number; } export { GraphAlgorithmsManager as default }; //# sourceMappingURL=graph-interfaces.d.ts.map