max-priority-queue-typed 2.4.4 → 2.5.0
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 +63 -0
- package/dist/cjs/index.cjs +403 -98
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs-legacy/index.cjs +402 -97
- package/dist/cjs-legacy/index.cjs.map +1 -1
- package/dist/esm/index.mjs +403 -99
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm-legacy/index.mjs +402 -98
- package/dist/esm-legacy/index.mjs.map +1 -1
- package/dist/types/common/error.d.ts +23 -0
- package/dist/types/common/index.d.ts +1 -0
- package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +128 -51
- package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +210 -164
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +439 -78
- package/dist/types/data-structures/binary-tree/bst.d.ts +311 -28
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +217 -31
- package/dist/types/data-structures/binary-tree/segment-tree.d.ts +218 -152
- package/dist/types/data-structures/binary-tree/tree-map.d.ts +1281 -5
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1087 -201
- package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +858 -65
- package/dist/types/data-structures/binary-tree/tree-set.d.ts +1133 -5
- package/dist/types/data-structures/graph/abstract-graph.d.ts +44 -0
- package/dist/types/data-structures/graph/directed-graph.d.ts +220 -47
- package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
- package/dist/types/data-structures/graph/undirected-graph.d.ts +218 -59
- package/dist/types/data-structures/hash/hash-map.d.ts +230 -77
- package/dist/types/data-structures/heap/heap.d.ts +287 -99
- package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
- package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +286 -44
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +278 -65
- package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +415 -12
- package/dist/types/data-structures/matrix/matrix.d.ts +331 -0
- package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
- package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
- package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
- package/dist/types/data-structures/queue/deque.d.ts +313 -66
- package/dist/types/data-structures/queue/queue.d.ts +211 -42
- package/dist/types/data-structures/stack/stack.d.ts +174 -32
- package/dist/types/data-structures/trie/trie.d.ts +213 -43
- package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
- package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
- package/dist/types/types/data-structures/queue/deque.d.ts +6 -0
- package/dist/umd/max-priority-queue-typed.js +400 -95
- package/dist/umd/max-priority-queue-typed.js.map +1 -1
- package/dist/umd/max-priority-queue-typed.min.js +1 -1
- package/dist/umd/max-priority-queue-typed.min.js.map +1 -1
- package/package.json +2 -2
- package/src/common/error.ts +60 -0
- package/src/common/index.ts +2 -0
- package/src/data-structures/base/iterable-element-base.ts +2 -2
- package/src/data-structures/binary-tree/avl-tree.ts +134 -51
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +303 -247
- package/src/data-structures/binary-tree/binary-tree.ts +542 -121
- package/src/data-structures/binary-tree/bst.ts +346 -37
- package/src/data-structures/binary-tree/red-black-tree.ts +309 -96
- package/src/data-structures/binary-tree/segment-tree.ts +372 -248
- package/src/data-structures/binary-tree/tree-map.ts +1292 -13
- package/src/data-structures/binary-tree/tree-multi-map.ts +1098 -215
- package/src/data-structures/binary-tree/tree-multi-set.ts +863 -69
- package/src/data-structures/binary-tree/tree-set.ts +1143 -15
- package/src/data-structures/graph/abstract-graph.ts +106 -1
- package/src/data-structures/graph/directed-graph.ts +223 -47
- package/src/data-structures/graph/map-graph.ts +59 -1
- package/src/data-structures/graph/undirected-graph.ts +299 -59
- package/src/data-structures/hash/hash-map.ts +243 -79
- package/src/data-structures/heap/heap.ts +291 -102
- package/src/data-structures/heap/max-heap.ts +48 -3
- package/src/data-structures/heap/min-heap.ts +59 -0
- package/src/data-structures/linked-list/doubly-linked-list.ts +286 -44
- package/src/data-structures/linked-list/singly-linked-list.ts +278 -65
- package/src/data-structures/linked-list/skip-linked-list.ts +689 -90
- package/src/data-structures/matrix/matrix.ts +425 -22
- package/src/data-structures/priority-queue/max-priority-queue.ts +59 -3
- package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
- package/src/data-structures/priority-queue/priority-queue.ts +60 -0
- package/src/data-structures/queue/deque.ts +343 -68
- package/src/data-structures/queue/queue.ts +211 -42
- package/src/data-structures/stack/stack.ts +174 -32
- package/src/data-structures/trie/trie.ts +215 -44
- package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
- package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
- package/src/types/data-structures/queue/deque.ts +7 -0
- package/src/utils/utils.ts +4 -2
|
@@ -66,65 +66,6 @@ export declare class UndirectedEdge<E = number> extends AbstractEdge<E> {
|
|
|
66
66
|
* console.log(neighborsA[0].key); // 'B';
|
|
67
67
|
* console.log(neighborsA[1].key); // 'C';
|
|
68
68
|
* @example
|
|
69
|
-
* // UndirectedGraph deleteEdge and vertex operations
|
|
70
|
-
* const graph = new UndirectedGraph<string>();
|
|
71
|
-
*
|
|
72
|
-
* // Build a simple undirected graph
|
|
73
|
-
* graph.addVertex('X');
|
|
74
|
-
* graph.addVertex('Y');
|
|
75
|
-
* graph.addVertex('Z');
|
|
76
|
-
* graph.addEdge('X', 'Y', 1);
|
|
77
|
-
* graph.addEdge('Y', 'Z', 2);
|
|
78
|
-
* graph.addEdge('X', 'Z', 3);
|
|
79
|
-
*
|
|
80
|
-
* // Delete an edge
|
|
81
|
-
* graph.deleteEdge('X', 'Y');
|
|
82
|
-
* console.log(graph.hasEdge('X', 'Y')); // false;
|
|
83
|
-
*
|
|
84
|
-
* // Bidirectional deletion confirmed
|
|
85
|
-
* console.log(graph.hasEdge('Y', 'X')); // false;
|
|
86
|
-
*
|
|
87
|
-
* // Other edges should remain
|
|
88
|
-
* console.log(graph.hasEdge('Y', 'Z')); // true;
|
|
89
|
-
* console.log(graph.hasEdge('Z', 'Y')); // true;
|
|
90
|
-
*
|
|
91
|
-
* // Delete a vertex
|
|
92
|
-
* graph.deleteVertex('Y');
|
|
93
|
-
* console.log(graph.hasVertex('Y')); // false;
|
|
94
|
-
* console.log(graph.size); // 2;
|
|
95
|
-
* @example
|
|
96
|
-
* // UndirectedGraph connectivity and neighbors
|
|
97
|
-
* const graph = new UndirectedGraph<string>();
|
|
98
|
-
*
|
|
99
|
-
* // Build a friendship network
|
|
100
|
-
* const people = ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'];
|
|
101
|
-
* for (const person of people) {
|
|
102
|
-
* graph.addVertex(person);
|
|
103
|
-
* }
|
|
104
|
-
*
|
|
105
|
-
* // Add friendships (undirected edges)
|
|
106
|
-
* graph.addEdge('Alice', 'Bob', 1);
|
|
107
|
-
* graph.addEdge('Alice', 'Charlie', 1);
|
|
108
|
-
* graph.addEdge('Bob', 'Diana', 1);
|
|
109
|
-
* graph.addEdge('Charlie', 'Eve', 1);
|
|
110
|
-
* graph.addEdge('Diana', 'Eve', 1);
|
|
111
|
-
*
|
|
112
|
-
* // Get friends of each person
|
|
113
|
-
* const aliceFriends = graph.getNeighbors('Alice');
|
|
114
|
-
* console.log(aliceFriends[0].key); // 'Bob';
|
|
115
|
-
* console.log(aliceFriends[1].key); // 'Charlie';
|
|
116
|
-
* console.log(aliceFriends.length); // 2;
|
|
117
|
-
*
|
|
118
|
-
* const dianaFriends = graph.getNeighbors('Diana');
|
|
119
|
-
* console.log(dianaFriends[0].key); // 'Bob';
|
|
120
|
-
* console.log(dianaFriends[1].key); // 'Eve';
|
|
121
|
-
* console.log(dianaFriends.length); // 2;
|
|
122
|
-
*
|
|
123
|
-
* // Verify bidirectional friendship
|
|
124
|
-
* const bobFriends = graph.getNeighbors('Bob');
|
|
125
|
-
* console.log(bobFriends[0].key); // 'Alice'; // Alice -> Bob -> Alice ✓
|
|
126
|
-
* console.log(bobFriends[1].key); // 'Diana';
|
|
127
|
-
* @example
|
|
128
69
|
* // UndirectedGraph for social network connectivity analysis
|
|
129
70
|
* interface Person {
|
|
130
71
|
* id: number;
|
|
@@ -233,6 +174,21 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
233
174
|
* @param v2 - The other vertex or key.
|
|
234
175
|
* @returns Edge instance or `undefined`.
|
|
235
176
|
* @remarks Time O(1) avg, Space O(1)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
* @example
|
|
186
|
+
* // Get edge between vertices
|
|
187
|
+
* const g = new UndirectedGraph();
|
|
188
|
+
* g.addVertex('A');
|
|
189
|
+
* g.addVertex('B');
|
|
190
|
+
* g.addEdge('A', 'B', 7);
|
|
191
|
+
* console.log(g.getEdge('A', 'B')?.weight); // 7;
|
|
236
192
|
*/
|
|
237
193
|
getEdge(v1: VO | VertexKey | undefined, v2: VO | VertexKey | undefined): EO | undefined;
|
|
238
194
|
/**
|
|
@@ -249,6 +205,44 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
249
205
|
* @param otherSideVertexKey - Required second endpoint when deleting by pair.
|
|
250
206
|
* @returns Removed edge or `undefined`.
|
|
251
207
|
* @remarks Time O(1) avg, Space O(1)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
* @example
|
|
220
|
+
* // UndirectedGraph deleteEdge and vertex operations
|
|
221
|
+
* const graph = new UndirectedGraph<string>();
|
|
222
|
+
*
|
|
223
|
+
* // Build a simple undirected graph
|
|
224
|
+
* graph.addVertex('X');
|
|
225
|
+
* graph.addVertex('Y');
|
|
226
|
+
* graph.addVertex('Z');
|
|
227
|
+
* graph.addEdge('X', 'Y', 1);
|
|
228
|
+
* graph.addEdge('Y', 'Z', 2);
|
|
229
|
+
* graph.addEdge('X', 'Z', 3);
|
|
230
|
+
*
|
|
231
|
+
* // Delete an edge
|
|
232
|
+
* graph.deleteEdge('X', 'Y');
|
|
233
|
+
* console.log(graph.hasEdge('X', 'Y')); // false;
|
|
234
|
+
*
|
|
235
|
+
* // Bidirectional deletion confirmed
|
|
236
|
+
* console.log(graph.hasEdge('Y', 'X')); // false;
|
|
237
|
+
*
|
|
238
|
+
* // Other edges should remain
|
|
239
|
+
* console.log(graph.hasEdge('Y', 'Z')); // true;
|
|
240
|
+
* console.log(graph.hasEdge('Z', 'Y')); // true;
|
|
241
|
+
*
|
|
242
|
+
* // Delete a vertex
|
|
243
|
+
* graph.deleteVertex('Y');
|
|
244
|
+
* console.log(graph.hasVertex('Y')); // false;
|
|
245
|
+
* console.log(graph.size); // 2;
|
|
252
246
|
*/
|
|
253
247
|
deleteEdge(edgeOrOneSideVertexKey: EO | VertexKey, otherSideVertexKey?: VertexKey): EO | undefined;
|
|
254
248
|
/**
|
|
@@ -256,6 +250,22 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
256
250
|
* @param vertexOrKey - Vertex or key.
|
|
257
251
|
* @returns `true` if removed; otherwise `false`.
|
|
258
252
|
* @remarks Time O(deg), Space O(1)
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
* @example
|
|
262
|
+
* // Remove vertex and edges
|
|
263
|
+
* const g = new UndirectedGraph();
|
|
264
|
+
* g.addVertex('A');
|
|
265
|
+
* g.addVertex('B');
|
|
266
|
+
* g.addEdge('A', 'B');
|
|
267
|
+
* g.deleteVertex('A');
|
|
268
|
+
* console.log(g.hasVertex('A')); // false;
|
|
259
269
|
*/
|
|
260
270
|
deleteVertex(vertexOrKey: VO | VertexKey): boolean;
|
|
261
271
|
/**
|
|
@@ -276,8 +286,69 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
276
286
|
* Unique set of undirected edges across endpoints.
|
|
277
287
|
* @returns Array of edges.
|
|
278
288
|
* @remarks Time O(E), Space O(E)
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
* @example
|
|
298
|
+
* // Get all edges
|
|
299
|
+
* const g = new UndirectedGraph();
|
|
300
|
+
* g.addVertex('A');
|
|
301
|
+
* g.addVertex('B');
|
|
302
|
+
* g.addEdge('A', 'B');
|
|
303
|
+
* console.log(g.edgeSet().length); // 1;
|
|
279
304
|
*/
|
|
280
305
|
edgeSet(): EO[];
|
|
306
|
+
/**
|
|
307
|
+
* UndirectedGraph connectivity and neighbors
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
* @example
|
|
320
|
+
* // UndirectedGraph connectivity and neighbors
|
|
321
|
+
* const graph = new UndirectedGraph<string>();
|
|
322
|
+
*
|
|
323
|
+
* // Build a friendship network
|
|
324
|
+
* const people = ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'];
|
|
325
|
+
* for (const person of people) {
|
|
326
|
+
* graph.addVertex(person);
|
|
327
|
+
* }
|
|
328
|
+
*
|
|
329
|
+
* // Add friendships (undirected edges)
|
|
330
|
+
* graph.addEdge('Alice', 'Bob', 1);
|
|
331
|
+
* graph.addEdge('Alice', 'Charlie', 1);
|
|
332
|
+
* graph.addEdge('Bob', 'Diana', 1);
|
|
333
|
+
* graph.addEdge('Charlie', 'Eve', 1);
|
|
334
|
+
* graph.addEdge('Diana', 'Eve', 1);
|
|
335
|
+
*
|
|
336
|
+
* // Get friends of each person
|
|
337
|
+
* const aliceFriends = graph.getNeighbors('Alice');
|
|
338
|
+
* console.log(aliceFriends[0].key); // 'Bob';
|
|
339
|
+
* console.log(aliceFriends[1].key); // 'Charlie';
|
|
340
|
+
* console.log(aliceFriends.length); // 2;
|
|
341
|
+
*
|
|
342
|
+
* const dianaFriends = graph.getNeighbors('Diana');
|
|
343
|
+
* console.log(dianaFriends[0].key); // 'Bob';
|
|
344
|
+
* console.log(dianaFriends[1].key); // 'Eve';
|
|
345
|
+
* console.log(dianaFriends.length); // 2;
|
|
346
|
+
*
|
|
347
|
+
* // Verify bidirectional friendship
|
|
348
|
+
* const bobFriends = graph.getNeighbors('Bob');
|
|
349
|
+
* console.log(bobFriends[0].key); // 'Alice'; // Alice -> Bob -> Alice ✓
|
|
350
|
+
* console.log(bobFriends[1].key); // 'Diana';
|
|
351
|
+
*/
|
|
281
352
|
getNeighbors(vertexOrKey: VO | VertexKey): VO[];
|
|
282
353
|
/**
|
|
283
354
|
* Resolve an edge's two endpoints to vertex instances.
|
|
@@ -306,6 +377,24 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
306
377
|
* Tarjan-based bridge and articulation point detection.
|
|
307
378
|
* @returns `{ dfnMap, lowMap, bridges, cutVertices }`.
|
|
308
379
|
* @remarks Time O(V + E), Space O(V + E)
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
* @example
|
|
389
|
+
* // Find articulation points and bridges
|
|
390
|
+
* const g = new UndirectedGraph();
|
|
391
|
+
* g.addVertex('A');
|
|
392
|
+
* g.addVertex('B');
|
|
393
|
+
* g.addVertex('C');
|
|
394
|
+
* g.addEdge('A', 'B');
|
|
395
|
+
* g.addEdge('B', 'C');
|
|
396
|
+
* const result = g.tarjan();
|
|
397
|
+
* console.log(result); // defined;
|
|
309
398
|
*/
|
|
310
399
|
tarjan(): {
|
|
311
400
|
dfnMap: Map<VO, number>;
|
|
@@ -313,16 +402,86 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
313
402
|
bridges: EO[];
|
|
314
403
|
cutVertices: VO[];
|
|
315
404
|
};
|
|
405
|
+
/**
|
|
406
|
+
* Find biconnected components using edge-stack Tarjan variant.
|
|
407
|
+
* A biconnected component is a maximal biconnected subgraph.
|
|
408
|
+
* @returns Array of edge arrays, each representing a biconnected component.
|
|
409
|
+
* @remarks Time O(V + E), Space O(V + E)
|
|
410
|
+
*/
|
|
411
|
+
getBiconnectedComponents(): EO[][];
|
|
412
|
+
/**
|
|
413
|
+
* Detect whether the graph contains a cycle.
|
|
414
|
+
* Uses DFS with parent tracking.
|
|
415
|
+
* @returns `true` if a cycle exists, `false` otherwise.
|
|
416
|
+
* @remarks Time O(V + E), Space O(V)
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
* @example
|
|
426
|
+
* // Detect cycle
|
|
427
|
+
* const g = new UndirectedGraph();
|
|
428
|
+
* g.addVertex('A');
|
|
429
|
+
* g.addVertex('B');
|
|
430
|
+
* g.addVertex('C');
|
|
431
|
+
* g.addEdge('A', 'B');
|
|
432
|
+
* g.addEdge('B', 'C');
|
|
433
|
+
* console.log(g.hasCycle()); // false;
|
|
434
|
+
* g.addEdge('C', 'A');
|
|
435
|
+
* console.log(g.hasCycle()); // true;
|
|
436
|
+
*/
|
|
437
|
+
hasCycle(): boolean;
|
|
316
438
|
/**
|
|
317
439
|
* Get bridges discovered by `tarjan()`.
|
|
318
440
|
* @returns Array of edges that are bridges.
|
|
319
441
|
* @remarks Time O(B), Space O(1)
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
* @example
|
|
451
|
+
* // Find bridge edges
|
|
452
|
+
* const g = new UndirectedGraph();
|
|
453
|
+
* g.addVertex('A');
|
|
454
|
+
* g.addVertex('B');
|
|
455
|
+
* g.addVertex('C');
|
|
456
|
+
* g.addEdge('A', 'B');
|
|
457
|
+
* g.addEdge('B', 'C');
|
|
458
|
+
* const bridges = g.getBridges();
|
|
459
|
+
* console.log(bridges.length); // 2;
|
|
320
460
|
*/
|
|
321
461
|
getBridges(): EO[];
|
|
322
462
|
/**
|
|
323
463
|
* Get articulation points discovered by `tarjan()`.
|
|
324
464
|
* @returns Array of cut vertices.
|
|
325
465
|
* @remarks Time O(C), Space O(1)
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
* @example
|
|
475
|
+
* // Find articulation points
|
|
476
|
+
* const g = new UndirectedGraph();
|
|
477
|
+
* g.addVertex('A');
|
|
478
|
+
* g.addVertex('B');
|
|
479
|
+
* g.addVertex('C');
|
|
480
|
+
* g.addEdge('A', 'B');
|
|
481
|
+
* g.addEdge('B', 'C');
|
|
482
|
+
* const cuts = g.getCutVertices();
|
|
483
|
+
* console.log(cuts.length); // 1;
|
|
484
|
+
* console.log(cuts[0].key); // 'B';
|
|
326
485
|
*/
|
|
327
486
|
getCutVertices(): VO[];
|
|
328
487
|
/**
|