@graphty/algorithms
Version:
Graph algorithms library for browser environments implemented in TypeScript
86 lines • 2.62 kB
TypeScript
import type { NodeId } from "../types/index.js";
/**
* Interface for read-only graph operations
*/
export interface ReadonlyGraph<TNodeId = NodeId> {
nodeCount(): number;
edgeCount(): number;
hasNode(nodeId: TNodeId): boolean;
hasEdge(source: TNodeId, target: TNodeId): boolean;
neighbors(nodeId: TNodeId): IterableIterator<TNodeId>;
outDegree(nodeId: TNodeId): number;
nodes(): IterableIterator<TNodeId>;
}
/**
* Compressed Sparse Row (CSR) graph representation
*
* Provides cache-efficient graph storage with sequential memory access patterns.
* Optimized for traversal operations and sparse graphs.
*/
export declare class CSRGraph<TNodeId = NodeId> implements ReadonlyGraph<TNodeId> {
private data;
constructor(adjacencyList: Map<TNodeId, TNodeId[]>, weights?: Map<string, number>, buildReverse?: boolean);
/**
* Build CSR structure from adjacency list
*/
private buildCSR;
nodeCount(): number;
edgeCount(): number;
hasNode(nodeId: TNodeId): boolean;
hasEdge(source: TNodeId, target: TNodeId): boolean;
/**
* Get neighbors as node IDs
*/
neighbors(nodeId: TNodeId): IterableIterator<TNodeId>;
/**
* Get all nodes
*/
nodes(): IterableIterator<TNodeId>;
/**
* Get neighbors as indices (internal use)
*/
getNeighborIndices(nodeIndex: number): number[];
outDegree(nodeId: TNodeId): number;
/**
* Get out-degree by index (internal use)
*/
outDegreeByIndex(nodeIndex: number): number;
/**
* Iterator support for neighbor indices
*/
iterateNeighborIndices(nodeIndex: number): Generator<number>;
/**
* Iterator support for incoming neighbor indices (for bottom-up BFS)
*/
iterateIncomingNeighborIndices(nodeIndex: number): Generator<number>;
/**
* Convert node ID to index
*/
nodeToIndex(nodeId: TNodeId): number;
/**
* Convert index to node ID
*/
indexToNodeId(index: number): TNodeId;
/**
* Get edge weight
*/
getEdgeWeight(source: TNodeId, target: TNodeId): number | undefined;
/**
* Binary search for target in sorted array
*/
private binarySearch;
/**
* Create CSR graph from standard Graph
*/
static fromGraph<TNodeId = NodeId>(graph: {
nodes(): IterableIterator<{
id: TNodeId;
}>;
neighbors(nodeId: TNodeId): IterableIterator<TNodeId>;
hasNode(nodeId: TNodeId): boolean;
getEdge?(source: TNodeId, target: TNodeId): {
weight?: number;
} | undefined;
}): CSRGraph<TNodeId>;
}
//# sourceMappingURL=csr-graph.d.ts.map