directed-graph-typed 2.2.1 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +135 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs-legacy/index.cjs.map +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm-legacy/index.mjs.map +1 -1
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +96 -2
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +103 -7
- package/dist/types/data-structures/binary-tree/bst.d.ts +156 -13
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +84 -35
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -2
- package/dist/types/data-structures/graph/directed-graph.d.ts +126 -1
- package/dist/types/data-structures/graph/undirected-graph.d.ts +160 -1
- package/dist/types/data-structures/hash/hash-map.d.ts +110 -27
- package/dist/types/data-structures/heap/heap.d.ts +107 -58
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +72 -404
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -5
- package/dist/types/data-structures/queue/deque.d.ts +95 -67
- package/dist/types/data-structures/queue/queue.d.ts +90 -34
- package/dist/types/data-structures/stack/stack.d.ts +58 -40
- package/dist/types/data-structures/trie/trie.d.ts +109 -47
- package/dist/types/interfaces/binary-tree.d.ts +1 -0
- package/dist/umd/directed-graph-typed.js.map +1 -1
- package/dist/umd/directed-graph-typed.min.js.map +1 -1
- package/package.json +2 -2
- package/src/data-structures/binary-tree/avl-tree.ts +96 -2
- package/src/data-structures/binary-tree/binary-tree.ts +117 -7
- package/src/data-structures/binary-tree/bst.ts +322 -13
- package/src/data-structures/binary-tree/red-black-tree.ts +84 -35
- package/src/data-structures/binary-tree/tree-multi-map.ts +2 -2
- package/src/data-structures/graph/directed-graph.ts +126 -1
- package/src/data-structures/graph/undirected-graph.ts +160 -1
- package/src/data-structures/hash/hash-map.ts +110 -27
- package/src/data-structures/heap/heap.ts +107 -58
- package/src/data-structures/linked-list/doubly-linked-list.ts +72 -404
- package/src/data-structures/linked-list/singly-linked-list.ts +121 -5
- package/src/data-structures/queue/deque.ts +95 -67
- package/src/data-structures/queue/queue.ts +90 -34
- package/src/data-structures/stack/stack.ts +58 -40
- package/src/data-structures/trie/trie.ts +109 -47
- package/src/interfaces/binary-tree.ts +2 -0
package/README.md
CHANGED
|
@@ -34,6 +34,141 @@ yarn add directed-graph-typed
|
|
|
34
34
|
|
|
35
35
|
[//]: # (No deletion!!! Start of Example Replace Section)
|
|
36
36
|
|
|
37
|
+
### basic DirectedGraph vertex and edge creation
|
|
38
|
+
```typescript
|
|
39
|
+
// Create a simple directed graph
|
|
40
|
+
const graph = new DirectedGraph<string>();
|
|
41
|
+
|
|
42
|
+
// Add vertices
|
|
43
|
+
graph.addVertex('A');
|
|
44
|
+
graph.addVertex('B');
|
|
45
|
+
graph.addVertex('C');
|
|
46
|
+
|
|
47
|
+
// Verify vertices exist
|
|
48
|
+
console.log(graph.hasVertex('A')); // true;
|
|
49
|
+
console.log(graph.hasVertex('B')); // true;
|
|
50
|
+
console.log(graph.hasVertex('C')); // true;
|
|
51
|
+
console.log(graph.hasVertex('D')); // false;
|
|
52
|
+
|
|
53
|
+
// Check vertex count
|
|
54
|
+
console.log(graph.size); // 3;
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### DirectedGraph edge operations
|
|
58
|
+
```typescript
|
|
59
|
+
const graph = new DirectedGraph<string>();
|
|
60
|
+
|
|
61
|
+
// Add vertices
|
|
62
|
+
graph.addVertex('A');
|
|
63
|
+
graph.addVertex('B');
|
|
64
|
+
graph.addVertex('C');
|
|
65
|
+
|
|
66
|
+
// Add directed edges
|
|
67
|
+
graph.addEdge('A', 'B', 1);
|
|
68
|
+
graph.addEdge('B', 'C', 2);
|
|
69
|
+
graph.addEdge('A', 'C', 3);
|
|
70
|
+
|
|
71
|
+
// Verify edges exist
|
|
72
|
+
console.log(graph.hasEdge('A', 'B')); // true;
|
|
73
|
+
console.log(graph.hasEdge('B', 'C')); // true;
|
|
74
|
+
console.log(graph.hasEdge('C', 'B')); // false; // Graph is directed
|
|
75
|
+
|
|
76
|
+
// Get neighbors of A
|
|
77
|
+
const neighborsA = graph.getNeighbors('A');
|
|
78
|
+
console.log(neighborsA[0].key); // 'B';
|
|
79
|
+
console.log(neighborsA[1].key); // 'C';
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### DirectedGraph deleteEdge and vertex operations
|
|
83
|
+
```typescript
|
|
84
|
+
const graph = new DirectedGraph<string>();
|
|
85
|
+
|
|
86
|
+
// Build a small graph
|
|
87
|
+
graph.addVertex('X');
|
|
88
|
+
graph.addVertex('Y');
|
|
89
|
+
graph.addVertex('Z');
|
|
90
|
+
graph.addEdge('X', 'Y', 1);
|
|
91
|
+
graph.addEdge('Y', 'Z', 2);
|
|
92
|
+
|
|
93
|
+
// Delete an edge
|
|
94
|
+
graph.deleteEdgeSrcToDest('X', 'Y');
|
|
95
|
+
console.log(graph.hasEdge('X', 'Y')); // false;
|
|
96
|
+
|
|
97
|
+
// Edge in other direction should not exist
|
|
98
|
+
console.log(graph.hasEdge('Y', 'X')); // false;
|
|
99
|
+
|
|
100
|
+
// Other edges should remain
|
|
101
|
+
console.log(graph.hasEdge('Y', 'Z')); // true;
|
|
102
|
+
|
|
103
|
+
// Delete a vertex
|
|
104
|
+
graph.deleteVertex('Y');
|
|
105
|
+
console.log(graph.hasVertex('Y')); // false;
|
|
106
|
+
console.log(graph.size); // 2;
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### DirectedGraph topologicalSort for task scheduling
|
|
110
|
+
```typescript
|
|
111
|
+
const graph = new DirectedGraph<string>();
|
|
112
|
+
|
|
113
|
+
// Build a DAG (Directed Acyclic Graph) for task dependencies
|
|
114
|
+
graph.addVertex('Design');
|
|
115
|
+
graph.addVertex('Implement');
|
|
116
|
+
graph.addVertex('Test');
|
|
117
|
+
graph.addVertex('Deploy');
|
|
118
|
+
|
|
119
|
+
// Add dependency edges
|
|
120
|
+
graph.addEdge('Design', 'Implement', 1); // Design must come before Implement
|
|
121
|
+
graph.addEdge('Implement', 'Test', 1); // Implement must come before Test
|
|
122
|
+
graph.addEdge('Test', 'Deploy', 1); // Test must come before Deploy
|
|
123
|
+
|
|
124
|
+
// Topological sort gives valid execution order
|
|
125
|
+
const executionOrder = graph.topologicalSort();
|
|
126
|
+
console.log(executionOrder); // defined;
|
|
127
|
+
console.log(executionOrder); // ['Design', 'Implement', 'Test', 'Deploy'];
|
|
128
|
+
|
|
129
|
+
// All vertices should be included
|
|
130
|
+
console.log(executionOrder?.length); // 4;
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### DirectedGraph dijkstra shortest path for network routing
|
|
134
|
+
```typescript
|
|
135
|
+
// Build a weighted directed graph representing network nodes and costs
|
|
136
|
+
const network = new DirectedGraph<string>();
|
|
137
|
+
|
|
138
|
+
// Add network nodes
|
|
139
|
+
network.addVertex('Router-A');
|
|
140
|
+
network.addVertex('Router-B');
|
|
141
|
+
network.addVertex('Router-C');
|
|
142
|
+
network.addVertex('Router-D');
|
|
143
|
+
network.addVertex('Router-E');
|
|
144
|
+
|
|
145
|
+
// Add weighted edges (network latency costs)
|
|
146
|
+
network.addEdge('Router-A', 'Router-B', 5);
|
|
147
|
+
network.addEdge('Router-A', 'Router-C', 10);
|
|
148
|
+
network.addEdge('Router-B', 'Router-D', 3);
|
|
149
|
+
network.addEdge('Router-C', 'Router-D', 2);
|
|
150
|
+
network.addEdge('Router-D', 'Router-E', 4);
|
|
151
|
+
network.addEdge('Router-B', 'Router-E', 12);
|
|
152
|
+
|
|
153
|
+
// Find shortest path from Router-A to Router-E
|
|
154
|
+
const { minDist, minPath } = network.dijkstra('Router-A', 'Router-E', true, true) || {
|
|
155
|
+
minDist: undefined,
|
|
156
|
+
minPath: undefined
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
// Verify shortest path is found
|
|
160
|
+
console.log(minDist); // defined;
|
|
161
|
+
console.log(minPath); // defined;
|
|
162
|
+
|
|
163
|
+
// Shortest path should be A -> B -> D -> E with cost 5+3+4=12
|
|
164
|
+
// Or A -> C -> D -> E with cost 10+2+4=16
|
|
165
|
+
// So the minimum is 12
|
|
166
|
+
console.log(minDist); // <= 16;
|
|
167
|
+
|
|
168
|
+
// Verify path is valid (includes start and end)
|
|
169
|
+
console.log(minPath?.[0].key); // 'Router-A';
|
|
170
|
+
console.log(minPath?.[minPath.length - 1].key); // 'Router-E';
|
|
171
|
+
```
|
|
37
172
|
|
|
38
173
|
[//]: # (No deletion!!! End of Example Replace Section)
|
|
39
174
|
|