fast-graph
A robust and fast package for handling graph opperations and algorithms
Description
🚀 Cutting-edge TypeScript library designed to empower developers with a high-performance solution for efficient graph operations and algorithms. With a focus on speed and reliability, this library simplifies the implementation of graph-related tasks, offering a comprehensive set of features for seamless integration into any real world case.
Install
yarn add fast-graph
npm install fast-graph
Real life usecases
- Social Networks: Identify influencers and communities effortlessly.
- Software Dependencies: Streamline module sequencing in large projects.
- Route Optimization: Efficient planning for maps and network routing.
- Task Scheduling: Smooth management of project tasks and dependencies.
- Code Compilation: Parallel execution for faster builds.
- Recommendation Systems: Personalized user insights for better recommendations.
- Supply Chain Optimization: Improve logistics by analyzing distribution networks.
Usage
1. Node Class:
The Node
class represents a node in the graph, holding a unique identifier (id
) and an associated value of generic type (T
). The incomingNeighbors
property tracks incoming edges to the node.
import { Node } from "fast-graph";
const myNode = new Node<string>("uniqueId", "Node Value");
2. Graph Class:
The Graph
class is the core component for graph operations. It allows you to create, manipulate, and perform various algorithms on graphs.
import { Node, Graph } from "fast-graph";
const myGraph = new Graph<string>();
const nodeA = new Node<string>("A", "Node A");
const nodeB = new Node<string>("B", "Node B");
myGraph.addNode(nodeA);
myGraph.addNode(nodeB);
myGraph.addEdge(nodeA, nodeB);
myGraph.removeNode(nodeA);
myGraph.removeEdge(nodeB, nodeA);
const isEmpty = myGraph.isEmpty();
const neighbors = myGraph.getNeighbors(nodeB);
const topologicalOrder = myGraph.kahnTopologicalSort();
myGraph.bfs(node => {
console.log(`Visiting Node ${node.id} with value ${node.value}`);
return SearchAlgorithmNodeBehavior.continue;
});
myGraph.bfs(node => {
console.log(`Visiting Node ${node.id} with value ${node.value}`);
return node.id === "id_your_looking_for"
? SearchAlgorithmNodeBehavior.break
: SearchAlgorithmNodeBehavior.continue;
});
await myGraph.bfsAsync(async node => {
await yourExternalApiCall(node);
return SearchAlgorithmNodeBehavior.continue;
});
myGraph.dfs(node => {
console.log(`Visiting Node ${node.id} with value ${node.value}`);
return SearchAlgorithmNodeBehavior.continue;
});
myGraph.dfs(node => {
console.log(`Visiting Node ${node.id} with value ${node.value}`);
return node.id === "id_your_looking_for"
? SearchAlgorithmNodeBehavior.break
: SearchAlgorithmNodeBehavior.continue;
});
await myGraph.dfsAsync(async node => {
await yourExternalApiCall(node);
return SearchAlgorithmNodeBehavior.continue;
});
Note: Ensure that you handle errors appropriately, as the library throws an error if attempting operations on non-existing nodes or in the presence of cycles.
Algorithm guidelines
Depth-First Search (DFS):
-
Traversal:
- DFS is commonly used for traversing or searching through a graph or tree data structure.
- It explores as far as possible along each branch before backtracking.
-
Connected Components:
- DFS is used to identify connected components in an undirected graph.
-
Cycle Detection:
- DFS can be employed to detect cycles in a graph. If during the traversal, you encounter an already visited node, it indicates the presence of a cycle.
-
Pathfinding:
- DFS can help find paths between two nodes in a graph.
-
Maze Solving:
- DFS is useful for solving mazes and exploring possible paths.
-
Backtracking:
- It's a fundamental algorithm for backtracking problems.
Breadth-First Search (BFS):
-
Shortest Path:
- BFS is commonly used to find the shortest path between two nodes in an unweighted graph.
-
Connected Components:
- Similar to DFS, BFS can identify connected components in an undirected graph.
-
Level Order Traversal:
- BFS is effective for performing level-order traversal of a tree or graph.
-
Maze Solving:
- BFS can be used for maze-solving algorithms.
-
Network Routing:
- BFS is applied in network routing protocols to discover the shortest path.
Kahn's Topological Sort:
-
Directed Acyclic Graph (DAG):
- Kahn's algorithm is used for topological sorting of nodes in a Directed Acyclic Graph (DAG).
-
Dependency Resolution:
- In project management and build systems, Kahn's algorithm helps resolve dependencies between tasks or components.
-
Course Scheduling:
- In academic settings, Kahn's algorithm can be used for scheduling courses, ensuring prerequisites are met.
-
Task Execution Order:
- Kahn's algorithm is useful for determining the order of task execution when tasks have dependencies.
-
Compiler Dependency Analysis:
- In compilers, Kahn's algorithm aids in analyzing and resolving dependencies between modules.
General Considerations:
Each algorithm has its strengths and is well-suited for specific types of problems. The choice depends on the nature of the problem you're solving and the characteristics of your data.
Contributing
Contributions are welcome! Please submit a pull request with any improvements or bug fixes. Make sure to add tests for any new features and bug fixes, and ensure that the existing tests pass.
License
This project is licensed under the MIT License.
Contact
If you need help or have questions, feel free to open an issue in the GitHub repository.