typescript-dsa-stl 2.8.0 → 3.0.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 +124 -183
- package/dist/algorithms/graph.d.ts +36 -0
- package/dist/algorithms/graph.d.ts.map +1 -1
- package/dist/algorithms/graph.js +122 -0
- package/dist/algorithms/graph.js.map +1 -1
- package/dist/algorithms/index.d.ts +3 -2
- package/dist/algorithms/index.d.ts.map +1 -1
- package/dist/algorithms/index.js +2 -1
- package/dist/algorithms/index.js.map +1 -1
- package/dist/algorithms/trie.d.ts +23 -0
- package/dist/algorithms/trie.d.ts.map +1 -0
- package/dist/algorithms/trie.js +80 -0
- package/dist/algorithms/trie.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ STL-style data structures and algorithms for TypeScript: **Vector**, **Stack**,
|
|
|
18
18
|
| [Collections](#collections) | Deque, nested vectors, multi-map / multi-set |
|
|
19
19
|
| [Segment trees](#segment-trees) | Overview, variants, and examples (one section) |
|
|
20
20
|
| [Graph algorithms](#graph-algorithms) | Adjacency lists, BFS/DFS, topological sort, components, MST, shortest paths |
|
|
21
|
-
| [String algorithms](#string-algorithms) | KMP, Rabin–Karp, rolling hash |
|
|
21
|
+
| [String algorithms](#string-algorithms) | KMP, Rabin–Karp, Trie, rolling hash |
|
|
22
22
|
| [For maintainers](#for-maintainers) | Build and publish |
|
|
23
23
|
| [License](#license) | MIT |
|
|
24
24
|
|
|
@@ -49,6 +49,7 @@ import {
|
|
|
49
49
|
topologicalSortIndegree,
|
|
50
50
|
KnuthMorrisPratt,
|
|
51
51
|
RabinKarp,
|
|
52
|
+
Trie,
|
|
52
53
|
StringRollingHash,
|
|
53
54
|
} from 'typescript-dsa-stl/algorithms';
|
|
54
55
|
import { clamp, range } from 'typescript-dsa-stl/utils';
|
|
@@ -166,15 +167,15 @@ range(0, 5); // [0, 1, 2, 3, 4]
|
|
|
166
167
|
| Area | Exports |
|
|
167
168
|
|------|---------|
|
|
168
169
|
| **Collections** | `Vector`, `Stack`, `Queue`, `Deque`, `List`, `ListNode`, `PriorityQueue`, `OrderedMap`, `UnorderedMap`, `OrderedSet`, `UnorderedSet`, `OrderedMultiMap`, `OrderedMultiSet`, `GeneralSegmentTree`, `SegmentTree`, `SegmentTreeSum`, `SegmentTreeMin`, `SegmentTreeMax`, `LazySegmentTreeSum`, `WeightedEdge`, `AdjacencyList`, `WeightedAdjacencyList`, `createAdjacencyList`, `createWeightedAdjacencyList`, `addEdge`, `deleteEdge` |
|
|
169
|
-
| **Algorithms** | `sort`, `find`, `findIndex`, `transform`, `filter`, `reduce`, `reverse`, `unique`, `binarySearch`, `lowerBound`, `upperBound`, `min`, `max`, `partition`, `DisjointSetUnion`, `KnuthMorrisPratt`, `RabinKarp`, `RABIN_KARP_DEFAULT_MODS`, `StringRollingHash`, `breadthFirstSearch`, `depthFirstSearch`, `topologicalSortStack`, `topologicalSortIndegree`, `connectedComponents`, `kruskalMST`, `dijkstra`, `reconstructPath` |
|
|
170
|
+
| **Algorithms** | `sort`, `find`, `findIndex`, `transform`, `filter`, `reduce`, `reverse`, `unique`, `binarySearch`, `lowerBound`, `upperBound`, `min`, `max`, `partition`, `DisjointSetUnion`, `KnuthMorrisPratt`, `RabinKarp`, `Trie`, `RABIN_KARP_DEFAULT_MODS`, `StringRollingHash`, `breadthFirstSearch`, `depthFirstSearch`, `topologicalSortStack`, `topologicalSortIndegree`, `connectedComponents`, `kruskalMST`, `dijkstra`, `bellmanFord`, `floydWarshall`, `reconstructPath`, `reconstructFloydWarshallPath` |
|
|
170
171
|
| **Utils** | `clamp`, `range`, `noop`, `identity`, `swap` |
|
|
171
|
-
| **Types** | `Comparator`, `Predicate`, `UnaryFn`, `Reducer`, `IterableLike`, `toArray`, `RabinKarpTripleMods`, `WeightedUndirectedEdge`, `TopologicalSortResult`, `GeneralSegmentTreeConfig`, `SegmentCombine`, `SegmentMerge`, `SegmentLeafBuild` |
|
|
172
|
+
| **Types** | `Comparator`, `Predicate`, `UnaryFn`, `Reducer`, `IterableLike`, `toArray`, `RabinKarpTripleMods`, `WeightedUndirectedEdge`, `TopologicalSortResult`, `BellmanFordResult`, `FloydWarshallResult`, `GeneralSegmentTreeConfig`, `SegmentCombine`, `SegmentMerge`, `SegmentLeafBuild` |
|
|
172
173
|
|
|
173
174
|
### Subpath imports (tree-shaking)
|
|
174
175
|
|
|
175
176
|
```ts
|
|
176
177
|
import { Vector, Stack, Queue, Deque } from 'typescript-dsa-stl/collections';
|
|
177
|
-
import { sort, binarySearch, breadthFirstSearch, depthFirstSearch, topologicalSortStack, topologicalSortIndegree, KnuthMorrisPratt, RabinKarp, StringRollingHash } from 'typescript-dsa-stl/algorithms';
|
|
178
|
+
import { sort, binarySearch, breadthFirstSearch, depthFirstSearch, topologicalSortStack, topologicalSortIndegree, dijkstra, bellmanFord, floydWarshall, KnuthMorrisPratt, RabinKarp, Trie, StringRollingHash } from 'typescript-dsa-stl/algorithms';
|
|
178
179
|
import { clamp, range } from 'typescript-dsa-stl/utils';
|
|
179
180
|
import type { Comparator } from 'typescript-dsa-stl/types';
|
|
180
181
|
```
|
|
@@ -277,23 +278,23 @@ cube.at(0).at(1).at(0); // 3 (layer 0, row 1, col 0)
|
|
|
277
278
|
|
|
278
279
|
### OrderedMultiMap and OrderedMultiSet — use cases
|
|
279
280
|
|
|
280
|
-
**OrderedMultiSet**
|
|
281
|
+
**OrderedMultiSet** keeps values sorted and allows duplicates.
|
|
281
282
|
|
|
282
283
|
| Use case | Example |
|
|
283
284
|
|----------|---------|
|
|
284
|
-
| **
|
|
285
|
-
| **
|
|
286
|
-
| **K-th smallest
|
|
287
|
-
| **Range
|
|
285
|
+
| **Leaderboard with ties** | Store repeated scores and iterate sorted. |
|
|
286
|
+
| **Timeline with duplicate times** | Keep events sorted even with same timestamp. |
|
|
287
|
+
| **K-th smallest** | Iterate sorted values and pick index `k - 1`. |
|
|
288
|
+
| **Range stats** | Count values inside `[low, high]`. |
|
|
288
289
|
|
|
289
|
-
**OrderedMultiMap**
|
|
290
|
+
**OrderedMultiMap** stores multiple values per key while keeping keys sorted.
|
|
290
291
|
|
|
291
292
|
| Use case | Example |
|
|
292
293
|
|----------|---------|
|
|
293
|
-
| **Inverted index** |
|
|
294
|
-
| **Grouping
|
|
295
|
-
| **One-to-many
|
|
296
|
-
| **Time
|
|
294
|
+
| **Inverted index** | `term -> docIds`. |
|
|
295
|
+
| **Grouping** | `category -> items`. |
|
|
296
|
+
| **One-to-many mapping** | `userId -> sessionIds`. |
|
|
297
|
+
| **Time buckets** | `bucket -> events`, in key order. |
|
|
297
298
|
|
|
298
299
|
**OrderedMultiSet example:**
|
|
299
300
|
|
|
@@ -329,9 +330,7 @@ for (const [key, value] of index) {
|
|
|
329
330
|
|
|
330
331
|
### Segment tree overview and complexity
|
|
331
332
|
|
|
332
|
-
A segment tree
|
|
333
|
-
|
|
334
|
-
Segment trees support **range queries** and **point updates** in **O(log n)**. Range endpoints are **inclusive**: `query(l, r)` covers indices `l` through `r`.
|
|
333
|
+
A segment tree supports fast **range queries** and **updates**. For this package, ranges are inclusive: `query(l, r)`.
|
|
335
334
|
|
|
336
335
|
**What each type does:**
|
|
337
336
|
|
|
@@ -344,7 +343,7 @@ Segment trees support **range queries** and **point updates** in **O(log n)**. R
|
|
|
344
343
|
|
|
345
344
|
| Structure | Build | Point update | Range query | Extra |
|
|
346
345
|
|-----------|-------|--------------|-------------|--------|
|
|
347
|
-
| **GeneralSegmentTree**, **SegmentTree**, **SegmentTreeSum** / **Min** / **Max** | O(n) | O(log n) | O(log n) | Inclusive `[l, r]`;
|
|
346
|
+
| **GeneralSegmentTree**, **SegmentTree**, **SegmentTreeSum** / **Min** / **Max** | O(n) | O(log n) | O(log n) | Inclusive `[l, r]`; `GeneralSegmentTree` uses raw `V` + summary `T` |
|
|
348
347
|
| **LazySegmentTreeSum** | O(n) | `set`: O(log n) | `rangeSum`: O(log n) | `rangeAdd` on a range: O(log n) |
|
|
349
348
|
|
|
350
349
|
### Segment tree: Sum, Min, Max and example
|
|
@@ -353,7 +352,7 @@ Segment trees support **range queries** and **point updates** in **O(log n)**. R
|
|
|
353
352
|
- **`SegmentTreeMin`** — answers “what is the **minimum** in `[l, r]`?” after single-index updates.
|
|
354
353
|
- **`SegmentTreeMax`** — answers “what is the **maximum** in `[l, r]`?” after single-index updates.
|
|
355
354
|
|
|
356
|
-
|
|
355
|
+
These are fixed numeric trees with `update(i, value)` and inclusive `query(l, r)`.
|
|
357
356
|
|
|
358
357
|
```ts
|
|
359
358
|
import {
|
|
@@ -374,7 +373,7 @@ const mx = new SegmentTreeMax([5, 2, 8, 1]);
|
|
|
374
373
|
console.log(mx.query(0, 3)); // 8
|
|
375
374
|
```
|
|
376
375
|
|
|
377
|
-
**Example
|
|
376
|
+
**Example use case:** fixed buckets (day/hour), range totals, and single-bucket corrections.
|
|
378
377
|
|
|
379
378
|
```ts
|
|
380
379
|
import { SegmentTreeSum } from 'typescript-dsa-stl';
|
|
@@ -404,11 +403,11 @@ january.setDay(2, 1150); // corrected day 2
|
|
|
404
403
|
console.log(january.totalBetweenDay(1, 3)); // sum over days 1..3
|
|
405
404
|
```
|
|
406
405
|
|
|
407
|
-
In production
|
|
406
|
+
In production, persist raw values and rebuild the tree when the period reloads.
|
|
408
407
|
|
|
409
408
|
### Generic SegmentTree
|
|
410
409
|
|
|
411
|
-
**`SegmentTree<T>`** supports
|
|
410
|
+
**`SegmentTree<T>`** supports any associative combine (gcd, concat, bitwise OR, etc.) with point updates. Provide `combine` and a neutral value.
|
|
412
411
|
|
|
413
412
|
```ts
|
|
414
413
|
import { SegmentTree } from 'typescript-dsa-stl';
|
|
@@ -440,13 +439,13 @@ console.log(strTree.query(0, 2)); // 'abc'
|
|
|
440
439
|
|
|
441
440
|
### GeneralSegmentTree
|
|
442
441
|
|
|
443
|
-
**`GeneralSegmentTree<T, V>`** keeps
|
|
442
|
+
**`GeneralSegmentTree<T, V>`** keeps raw values as `V` and segment summaries as `T`.
|
|
444
443
|
|
|
445
|
-
You
|
|
444
|
+
You provide:
|
|
446
445
|
|
|
447
|
-
- **`merge(left, right)
|
|
448
|
-
- **`neutral
|
|
449
|
-
- **`buildLeaf(value, index)
|
|
446
|
+
- **`merge(left, right)`**: combine child summaries.
|
|
447
|
+
- **`neutral`**: identity for non-overlapping ranges.
|
|
448
|
+
- **`buildLeaf(value, index)`**: build a leaf from raw `V`.
|
|
450
449
|
|
|
451
450
|
```ts
|
|
452
451
|
import { GeneralSegmentTree } from 'typescript-dsa-stl';
|
|
@@ -464,9 +463,9 @@ console.log(st.rawAt(1)); // 4 — current raw value at index 1
|
|
|
464
463
|
|
|
465
464
|
### LazySegmentTreeSum and example
|
|
466
465
|
|
|
467
|
-
**`LazySegmentTreeSum`**
|
|
466
|
+
**`LazySegmentTreeSum`** supports range add, point set, and range sum in **O(log n)** using lazy propagation.
|
|
468
467
|
|
|
469
|
-
|
|
468
|
+
`rangeAdd(l, r, delta)` updates a whole range, `rangeSum(l, r)` queries a range, and `set(i, value)` updates one index.
|
|
470
469
|
|
|
471
470
|
```ts
|
|
472
471
|
import { LazySegmentTreeSum } from 'typescript-dsa-stl';
|
|
@@ -478,7 +477,7 @@ lazy.set(0, 100);
|
|
|
478
477
|
console.log(lazy.rangeSum(0, 3)); // 100 + 5 + 5 + 0
|
|
479
478
|
```
|
|
480
479
|
|
|
481
|
-
**Example
|
|
480
|
+
**Example use case:** apply one delta to a range, then query subtotals.
|
|
482
481
|
|
|
483
482
|
```ts
|
|
484
483
|
import { LazySegmentTreeSum } from 'typescript-dsa-stl';
|
|
@@ -499,17 +498,17 @@ function simulateBulkBonusAndSubtotal(seatCount: number): void {
|
|
|
499
498
|
simulateBulkBonusAndSubtotal(100);
|
|
500
499
|
```
|
|
501
500
|
|
|
502
|
-
|
|
501
|
+
Same pattern works for inventory ranges, loyalty batches, and simulation buffs.
|
|
503
502
|
|
|
504
503
|
---
|
|
505
504
|
|
|
506
505
|
## Graph algorithms
|
|
507
506
|
|
|
508
|
-
Graph helpers
|
|
507
|
+
Graph helpers are available from the main package and `typescript-dsa-stl/collections`.
|
|
509
508
|
|
|
510
509
|
### Adjacency list (like C++ `vector<vector<type>> graph(n)`)
|
|
511
510
|
|
|
512
|
-
|
|
511
|
+
Use these types/helpers to model C++-style adjacency lists.
|
|
513
512
|
|
|
514
513
|
#### Unweighted adjacency list
|
|
515
514
|
|
|
@@ -589,31 +588,19 @@ deleteEdge(graph, u, v, w); // delete all edges u -> v with weight w
|
|
|
589
588
|
|
|
590
589
|
#### Graph adjacency list — use cases
|
|
591
590
|
|
|
592
|
-
Use
|
|
591
|
+
Use **unweighted** lists for connectivity/traversal; use **weighted** lists when edges have costs.
|
|
593
592
|
|
|
594
593
|
| Use case | When to use |
|
|
595
594
|
|----------|-------------|
|
|
596
|
-
| **BFS / DFS, connectivity** | Unweighted
|
|
597
|
-
| **Shortest path
|
|
598
|
-
| **Social / dependency graphs** |
|
|
599
|
-
| **Grid / game graphs** | Unweighted
|
|
600
|
-
| **Network / flow** | Weighted
|
|
595
|
+
| **BFS / DFS, connectivity** | Unweighted hop-based traversal and components. |
|
|
596
|
+
| **Shortest path, MST** | Weighted edges for distance/cost problems. |
|
|
597
|
+
| **Social / dependency graphs** | Use either, depending on whether edges have weights. |
|
|
598
|
+
| **Grid / game graphs** | Unweighted for equal moves; weighted for variable move cost. |
|
|
599
|
+
| **Network / flow** | Weighted capacity/latency models. |
|
|
601
600
|
|
|
602
601
|
### Breadth-first search (BFS) and depth-first search (DFS)
|
|
603
602
|
|
|
604
|
-
`breadthFirstSearch` and `depthFirstSearch` take
|
|
605
|
-
|
|
606
|
-
**Example graph (diamond):** edges `0—1`, `0—2`, `1—3`, `2—3`.
|
|
607
|
-
|
|
608
|
-
```text
|
|
609
|
-
0
|
|
610
|
-
/ \
|
|
611
|
-
1 2
|
|
612
|
-
\ /
|
|
613
|
-
3
|
|
614
|
-
```
|
|
615
|
-
|
|
616
|
-
With neighbors listed in ascending vertex id (`0: [1,2]`, `1: [0,3]`, …), **BFS** from `0` visits by increasing distance from `0`: first `0`, then `1` and `2`, then `3` → order `[0, 1, 2, 3]`. **DFS** (preorder, first neighbor in each list first) goes `0 → 1 → 3` then `2` → order `[0, 1, 3, 2]`. The exact DFS order depends on how you order each adjacency list.
|
|
603
|
+
`breadthFirstSearch` and `depthFirstSearch` take `n`, an unweighted `AdjacencyList`, and `start`. They return traversal order for vertices reachable from `start`.
|
|
617
604
|
|
|
618
605
|
```ts
|
|
619
606
|
import {
|
|
@@ -626,7 +613,6 @@ import {
|
|
|
626
613
|
const n = 4;
|
|
627
614
|
const graph = createAdjacencyList(n);
|
|
628
615
|
|
|
629
|
-
// Undirected diamond: add both directions for each edge
|
|
630
616
|
addEdge(graph, 0, 1);
|
|
631
617
|
addEdge(graph, 1, 0);
|
|
632
618
|
addEdge(graph, 0, 2);
|
|
@@ -636,55 +622,17 @@ addEdge(graph, 3, 1);
|
|
|
636
622
|
addEdge(graph, 2, 3);
|
|
637
623
|
addEdge(graph, 3, 2);
|
|
638
624
|
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
// BFS: level-by-level from start (hop count); output: [0, 1, 2, 3]
|
|
642
|
-
console.log(breadthFirstSearch(n, graph, start));
|
|
643
|
-
// Expected console output: [ 0, 1, 2, 3 ]
|
|
644
|
-
|
|
645
|
-
// DFS: preorder with explicit stack; output: [0, 1, 3, 2] for this adjacency layout
|
|
646
|
-
console.log(depthFirstSearch(n, graph, start));
|
|
647
|
-
// Expected console output: [ 0, 1, 3, 2 ]
|
|
648
|
-
|
|
649
|
-
// Invalid start → empty traversal
|
|
650
|
-
console.log(breadthFirstSearch(n, graph, -1)); // []
|
|
651
|
-
console.log(depthFirstSearch(n, graph, n)); // []
|
|
652
|
-
|
|
653
|
-
// Vertex 4 isolated: BFS/DFS from 0 never visits 4
|
|
654
|
-
const withIsolated = createAdjacencyList(5);
|
|
655
|
-
addEdge(withIsolated, 0, 1);
|
|
656
|
-
addEdge(withIsolated, 1, 0);
|
|
657
|
-
console.log(breadthFirstSearch(5, withIsolated, 0)); // [0, 1] — not [0,1,2,3,4]
|
|
625
|
+
console.log(breadthFirstSearch(n, graph, 0)); // [0, 1, 2, 3]
|
|
626
|
+
console.log(depthFirstSearch(n, graph, 0)); // [0, 1, 3, 2]
|
|
658
627
|
```
|
|
659
628
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
- **Directed graphs:** only list outgoing edges in `adj[u]`; traversal follows arcs from `start`.
|
|
663
|
-
- **Disconnected graphs:** run again from another unvisited `start`, or use `connectedComponents` to enumerate components first.
|
|
664
|
-
- **Weighted graphs:** for traversal ignoring weights, use the same vertex lists as the unweighted graph (weights are ignored by these two functions).
|
|
629
|
+
For undirected graphs, add both directions. DFS order depends on neighbor order.
|
|
665
630
|
|
|
666
631
|
### Topological sort
|
|
667
632
|
|
|
668
|
-
`topologicalSortStack` (
|
|
669
|
-
|
|
670
|
-
**When to use**
|
|
671
|
-
|
|
672
|
-
- **Task / build / dependency ordering:** items must happen only after their prerequisites (package install order, compile steps, course prerequisites).
|
|
673
|
-
- **Scheduling under precedence constraints:** jobs with “A before B” rules and no cycles.
|
|
674
|
-
- **Detecting cycles in a directed model:** if `ok` is false, the graph (on valid vertices `0..n-1`) is not a DAG.
|
|
675
|
-
- **Pick either algorithm:** both answer the same yes/no; choose **stack** if you want DFS-style behavior and an explicit stack; choose **indegree** (Kahn) if you prefer peeling sources level-by-level (often closer to “ready queue” mental models).
|
|
676
|
-
|
|
677
|
-
**When topological order is not possible**
|
|
633
|
+
`topologicalSortStack` (DFS-style) and `topologicalSortIndegree` (Kahn) take `n` and a directed unweighted `AdjacencyList`. Both return `{ order, ok }`.
|
|
678
634
|
|
|
679
|
-
|
|
680
|
-
- **Undirected** graphs modeled with **both** `u → v` and `v → u`: that is a 2-cycle, so **not** a DAG unless you only use directed edges that reflect real precedence.
|
|
681
|
-
|
|
682
|
-
**Example (how to call it and use the result)**
|
|
683
|
-
|
|
684
|
-
Both functions return the same shape: **`TopologicalSortResult`** — `{ order: number[]; ok: boolean }`.
|
|
685
|
-
|
|
686
|
-
- **`ok === true`:** `order` is a **permutation of `0..n-1`**; every edge `u → v` appears with `u` before `v` in `order`.
|
|
687
|
-
- **`ok === false`:** **no** full topological order exists (directed cycle). For `topologicalSortStack`, `order` is `[]`. For `topologicalSortIndegree`, `order` may list only some vertices; **do not** treat it as a complete sort.
|
|
635
|
+
Use it for dependency ordering. If `ok` is `false`, the graph has a cycle.
|
|
688
636
|
|
|
689
637
|
```ts
|
|
690
638
|
import {
|
|
@@ -702,81 +650,22 @@ addEdge(g, 0, 2);
|
|
|
702
650
|
addEdge(g, 1, 3);
|
|
703
651
|
addEdge(g, 2, 3);
|
|
704
652
|
|
|
705
|
-
|
|
706
|
-
const result: TopologicalSortResult = topologicalSortStack(n, g);
|
|
707
|
-
|
|
708
|
-
// Usually destructure
|
|
709
|
-
const { order, ok } = topologicalSortIndegree(n, g);
|
|
710
|
-
|
|
711
|
-
if (ok) {
|
|
712
|
-
// `order` here is from `topologicalSortIndegree` above → [0, 1, 2, 3] for this graph.
|
|
713
|
-
|
|
714
|
-
// 1) See the whole sequence at once
|
|
715
|
-
console.log(order);
|
|
716
|
-
// → [ 0, 1, 2, 3 ] (Node.js / browser consoles may add line breaks or “Array(4)” styling)
|
|
717
|
-
|
|
718
|
-
// 2) How many steps (same as n when ok is true)
|
|
719
|
-
console.log(order.length);
|
|
720
|
-
// → 4
|
|
721
|
-
|
|
722
|
-
// 3) Pick by position: first task, second task, …
|
|
723
|
-
const first = order[0];
|
|
724
|
-
const second = order[1];
|
|
725
|
-
console.log('do vertex', first, 'before', second);
|
|
726
|
-
// → do vertex 0 before 1
|
|
727
|
-
|
|
728
|
-
// 4) Simple loop with indices
|
|
729
|
-
for (let i = 0; i < order.length; i++) {
|
|
730
|
-
console.log('step', i + 1, '→ vertex', order[i]);
|
|
731
|
-
}
|
|
732
|
-
// → step 1 → vertex 0
|
|
733
|
-
// → step 2 → vertex 1
|
|
734
|
-
// → step 3 → vertex 2
|
|
735
|
-
// → step 4 → vertex 3
|
|
736
|
-
|
|
737
|
-
// 5) Same loop, shorter (when you only need the vertex id)
|
|
738
|
-
for (const vertex of order) {
|
|
739
|
-
console.log('run job for vertex', vertex);
|
|
740
|
-
}
|
|
741
|
-
// → run job for vertex 0
|
|
742
|
-
// → run job for vertex 1
|
|
743
|
-
// → run job for vertex 2
|
|
744
|
-
// → run job for vertex 3
|
|
745
|
-
|
|
746
|
-
// 6) Optional: each number is an index into your own list of names
|
|
747
|
-
const jobNames = ['bootstrap', 'compileA', 'compileB', 'link'];
|
|
748
|
-
const readable = order.map((vertex) => jobNames[vertex]);
|
|
749
|
-
console.log(readable.join(' → '));
|
|
750
|
-
// → bootstrap → compileA → compileB → link
|
|
751
|
-
} else {
|
|
752
|
-
// No valid order exists (cycle). Use a flag, return early, or show an error.
|
|
753
|
-
console.error('Graph has a cycle; cannot topologically sort.');
|
|
754
|
-
// → Graph has a cycle; cannot topologically sort.
|
|
755
|
-
// (often printed on stderr; some runtimes prepend “Error” styling)
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
// Compare algorithms (same `ok` on a given graph; `order` may differ)
|
|
759
|
-
const a = topologicalSortStack(n, g);
|
|
653
|
+
const a: TopologicalSortResult = topologicalSortStack(n, g);
|
|
760
654
|
const b = topologicalSortIndegree(n, g);
|
|
761
|
-
console.log(a.ok,
|
|
762
|
-
|
|
763
|
-
// (here `a.order` is [0, 2, 1, 3] and `b.order` is [0, 1, 2, 3] — both valid)
|
|
655
|
+
console.log(a.ok, a.order);
|
|
656
|
+
console.log(b.ok, b.order);
|
|
764
657
|
|
|
765
|
-
// Cycle: 0 → 1 → 2 → 0
|
|
766
658
|
const cyclic = createAdjacencyList(3);
|
|
767
659
|
addEdge(cyclic, 0, 1);
|
|
768
660
|
addEdge(cyclic, 1, 2);
|
|
769
661
|
addEdge(cyclic, 2, 0);
|
|
770
662
|
const bad = topologicalSortStack(3, cyclic);
|
|
771
|
-
console.log(bad.ok);
|
|
772
|
-
// → false
|
|
773
|
-
console.log(bad.order);
|
|
774
|
-
// → []
|
|
663
|
+
console.log(bad.ok, bad.order); // false, []
|
|
775
664
|
```
|
|
776
665
|
|
|
777
666
|
### Disjoint Set Union (Union-Find)
|
|
778
667
|
|
|
779
|
-
Use
|
|
668
|
+
Use DSU to compute connected components. For directed graphs, this gives weakly connected components.
|
|
780
669
|
|
|
781
670
|
```ts
|
|
782
671
|
import { createAdjacencyList, connectedComponents } from 'typescript-dsa-stl';
|
|
@@ -794,7 +683,7 @@ const comps = connectedComponents(n, graph);
|
|
|
794
683
|
|
|
795
684
|
#### Traverse the result
|
|
796
685
|
|
|
797
|
-
`connectedComponents(n, adj)` returns `number[][]`
|
|
686
|
+
`connectedComponents(n, adj)` returns `number[][]` (one vertex list per component).
|
|
798
687
|
|
|
799
688
|
```ts
|
|
800
689
|
// 1) Iterate each component
|
|
@@ -811,7 +700,7 @@ const sizes = comps.map(comp => comp.length);
|
|
|
811
700
|
|
|
812
701
|
### Kruskal MST (uses DSU)
|
|
813
702
|
|
|
814
|
-
For
|
|
703
|
+
For weighted graphs, `kruskalMST` builds a minimum spanning tree with DSU.
|
|
815
704
|
|
|
816
705
|
```ts
|
|
817
706
|
import {
|
|
@@ -835,7 +724,7 @@ const { edges, totalWeight } = kruskalMST(n, wGraph, { undirected: true });
|
|
|
835
724
|
|
|
836
725
|
#### Traverse the MST
|
|
837
726
|
|
|
838
|
-
`kruskalMST(...)` returns `{ edges, totalWeight }`.
|
|
727
|
+
`kruskalMST(...)` returns `{ edges, totalWeight }`. Convert `edges` to an adjacency list to traverse it.
|
|
839
728
|
|
|
840
729
|
```ts
|
|
841
730
|
import { createWeightedAdjacencyList } from 'typescript-dsa-stl/collections';
|
|
@@ -856,7 +745,7 @@ for (const { to, weight } of mstAdj[0]) {
|
|
|
856
745
|
|
|
857
746
|
### Dijkstra shortest paths
|
|
858
747
|
|
|
859
|
-
`dijkstra` computes single-source shortest paths on
|
|
748
|
+
`dijkstra` computes single-source shortest paths on weighted graphs with non-negative edges.
|
|
860
749
|
It returns:
|
|
861
750
|
|
|
862
751
|
- `dist[v]`: shortest distance from `start` to `v` (`Infinity` if unreachable)
|
|
@@ -886,30 +775,67 @@ const path = reconstructPath(prev, 0, target); // [0, ..., target] or [] if unre
|
|
|
886
775
|
console.log(path); // [0, 1, 2, 4]
|
|
887
776
|
```
|
|
888
777
|
|
|
778
|
+
### Bellman-Ford shortest paths
|
|
779
|
+
|
|
780
|
+
`bellmanFord` computes single-source shortest paths with negative edges allowed and reports reachable negative cycles.
|
|
781
|
+
|
|
782
|
+
```ts
|
|
783
|
+
import { createWeightedAdjacencyList, addEdge, bellmanFord, reconstructPath } from 'typescript-dsa-stl';
|
|
784
|
+
|
|
785
|
+
const n = 4;
|
|
786
|
+
const g = createWeightedAdjacencyList(n);
|
|
787
|
+
addEdge(g, 0, 1, 1);
|
|
788
|
+
addEdge(g, 1, 2, -2);
|
|
789
|
+
addEdge(g, 2, 3, 2);
|
|
790
|
+
|
|
791
|
+
const { dist, prev, hasNegativeCycle } = bellmanFord(n, g, 0);
|
|
792
|
+
console.log(dist, hasNegativeCycle); // [0, 1, -1, 1], false
|
|
793
|
+
console.log(reconstructPath(prev, 0, 3)); // [0, 1, 2, 3]
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
### Floyd-Warshall all-pairs shortest paths
|
|
797
|
+
|
|
798
|
+
`floydWarshall` computes all-pairs shortest paths and includes a `next` matrix for path reconstruction.
|
|
799
|
+
|
|
800
|
+
```ts
|
|
801
|
+
import {
|
|
802
|
+
createWeightedAdjacencyList,
|
|
803
|
+
addEdge,
|
|
804
|
+
floydWarshall,
|
|
805
|
+
reconstructFloydWarshallPath,
|
|
806
|
+
} from 'typescript-dsa-stl';
|
|
807
|
+
|
|
808
|
+
const n = 4;
|
|
809
|
+
const g = createWeightedAdjacencyList(n);
|
|
810
|
+
addEdge(g, 0, 1, 3);
|
|
811
|
+
addEdge(g, 1, 2, 1);
|
|
812
|
+
addEdge(g, 0, 2, 10);
|
|
813
|
+
addEdge(g, 2, 3, 2);
|
|
814
|
+
|
|
815
|
+
const { dist, next, hasNegativeCycle } = floydWarshall(n, g);
|
|
816
|
+
console.log(dist[0][3], hasNegativeCycle); // 6, false
|
|
817
|
+
console.log(reconstructFloydWarshallPath(next, 0, 3)); // [0, 1, 2, 3]
|
|
818
|
+
```
|
|
819
|
+
|
|
889
820
|
---
|
|
890
821
|
|
|
891
822
|
## String algorithms
|
|
892
823
|
|
|
893
|
-
### Knuth–Morris–Pratt (KMP), Rabin–Karp, and string rolling hash
|
|
824
|
+
### Knuth–Morris–Pratt (KMP), Rabin–Karp, Trie, and string rolling hash
|
|
894
825
|
|
|
895
|
-
All
|
|
826
|
+
All four operate on UTF-16 code units: KMP/Rabin–Karp for pattern matching, `Trie` for exact/prefix lookup, `StringRollingHash` for substring hashes.
|
|
896
827
|
|
|
897
828
|
#### When to use which
|
|
898
829
|
|
|
899
830
|
| Goal | Prefer | Why |
|
|
900
831
|
|------|--------|-----|
|
|
901
|
-
| **
|
|
902
|
-
| **
|
|
903
|
-
| **
|
|
904
|
-
|
|
905
|
-
**Concrete situations**
|
|
906
|
-
|
|
907
|
-
- **Use KMP** when you need a **guaranteed** linear scan (interviews, strict time bounds, large alphabets), or the pattern is **reused** across many searches (`new KnuthMorrisPratt(pattern)` once, `.search(text)` many times).
|
|
908
|
-
- **Use Rabin–Karp** when a **rolling hash** model fits (e.g. one long stream, one pattern), or you later generalize to **several patterns of the same length** (compare each pattern’s triple hash to each window hash). Triple hashing keeps false hash positives negligible; **verification** still guarantees correct indices.
|
|
909
|
-
- **Use `StringRollingHash`** when the problem is **“hash of s[l..r)”** many times on **one** `s`—e.g. check `s[i..i+k) === s[j..j+k)` via hash equality (then confirm if needed), or algorithms that **binary search** on length using substring hashes. For **only** “list all starts of P in T”, pick **KMP** or **Rabin–Karp** instead of building substring hashes by hand.
|
|
832
|
+
| **Single-pattern matching with predictable worst-case** | **KnuthMorrisPratt** | Linear time, no hashing. |
|
|
833
|
+
| **Rolling-hash style matching** | **RabinKarp** | Window hashes + final verify. |
|
|
834
|
+
| **Dynamic dictionary / prefix queries** | **Trie** | `insert`/`search`/`startsWith` in O(L). |
|
|
835
|
+
| **Many substring hash queries on one string** | **StringRollingHash** | O(n) preprocess, O(1) per query. |
|
|
910
836
|
|
|
911
837
|
```ts
|
|
912
|
-
import { KnuthMorrisPratt, RabinKarp, StringRollingHash } from 'typescript-dsa-stl';
|
|
838
|
+
import { KnuthMorrisPratt, RabinKarp, Trie, StringRollingHash } from 'typescript-dsa-stl';
|
|
913
839
|
|
|
914
840
|
// A) Pattern fixed, searched in many buffers — build KMP once, call .search() repeatedly (LPS reused).
|
|
915
841
|
const multiDoc = new KnuthMorrisPratt('ERROR');
|
|
@@ -921,24 +847,29 @@ const hay = '...long text...';
|
|
|
921
847
|
KnuthMorrisPratt.findOccurrences(hay, 'needle');
|
|
922
848
|
new RabinKarp('needle').search(hay);
|
|
923
849
|
|
|
924
|
-
// C)
|
|
850
|
+
// C) Dictionary/prefix queries — Trie.
|
|
851
|
+
const trie = new Trie();
|
|
852
|
+
trie.insert('apple');
|
|
853
|
+
trie.insert('app');
|
|
854
|
+
trie.search('app'); // true
|
|
855
|
+
trie.startsWith('appl'); // true
|
|
856
|
+
trie.delete('app'); // true
|
|
857
|
+
|
|
858
|
+
// D) Same static string, many range-equality checks — rolling hash (not for “find all pattern starts” by itself).
|
|
925
859
|
const s = 'banana';
|
|
926
860
|
const rh = new StringRollingHash(s);
|
|
927
861
|
// Does s[1..4) equal s[3..6)? (both length 3)
|
|
928
862
|
const maybe = rh.substringHash(1, 3) === rh.substringHash(3, 3); // then compare slices if you need certainty
|
|
929
863
|
```
|
|
930
864
|
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
**How Rabin–Karp works:** Use **triple hashing**—three independent polynomial hashes (same base, three distinct prime moduli, see `RABIN_KARP_DEFAULT_MODS`). A position is a candidate only when **all three** window hashes match the pattern’s triple; then a **character-by-character** check runs so reported matches are always correct. Spurious triple collisions are negligible; average **O(n + m)**.
|
|
934
|
-
|
|
935
|
-
**How rolling hash works:** Precompute prefix hashes and powers of a base modulo a prime. The hash of any substring `s[start .. start + length)` is derived from two prefix values—**O(n)** build, **O(1)** per substring query. Hashes can collide; for critical equality checks, compare actual strings after a hash match.
|
|
865
|
+
KMP and Rabin–Karp matching are linear in practice for this API; rolling hash is O(n) preprocess + O(1) substring hash query.
|
|
936
866
|
|
|
937
867
|
```ts
|
|
938
868
|
import {
|
|
939
869
|
KnuthMorrisPratt,
|
|
940
|
-
StringRollingHash,
|
|
941
870
|
RabinKarp,
|
|
871
|
+
Trie,
|
|
872
|
+
StringRollingHash,
|
|
942
873
|
RABIN_KARP_DEFAULT_MODS,
|
|
943
874
|
} from 'typescript-dsa-stl';
|
|
944
875
|
|
|
@@ -975,6 +906,16 @@ console.log(RabinKarp.findOccurrences('aaaa', 'aa')); // [0, 1, 2]
|
|
|
975
906
|
// Empty pattern: no matches
|
|
976
907
|
console.log(new RabinKarp('').search('text')); // []
|
|
977
908
|
|
|
909
|
+
// --- Trie: dictionary and prefix queries ---
|
|
910
|
+
const trie = new Trie();
|
|
911
|
+
trie.insert('apple');
|
|
912
|
+
trie.insert('app');
|
|
913
|
+
console.log(trie.search('app')); // true
|
|
914
|
+
console.log(trie.search('ap')); // false
|
|
915
|
+
console.log(trie.startsWith('ap')); // true
|
|
916
|
+
console.log(trie.delete('app')); // true
|
|
917
|
+
console.log(trie.search('app')); // false
|
|
918
|
+
|
|
978
919
|
// --- String rolling hash: default base 131, mod 1_000_000_007 (both configurable) ---
|
|
979
920
|
const rh = new StringRollingHash('hello');
|
|
980
921
|
// Internally: prefix[] and pow[] so substring hashes are O(1)
|
|
@@ -75,6 +75,22 @@ export interface WeightedUndirectedEdge {
|
|
|
75
75
|
v: number;
|
|
76
76
|
weight: number;
|
|
77
77
|
}
|
|
78
|
+
export interface BellmanFordResult {
|
|
79
|
+
/** Shortest distance from `start` to each vertex (`Infinity` if unreachable). */
|
|
80
|
+
dist: number[];
|
|
81
|
+
/** Previous vertex on one shortest path tree (`-1` if none). */
|
|
82
|
+
prev: number[];
|
|
83
|
+
/** True if a negative cycle is reachable from `start`. */
|
|
84
|
+
hasNegativeCycle: boolean;
|
|
85
|
+
}
|
|
86
|
+
export interface FloydWarshallResult {
|
|
87
|
+
/** All-pairs shortest path distances (`Infinity` if unreachable). */
|
|
88
|
+
dist: number[][];
|
|
89
|
+
/** Next-hop matrix for path reconstruction (`-1` means no path). */
|
|
90
|
+
next: number[][];
|
|
91
|
+
/** True if at least one negative cycle exists in the graph. */
|
|
92
|
+
hasNegativeCycle: boolean;
|
|
93
|
+
}
|
|
78
94
|
/**
|
|
79
95
|
* Connected components in an (unweighted) graph using DSU.
|
|
80
96
|
* Complexity: O((n + m) * alpha(n)).
|
|
@@ -112,10 +128,30 @@ export declare function dijkstra(n: number, adj: WeightedAdjacencyList<number, n
|
|
|
112
128
|
dist: number[];
|
|
113
129
|
prev: number[];
|
|
114
130
|
};
|
|
131
|
+
/**
|
|
132
|
+
* Bellman-Ford single-source shortest paths on a weighted graph.
|
|
133
|
+
* Supports negative edge weights and reports if a reachable negative cycle exists.
|
|
134
|
+
*
|
|
135
|
+
* Complexity: O(n * m), where n = vertices and m = edges.
|
|
136
|
+
*/
|
|
137
|
+
export declare function bellmanFord(n: number, adj: WeightedAdjacencyList<number, number>, start: number): BellmanFordResult;
|
|
138
|
+
/**
|
|
139
|
+
* Floyd-Warshall all-pairs shortest paths on a weighted graph.
|
|
140
|
+
* Handles negative edge weights, and reports if any negative cycle exists.
|
|
141
|
+
*
|
|
142
|
+
* Complexity: O(n^3) time, O(n^2) space.
|
|
143
|
+
*/
|
|
144
|
+
export declare function floydWarshall(n: number, adj: WeightedAdjacencyList<number, number>): FloydWarshallResult;
|
|
115
145
|
/**
|
|
116
146
|
* Reconstruct a path from a `prev` array (as returned by `dijkstra`).
|
|
117
147
|
*
|
|
118
148
|
* @returns an array of vertices from start to target (inclusive), or [] if unreachable.
|
|
119
149
|
*/
|
|
120
150
|
export declare function reconstructPath(prev: readonly number[], start: number, target: number): number[];
|
|
151
|
+
/**
|
|
152
|
+
* Reconstruct a path from `start` to `target` using Floyd-Warshall `next` matrix.
|
|
153
|
+
*
|
|
154
|
+
* @returns vertices from start to target (inclusive), or [] if unreachable/invalid.
|
|
155
|
+
*/
|
|
156
|
+
export declare function reconstructFloydWarshallPath(next: readonly (readonly number[])[], start: number, target: number): number[];
|
|
121
157
|
//# sourceMappingURL=graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/algorithms/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAIpF;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,EAC1B,KAAK,EAAE,MAAM,GACZ,MAAM,EAAE,CAmBV;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,EAC1B,KAAK,EAAE,MAAM,GACZ,MAAM,EAAE,CAiBV;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,qBAAqB;IACpC,8GAA8G;IAC9G,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,iHAAiH;IACjH,EAAE,EAAE,OAAO,CAAC;CACb;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,GACzB,qBAAqB,CAoCvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,GACzB,qBAAqB,CA0BvB;AAED,MAAM,WAAW,sBAAsB;IACrC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,GACzB,MAAM,EAAE,EAAE,CAQZ;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1C,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC;IAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAgC1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CACtB,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1C,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAmCpC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAgBV"}
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/algorithms/graph.ts"],"names":[],"mappings":"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"}
|
package/dist/algorithms/graph.js
CHANGED
|
@@ -256,6 +256,103 @@ export function dijkstra(n, adj, start, options) {
|
|
|
256
256
|
}
|
|
257
257
|
return { dist, prev };
|
|
258
258
|
}
|
|
259
|
+
/**
|
|
260
|
+
* Bellman-Ford single-source shortest paths on a weighted graph.
|
|
261
|
+
* Supports negative edge weights and reports if a reachable negative cycle exists.
|
|
262
|
+
*
|
|
263
|
+
* Complexity: O(n * m), where n = vertices and m = edges.
|
|
264
|
+
*/
|
|
265
|
+
export function bellmanFord(n, adj, start) {
|
|
266
|
+
const dist = Array(n).fill(Number.POSITIVE_INFINITY);
|
|
267
|
+
const prev = Array(n).fill(-1);
|
|
268
|
+
if (start < 0 || start >= n) {
|
|
269
|
+
return { dist, prev, hasNegativeCycle: false };
|
|
270
|
+
}
|
|
271
|
+
const edges = [];
|
|
272
|
+
for (let u = 0; u < n; u++) {
|
|
273
|
+
for (const e of adj[u] ?? []) {
|
|
274
|
+
const v = e.to;
|
|
275
|
+
if (v < 0 || v >= n)
|
|
276
|
+
continue;
|
|
277
|
+
edges.push({ u, v, w: e.weight });
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
dist[start] = 0;
|
|
281
|
+
for (let i = 0; i < n - 1; i++) {
|
|
282
|
+
let changed = false;
|
|
283
|
+
for (const { u, v, w } of edges) {
|
|
284
|
+
if (dist[u] === Number.POSITIVE_INFINITY)
|
|
285
|
+
continue;
|
|
286
|
+
const nd = dist[u] + w;
|
|
287
|
+
if (nd < dist[v]) {
|
|
288
|
+
dist[v] = nd;
|
|
289
|
+
prev[v] = u;
|
|
290
|
+
changed = true;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
if (!changed)
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
let hasNegativeCycle = false;
|
|
297
|
+
for (const { u, v, w } of edges) {
|
|
298
|
+
if (dist[u] === Number.POSITIVE_INFINITY)
|
|
299
|
+
continue;
|
|
300
|
+
if (dist[u] + w < dist[v]) {
|
|
301
|
+
hasNegativeCycle = true;
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return { dist, prev, hasNegativeCycle };
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Floyd-Warshall all-pairs shortest paths on a weighted graph.
|
|
309
|
+
* Handles negative edge weights, and reports if any negative cycle exists.
|
|
310
|
+
*
|
|
311
|
+
* Complexity: O(n^3) time, O(n^2) space.
|
|
312
|
+
*/
|
|
313
|
+
export function floydWarshall(n, adj) {
|
|
314
|
+
const dist = Array.from({ length: n }, () => Array(n).fill(Number.POSITIVE_INFINITY));
|
|
315
|
+
const next = Array.from({ length: n }, () => Array(n).fill(-1));
|
|
316
|
+
for (let i = 0; i < n; i++) {
|
|
317
|
+
dist[i][i] = 0;
|
|
318
|
+
next[i][i] = i;
|
|
319
|
+
}
|
|
320
|
+
for (let u = 0; u < n; u++) {
|
|
321
|
+
for (const e of adj[u] ?? []) {
|
|
322
|
+
const v = e.to;
|
|
323
|
+
const w = e.weight;
|
|
324
|
+
if (v < 0 || v >= n)
|
|
325
|
+
continue;
|
|
326
|
+
if (w < dist[u][v]) {
|
|
327
|
+
dist[u][v] = w;
|
|
328
|
+
next[u][v] = v;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
for (let k = 0; k < n; k++) {
|
|
333
|
+
for (let i = 0; i < n; i++) {
|
|
334
|
+
if (dist[i][k] === Number.POSITIVE_INFINITY)
|
|
335
|
+
continue;
|
|
336
|
+
for (let j = 0; j < n; j++) {
|
|
337
|
+
if (dist[k][j] === Number.POSITIVE_INFINITY)
|
|
338
|
+
continue;
|
|
339
|
+
const nd = dist[i][k] + dist[k][j];
|
|
340
|
+
if (nd < dist[i][j]) {
|
|
341
|
+
dist[i][j] = nd;
|
|
342
|
+
next[i][j] = next[i][k];
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
let hasNegativeCycle = false;
|
|
348
|
+
for (let i = 0; i < n; i++) {
|
|
349
|
+
if (dist[i][i] < 0) {
|
|
350
|
+
hasNegativeCycle = true;
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return { dist, next, hasNegativeCycle };
|
|
355
|
+
}
|
|
259
356
|
/**
|
|
260
357
|
* Reconstruct a path from a `prev` array (as returned by `dijkstra`).
|
|
261
358
|
*
|
|
@@ -283,4 +380,29 @@ export function reconstructPath(prev, start, target) {
|
|
|
283
380
|
path.reverse();
|
|
284
381
|
return path;
|
|
285
382
|
}
|
|
383
|
+
/**
|
|
384
|
+
* Reconstruct a path from `start` to `target` using Floyd-Warshall `next` matrix.
|
|
385
|
+
*
|
|
386
|
+
* @returns vertices from start to target (inclusive), or [] if unreachable/invalid.
|
|
387
|
+
*/
|
|
388
|
+
export function reconstructFloydWarshallPath(next, start, target) {
|
|
389
|
+
const n = next.length;
|
|
390
|
+
if (start < 0 || start >= n)
|
|
391
|
+
return [];
|
|
392
|
+
if (target < 0 || target >= n)
|
|
393
|
+
return [];
|
|
394
|
+
if ((next[start]?.[target] ?? -1) === -1)
|
|
395
|
+
return [];
|
|
396
|
+
const path = [start];
|
|
397
|
+
let cur = start;
|
|
398
|
+
for (let steps = 0; steps < n; steps++) {
|
|
399
|
+
if (cur === target)
|
|
400
|
+
return path;
|
|
401
|
+
cur = next[cur][target];
|
|
402
|
+
if (cur === -1)
|
|
403
|
+
return [];
|
|
404
|
+
path.push(cur);
|
|
405
|
+
}
|
|
406
|
+
return [];
|
|
407
|
+
}
|
|
286
408
|
//# sourceMappingURL=graph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/algorithms/graph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/algorithms/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@ export { DisjointSetUnion } from './disjointSetUnion.js';
|
|
|
3
3
|
export { KnuthMorrisPratt } from './kmp.js';
|
|
4
4
|
export { StringRollingHash } from './stringHashing.js';
|
|
5
5
|
export { RabinKarp, RABIN_KARP_DEFAULT_MODS } from './rabinKarp.js';
|
|
6
|
+
export { Trie } from './trie.js';
|
|
6
7
|
export type { RabinKarpTripleMods } from './rabinKarp.js';
|
|
7
|
-
export type { WeightedUndirectedEdge, TopologicalSortResult } from './graph.js';
|
|
8
|
-
export { breadthFirstSearch, depthFirstSearch, topologicalSortStack, topologicalSortIndegree, connectedComponents, dijkstra, reconstructPath, kruskalMST, } from './graph.js';
|
|
8
|
+
export type { WeightedUndirectedEdge, TopologicalSortResult, BellmanFordResult, FloydWarshallResult, } from './graph.js';
|
|
9
|
+
export { breadthFirstSearch, depthFirstSearch, topologicalSortStack, topologicalSortIndegree, connectedComponents, dijkstra, bellmanFord, floydWarshall, reconstructPath, reconstructFloydWarshallPath, kruskalMST, } from './graph.js';
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACpE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,eAAe,EACf,4BAA4B,EAC5B,UAAU,GACX,MAAM,YAAY,CAAC"}
|
package/dist/algorithms/index.js
CHANGED
|
@@ -3,5 +3,6 @@ export { DisjointSetUnion } from './disjointSetUnion.js';
|
|
|
3
3
|
export { KnuthMorrisPratt } from './kmp.js';
|
|
4
4
|
export { StringRollingHash } from './stringHashing.js';
|
|
5
5
|
export { RabinKarp, RABIN_KARP_DEFAULT_MODS } from './rabinKarp.js';
|
|
6
|
-
export {
|
|
6
|
+
export { Trie } from './trie.js';
|
|
7
|
+
export { breadthFirstSearch, depthFirstSearch, topologicalSortStack, topologicalSortIndegree, connectedComponents, dijkstra, bellmanFord, floydWarshall, reconstructPath, reconstructFloydWarshallPath, kruskalMST, } from './graph.js';
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,eAAe,EACf,4BAA4B,EAC5B,UAAU,GACX,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trie (prefix tree) for UTF-16 strings.
|
|
3
|
+
* Supports insert/search/prefix checks and word removal.
|
|
4
|
+
*/
|
|
5
|
+
export declare class Trie {
|
|
6
|
+
private readonly root;
|
|
7
|
+
constructor();
|
|
8
|
+
/** Insert a word into the trie. */
|
|
9
|
+
insert(word: string): void;
|
|
10
|
+
/** Returns true if the exact word exists in the trie. */
|
|
11
|
+
search(word: string): boolean;
|
|
12
|
+
/** Returns true if there is any inserted word with this prefix. */
|
|
13
|
+
startsWith(prefix: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Remove one exact word from the trie.
|
|
16
|
+
* Returns true when the word existed and was removed.
|
|
17
|
+
*/
|
|
18
|
+
delete(word: string): boolean;
|
|
19
|
+
/** Returns true when no words have been inserted. */
|
|
20
|
+
isEmpty(): boolean;
|
|
21
|
+
private findNode;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=trie.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trie.d.ts","sourceRoot":"","sources":["../../src/algorithms/trie.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;;IAMhC,mCAAmC;IACnC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAc1B,yDAAyD;IACzD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK7B,mEAAmE;IACnE,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAInC;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAwB7B,qDAAqD;IACrD,OAAO,IAAI,OAAO;IAIlB,OAAO,CAAC,QAAQ;CASjB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trie (prefix tree) for UTF-16 strings.
|
|
3
|
+
* Supports insert/search/prefix checks and word removal.
|
|
4
|
+
*/
|
|
5
|
+
class TrieNode {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.children = new Map();
|
|
8
|
+
this.isWord = false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class Trie {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.root = new TrieNode();
|
|
14
|
+
}
|
|
15
|
+
/** Insert a word into the trie. */
|
|
16
|
+
insert(word) {
|
|
17
|
+
let node = this.root;
|
|
18
|
+
for (let i = 0; i < word.length; i++) {
|
|
19
|
+
const ch = word[i];
|
|
20
|
+
let next = node.children.get(ch);
|
|
21
|
+
if (!next) {
|
|
22
|
+
next = new TrieNode();
|
|
23
|
+
node.children.set(ch, next);
|
|
24
|
+
}
|
|
25
|
+
node = next;
|
|
26
|
+
}
|
|
27
|
+
node.isWord = true;
|
|
28
|
+
}
|
|
29
|
+
/** Returns true if the exact word exists in the trie. */
|
|
30
|
+
search(word) {
|
|
31
|
+
const node = this.findNode(word);
|
|
32
|
+
return node !== undefined && node.isWord;
|
|
33
|
+
}
|
|
34
|
+
/** Returns true if there is any inserted word with this prefix. */
|
|
35
|
+
startsWith(prefix) {
|
|
36
|
+
return this.findNode(prefix) !== undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Remove one exact word from the trie.
|
|
40
|
+
* Returns true when the word existed and was removed.
|
|
41
|
+
*/
|
|
42
|
+
delete(word) {
|
|
43
|
+
const path = [];
|
|
44
|
+
let node = this.root;
|
|
45
|
+
for (let i = 0; i < word.length; i++) {
|
|
46
|
+
const ch = word[i];
|
|
47
|
+
const next = node.children.get(ch);
|
|
48
|
+
if (!next)
|
|
49
|
+
return false;
|
|
50
|
+
path.push({ parent: node, ch, node: next });
|
|
51
|
+
node = next;
|
|
52
|
+
}
|
|
53
|
+
if (!node.isWord)
|
|
54
|
+
return false;
|
|
55
|
+
node.isWord = false;
|
|
56
|
+
// Prune nodes that are no longer needed.
|
|
57
|
+
for (let i = path.length - 1; i >= 0; i--) {
|
|
58
|
+
const segment = path[i];
|
|
59
|
+
if (segment.node.isWord || segment.node.children.size > 0)
|
|
60
|
+
break;
|
|
61
|
+
segment.parent.children.delete(segment.ch);
|
|
62
|
+
}
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
/** Returns true when no words have been inserted. */
|
|
66
|
+
isEmpty() {
|
|
67
|
+
return this.root.children.size === 0;
|
|
68
|
+
}
|
|
69
|
+
findNode(path) {
|
|
70
|
+
let node = this.root;
|
|
71
|
+
for (let i = 0; i < path.length; i++) {
|
|
72
|
+
const next = node.children.get(path[i]);
|
|
73
|
+
if (!next)
|
|
74
|
+
return undefined;
|
|
75
|
+
node = next;
|
|
76
|
+
}
|
|
77
|
+
return node;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=trie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trie.js","sourceRoot":"","sources":["../../src/algorithms/trie.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export { Vector, Stack, Queue, Deque, List, ListNode, PriorityQueue, OrderedMap, UnorderedMap, OrderedSet, UnorderedSet, OrderedMultiSet, OrderedMultiMap, addEdge, deleteEdge, createAdjacencyList, createWeightedAdjacencyList, GeneralSegmentTree, SegmentTree, SegmentTreeSum, SegmentTreeMin, SegmentTreeMax, LazySegmentTreeSum, } from './collections/index.js';
|
|
9
9
|
export type { WeightedEdge, AdjacencyList, WeightedAdjacencyList, GeneralSegmentTreeConfig, SegmentCombine, SegmentLeafBuild, SegmentMerge, } from './collections/index.js';
|
|
10
|
-
export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, DisjointSetUnion, KnuthMorrisPratt, StringRollingHash, RabinKarp, RABIN_KARP_DEFAULT_MODS, breadthFirstSearch, depthFirstSearch, topologicalSortStack, topologicalSortIndegree, connectedComponents, dijkstra, reconstructPath, kruskalMST, } from './algorithms/index.js';
|
|
11
|
-
export type { WeightedUndirectedEdge, RabinKarpTripleMods, TopologicalSortResult, } from './algorithms/index.js';
|
|
10
|
+
export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, DisjointSetUnion, KnuthMorrisPratt, StringRollingHash, RabinKarp, Trie, RABIN_KARP_DEFAULT_MODS, breadthFirstSearch, depthFirstSearch, topologicalSortStack, topologicalSortIndegree, connectedComponents, dijkstra, bellmanFord, floydWarshall, reconstructPath, reconstructFloydWarshallPath, kruskalMST, } from './algorithms/index.js';
|
|
11
|
+
export type { WeightedUndirectedEdge, RabinKarpTripleMods, TopologicalSortResult, BellmanFordResult, FloydWarshallResult, } from './algorithms/index.js';
|
|
12
12
|
export { clamp, range, noop, identity, swap } from './utils/index.js';
|
|
13
13
|
export type { Comparator, Predicate, UnaryFn, Reducer, IterableLike } from './types/index.js';
|
|
14
14
|
export { toArray } from './types/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,QAAQ,EACR,eAAe,EACf,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,IAAI,EACJ,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,eAAe,EACf,4BAA4B,EAC5B,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* import { Vector, Stack, Queue, List, sort, binarySearch, clamp } from 'typescript-dsa-stl';
|
|
7
7
|
*/
|
|
8
8
|
export { Vector, Stack, Queue, Deque, List, ListNode, PriorityQueue, OrderedMap, UnorderedMap, OrderedSet, UnorderedSet, OrderedMultiSet, OrderedMultiMap, addEdge, deleteEdge, createAdjacencyList, createWeightedAdjacencyList, GeneralSegmentTree, SegmentTree, SegmentTreeSum, SegmentTreeMin, SegmentTreeMax, LazySegmentTreeSum, } from './collections/index.js';
|
|
9
|
-
export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, DisjointSetUnion, KnuthMorrisPratt, StringRollingHash, RabinKarp, RABIN_KARP_DEFAULT_MODS, breadthFirstSearch, depthFirstSearch, topologicalSortStack, topologicalSortIndegree, connectedComponents, dijkstra, reconstructPath, kruskalMST, } from './algorithms/index.js';
|
|
9
|
+
export { sort, find, findIndex, transform, filter, reduce, reverse, unique, binarySearch, lowerBound, upperBound, min, max, partition, DisjointSetUnion, KnuthMorrisPratt, StringRollingHash, RabinKarp, Trie, RABIN_KARP_DEFAULT_MODS, breadthFirstSearch, depthFirstSearch, topologicalSortStack, topologicalSortIndegree, connectedComponents, dijkstra, bellmanFord, floydWarshall, reconstructPath, reconstructFloydWarshallPath, kruskalMST, } from './algorithms/index.js';
|
|
10
10
|
export { clamp, range, noop, identity, swap } from './utils/index.js';
|
|
11
11
|
export { toArray } from './types/index.js';
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAUhC,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,QAAQ,EACR,eAAe,EACf,UAAU,GACX,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAUhC,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,GAAG,EACH,GAAG,EACH,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,IAAI,EACJ,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,eAAe,EACf,4BAA4B,EAC5B,UAAU,GACX,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typescript-dsa-stl",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "STL-style data structures and algorithms for TypeScript: Vector, Stack, Queue, Deque (double-ended queue), List, PriorityQueue, Map, Set, sort, binarySearch, graph utilities. Use like C++ STL.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|