typescript-dsa-stl 2.3.0 → 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 +200 -3
- package/dist/algorithms/graph.d.ts +21 -0
- package/dist/algorithms/graph.d.ts.map +1 -1
- package/dist/algorithms/graph.js +72 -0
- package/dist/algorithms/graph.js.map +1 -1
- package/dist/algorithms/index.d.ts +1 -1
- package/dist/algorithms/index.d.ts.map +1 -1
- package/dist/algorithms/index.js +1 -1
- package/dist/algorithms/index.js.map +1 -1
- package/dist/collections/SegmentTree.d.ts +108 -0
- package/dist/collections/SegmentTree.d.ts.map +1 -0
- package/dist/collections/SegmentTree.js +234 -0
- package/dist/collections/SegmentTree.js.map +1 -0
- package/dist/collections/index.d.ts +2 -0
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/index.js +1 -0
- package/dist/collections/index.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**This is the GitHub repository** for the npm package **[typescript-dsa-stl](https://www.npmjs.com/package/typescript-dsa-stl)**.
|
|
4
4
|
|
|
5
|
-
STL-style data structures and algorithms for TypeScript: **Vector**, **Stack**, **Queue**, **List**, **PriorityQueue**, **OrderedMap** (Map), **UnorderedMap**, **OrderedSet** (Set), **UnorderedSet**, **OrderedMultiMap**, **OrderedMultiSet**, and algorithms (`sort`, `binarySearch`, `lowerBound`, `min`, `max`, **KnuthMorrisPratt**, **RabinKarp**, **StringRollingHash**, etc.). Install from npm to use in your project; this repo holds the source code.
|
|
5
|
+
STL-style data structures and algorithms for TypeScript: **Vector**, **Stack**, **Queue**, **List**, **PriorityQueue**, **OrderedMap** (Map), **UnorderedMap**, **OrderedSet** (Set), **UnorderedSet**, **OrderedMultiMap**, **OrderedMultiSet**, **segment trees** (`SegmentTreeSum`, `SegmentTreeMin`, `SegmentTreeMax`, `SegmentTree`, `GeneralSegmentTree`, `LazySegmentTreeSum`), and algorithms (`sort`, `binarySearch`, `lowerBound`, `min`, `max`, **KnuthMorrisPratt**, **RabinKarp**, **StringRollingHash**, etc.). Install from npm to use in your project; this repo holds the source code.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -359,6 +359,38 @@ const { edges, totalWeight } = kruskalMST(n, wGraph, { undirected: true });
|
|
|
359
359
|
// edges: MST edges (chosen by weight), totalWeight: sum of weights
|
|
360
360
|
```
|
|
361
361
|
|
|
362
|
+
#### Dijkstra shortest paths
|
|
363
|
+
|
|
364
|
+
`dijkstra` computes single-source shortest paths on a **weighted** graph with **non-negative** edge weights.
|
|
365
|
+
It returns:
|
|
366
|
+
|
|
367
|
+
- `dist[v]`: shortest distance from `start` to `v` (`Infinity` if unreachable)
|
|
368
|
+
- `prev[v]`: previous vertex on the shortest path (or `-1` if none)
|
|
369
|
+
|
|
370
|
+
```ts
|
|
371
|
+
import { createWeightedAdjacencyList, addEdge, dijkstra, reconstructPath } from 'typescript-dsa-stl'; // graph + shortest path helpers
|
|
372
|
+
|
|
373
|
+
const n = 5; // vertices 0..4
|
|
374
|
+
const g = createWeightedAdjacencyList(n); // WeightedAdjacencyList: g[u] = [{to, weight}, ...]
|
|
375
|
+
|
|
376
|
+
// Directed edges (add both directions for undirected graphs)
|
|
377
|
+
// addEdge(g, from, to, weight)
|
|
378
|
+
addEdge(g, 0, 1, 2); // 0 -> 1 (cost 2)
|
|
379
|
+
addEdge(g, 0, 2, 5); // 0 -> 2 (cost 5)
|
|
380
|
+
addEdge(g, 1, 2, 1); // 1 -> 2 (cost 1)
|
|
381
|
+
addEdge(g, 1, 3, 2); // 1 -> 3 (cost 2)
|
|
382
|
+
addEdge(g, 2, 4, 1); // 2 -> 4 (cost 1)
|
|
383
|
+
addEdge(g, 3, 4, 3); // 3 -> 4 (cost 3)
|
|
384
|
+
|
|
385
|
+
const { dist, prev } = dijkstra(n, g, 0); // start = 0; dist/prev arrays length n
|
|
386
|
+
console.log(dist); // dist[v] = shortest distance from 0 to v (Infinity if unreachable), e.g. [0, 2, 3, 4, 4]
|
|
387
|
+
|
|
388
|
+
// Reconstruct path 0 -> 4
|
|
389
|
+
const target = 4; // destination vertex
|
|
390
|
+
const path = reconstructPath(prev, 0, target); // [0, ..., target] or [] if unreachable
|
|
391
|
+
console.log(path); // [0, 1, 2, 4]
|
|
392
|
+
```
|
|
393
|
+
|
|
362
394
|
##### Traverse the MST
|
|
363
395
|
|
|
364
396
|
`kruskalMST(...)` returns `{ edges, totalWeight }`. To traverse the MST like a graph, convert `edges` into an adjacency list:
|
|
@@ -489,14 +521,172 @@ console.log(a.substringHash(2, 2) === b.fullHash()); // true — both are "na"
|
|
|
489
521
|
|
|
490
522
|
---
|
|
491
523
|
|
|
524
|
+
## Segment trees
|
|
525
|
+
|
|
526
|
+
Segment trees support **range queries** and **point updates** in **O(log n)**. Range endpoints are **inclusive**: `query(l, r)` covers indices `l` through `r`.
|
|
527
|
+
|
|
528
|
+
### Ready-made variants (`SegmentTreeSum`, `SegmentTreeMin`, `SegmentTreeMax`)
|
|
529
|
+
|
|
530
|
+
```ts
|
|
531
|
+
import {
|
|
532
|
+
SegmentTreeSum,
|
|
533
|
+
SegmentTreeMin,
|
|
534
|
+
SegmentTreeMax,
|
|
535
|
+
} from 'typescript-dsa-stl';
|
|
536
|
+
|
|
537
|
+
const sum = new SegmentTreeSum([1, 2, 3, 4]);
|
|
538
|
+
console.log(sum.query(0, 3)); // 10
|
|
539
|
+
sum.update(1, 10);
|
|
540
|
+
console.log(sum.query(0, 3)); // 1 + 10 + 3 + 4 = 18
|
|
541
|
+
|
|
542
|
+
const mn = new SegmentTreeMin([5, 2, 8, 1]);
|
|
543
|
+
console.log(mn.query(0, 3)); // 1
|
|
544
|
+
|
|
545
|
+
const mx = new SegmentTreeMax([5, 2, 8, 1]);
|
|
546
|
+
console.log(mx.query(0, 3)); // 8
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
### Generic `SegmentTree<T>` (custom combine + neutral)
|
|
550
|
+
|
|
551
|
+
Use the same type for array elements and aggregates. Pass an **associative** `combine` and a **neutral** value for query ranges that miss a segment (e.g. `0` for sum, `Infinity` for min).
|
|
552
|
+
|
|
553
|
+
```ts
|
|
554
|
+
import { SegmentTree } from 'typescript-dsa-stl';
|
|
555
|
+
|
|
556
|
+
const gcdTree = new SegmentTree<number>(
|
|
557
|
+
[12, 18, 24],
|
|
558
|
+
(a, b) => {
|
|
559
|
+
let x = a;
|
|
560
|
+
let y = b;
|
|
561
|
+
while (y !== 0) {
|
|
562
|
+
const t = y;
|
|
563
|
+
y = x % y;
|
|
564
|
+
x = t;
|
|
565
|
+
}
|
|
566
|
+
return x;
|
|
567
|
+
},
|
|
568
|
+
0
|
|
569
|
+
);
|
|
570
|
+
console.log(gcdTree.query(0, 2)); // gcd(12, 18, 24) === 6
|
|
571
|
+
|
|
572
|
+
// Non-numeric example: concatenate strings
|
|
573
|
+
const strTree = new SegmentTree<string>(
|
|
574
|
+
['a', 'b', 'c'],
|
|
575
|
+
(a, b) => a + b,
|
|
576
|
+
''
|
|
577
|
+
);
|
|
578
|
+
console.log(strTree.query(0, 2)); // 'abc'
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
### `GeneralSegmentTree<T, V>` (custom merge + buildLeaf)
|
|
582
|
+
|
|
583
|
+
Use when **raw** values `V` differ from the **aggregate** type `T`:
|
|
584
|
+
|
|
585
|
+
- **`merge(left, right)`** — combine two child aggregates (internal nodes).
|
|
586
|
+
- **`neutral`** — identity for `merge` when a query does not overlap a segment.
|
|
587
|
+
- **`buildLeaf(value, index)`** — build the leaf from the raw array on initial construction and on every `update`.
|
|
588
|
+
|
|
589
|
+
```ts
|
|
590
|
+
import { GeneralSegmentTree } from 'typescript-dsa-stl';
|
|
591
|
+
|
|
592
|
+
// Store sum of squares; raw array is plain numbers
|
|
593
|
+
const st = new GeneralSegmentTree<number, number>([1, 2, 3], {
|
|
594
|
+
merge: (a, b) => a + b,
|
|
595
|
+
neutral: 0,
|
|
596
|
+
buildLeaf: (v, i) => v * v + i,
|
|
597
|
+
});
|
|
598
|
+
console.log(st.query(0, 2)); // (1+0) + (4+1) + (9+2) = 17
|
|
599
|
+
st.update(1, 4);
|
|
600
|
+
console.log(st.rawAt(1)); // 4 — current raw value at index 1
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### `LazySegmentTreeSum` (range add + range sum)
|
|
604
|
+
|
|
605
|
+
**`rangeAdd(l, r, delta)`** adds `delta` to every element in the inclusive range. **`rangeSum(l, r)`** returns the sum. **`set(i, value)`** assigns one position (lazy tags are applied along the path). All are **O(log n)**.
|
|
606
|
+
|
|
607
|
+
```ts
|
|
608
|
+
import { LazySegmentTreeSum } from 'typescript-dsa-stl';
|
|
609
|
+
|
|
610
|
+
const lazy = new LazySegmentTreeSum([0, 0, 0, 0]);
|
|
611
|
+
lazy.rangeAdd(1, 2, 5); // indices 1 and 2 get +5
|
|
612
|
+
console.log(lazy.rangeSum(0, 3)); // 10
|
|
613
|
+
lazy.set(0, 100);
|
|
614
|
+
console.log(lazy.rangeSum(0, 3)); // 100 + 5 + 5 + 0
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
### Real-world use cases
|
|
618
|
+
|
|
619
|
+
These patterns show up in backends and internal tools when you need **many** range queries and updates on a fixed sequence (length known up front), without scanning the whole array each time.
|
|
620
|
+
|
|
621
|
+
#### 1. Analytics or reporting: totals over a time window (with corrections)
|
|
622
|
+
|
|
623
|
+
Each index is a **fixed bucket** (hour of day, day of month, version slot, etc.). You repeatedly ask “what is the **sum** from bucket `a` through `b`?” and sometimes **fix one bucket** after late data or a reconciliation.
|
|
624
|
+
|
|
625
|
+
```ts
|
|
626
|
+
import { SegmentTreeSum } from 'typescript-dsa-stl';
|
|
627
|
+
|
|
628
|
+
/** Revenue (or events, page views, API calls) per calendar day; index 0 = first day of period. */
|
|
629
|
+
class PeriodMetrics {
|
|
630
|
+
private readonly tree: SegmentTreeSum;
|
|
631
|
+
|
|
632
|
+
constructor(dailyValues: readonly number[]) {
|
|
633
|
+
this.tree = new SegmentTreeSum(dailyValues);
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
/** Total for an inclusive day range — e.g. chart drill-down or export row. */
|
|
637
|
+
totalBetweenDay(firstDayIndex: number, lastDayIndex: number): number {
|
|
638
|
+
return this.tree.query(firstDayIndex, lastDayIndex);
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
/** Backfill or correct one day without rebuilding the whole series. */
|
|
642
|
+
setDay(dayIndex: number, amount: number): void {
|
|
643
|
+
this.tree.update(dayIndex, amount);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
const january = new PeriodMetrics([1200, 980, 1100, 1050, 1300]);
|
|
648
|
+
console.log(january.totalBetweenDay(0, 4)); // full period
|
|
649
|
+
january.setDay(2, 1150); // corrected day 2
|
|
650
|
+
console.log(january.totalBetweenDay(1, 3)); // sum over days 1..3
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
In production you would usually **persist** the underlying series in a database and **rebuild** the tree when the period reloads; the tree stays useful in memory for dashboards, simulations, or request handlers that see heavy read/update traffic on the same window.
|
|
654
|
+
|
|
655
|
+
#### 2. Operations or finance: bulk adjustment on a slice, then aggregate
|
|
656
|
+
|
|
657
|
+
You apply the **same delta** to **every** element in an index range (tiered bonuses, prorated credits, simulation shocks), then need **range sums** for reporting. A lazy sum tree avoids touching each cell one by one.
|
|
658
|
+
|
|
659
|
+
```ts
|
|
660
|
+
import { LazySegmentTreeSum } from 'typescript-dsa-stl';
|
|
661
|
+
|
|
662
|
+
/** Example: per-seat or per-row amounts; apply a flat bonus to ranks 10–50 (0-based 9..49), then sum a sub-range for a sub-team. */
|
|
663
|
+
function simulateBulkBonusAndSubtotal(seatCount: number): void {
|
|
664
|
+
// Initial per-seat values (e.g. base commission), built once
|
|
665
|
+
const base = Array.from({ length: seatCount }, (_, i) => 100 + i);
|
|
666
|
+
const amounts = new LazySegmentTreeSum(base);
|
|
667
|
+
|
|
668
|
+
// HR: +250 to everyone in seats 10–50 inclusive (indices 9..49)
|
|
669
|
+
amounts.rangeAdd(9, 49, 250);
|
|
670
|
+
|
|
671
|
+
// Finance: subtotal for seats 20–30 only
|
|
672
|
+
console.log(amounts.rangeSum(19, 29));
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
simulateBulkBonusAndSubtotal(100);
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
The same idea applies to **inventory deltas** across bin ranges, **loyalty points** batch credits by user-ID band (when IDs map to contiguous indices), or **game/simulation** state where many cells gain the same buff and you query partial totals.
|
|
679
|
+
|
|
680
|
+
---
|
|
681
|
+
|
|
492
682
|
## API overview
|
|
493
683
|
|
|
494
684
|
| Module | Exports |
|
|
495
685
|
|--------|--------|
|
|
496
|
-
| **Collections** | `Vector`, `Stack`, `Queue`, `List`, `ListNode`, `PriorityQueue`, `OrderedMap`, `UnorderedMap`, `OrderedSet`, `UnorderedSet`, `OrderedMultiMap`, `OrderedMultiSet`, `WeightedEdge`, `AdjacencyList`, `WeightedAdjacencyList`, `createAdjacencyList`, `createWeightedAdjacencyList`, `addEdge`, `deleteEdge` |
|
|
686
|
+
| **Collections** | `Vector`, `Stack`, `Queue`, `List`, `ListNode`, `PriorityQueue`, `OrderedMap`, `UnorderedMap`, `OrderedSet`, `UnorderedSet`, `OrderedMultiMap`, `OrderedMultiSet`, `GeneralSegmentTree`, `SegmentTree`, `SegmentTreeSum`, `SegmentTreeMin`, `SegmentTreeMax`, `LazySegmentTreeSum`, `WeightedEdge`, `AdjacencyList`, `WeightedAdjacencyList`, `createAdjacencyList`, `createWeightedAdjacencyList`, `addEdge`, `deleteEdge` |
|
|
497
687
|
| **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`, `connectedComponents`, `kruskalMST` |
|
|
498
688
|
| **Utils** | `clamp`, `range`, `noop`, `identity`, `swap` |
|
|
499
|
-
| **Types** | `Comparator`, `Predicate`, `UnaryFn`, `Reducer`, `IterableLike`, `toArray`, `RabinKarpTripleMods` |
|
|
689
|
+
| **Types** | `Comparator`, `Predicate`, `UnaryFn`, `Reducer`, `IterableLike`, `toArray`, `RabinKarpTripleMods`, `GeneralSegmentTreeConfig`, `SegmentCombine`, `SegmentMerge`, `SegmentLeafBuild` |
|
|
500
690
|
|
|
501
691
|
### Subpath imports (tree-shaking)
|
|
502
692
|
|
|
@@ -528,6 +718,13 @@ import type { Comparator } from 'typescript-dsa-stl/types';
|
|
|
528
718
|
\* Amortized (hash).
|
|
529
719
|
\** At a known node.
|
|
530
720
|
|
|
721
|
+
### Segment trees (range queries)
|
|
722
|
+
|
|
723
|
+
| Structure | Build | Point update | Range query | Extra |
|
|
724
|
+
|-----------|-------|--------------|-------------|--------|
|
|
725
|
+
| **GeneralSegmentTree**, **SegmentTree**, **SegmentTreeSum** / **Min** / **Max** | O(n) | O(log n) | O(log n) | Inclusive `[l, r]`; **GeneralSegmentTree** keeps raw `V` and uses `merge` + `buildLeaf` |
|
|
726
|
+
| **LazySegmentTreeSum** | O(n) | `set`: O(log n) | `rangeSum`: O(log n) | `rangeAdd` on a range: O(log n) |
|
|
727
|
+
|
|
531
728
|
---
|
|
532
729
|
|
|
533
730
|
## OrderedMultiMap and OrderedMultiSet — use cases
|
|
@@ -48,4 +48,25 @@ export declare function kruskalMST(n: number, adj: WeightedAdjacencyList<number,
|
|
|
48
48
|
edges: WeightedUndirectedEdge[];
|
|
49
49
|
totalWeight: number;
|
|
50
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* Dijkstra's single-source shortest paths on a weighted adjacency list with non-negative weights.
|
|
53
|
+
*
|
|
54
|
+
* Complexity: O((n + m) log m) with a binary heap priority queue.
|
|
55
|
+
*
|
|
56
|
+
* @returns
|
|
57
|
+
* - dist[v] = shortest distance from start to v (Infinity if unreachable)
|
|
58
|
+
* - prev[v] = previous vertex on the shortest path (or -1 if none)
|
|
59
|
+
*/
|
|
60
|
+
export declare function dijkstra(n: number, adj: WeightedAdjacencyList<number, number>, start: number, options?: {
|
|
61
|
+
target?: number;
|
|
62
|
+
}): {
|
|
63
|
+
dist: number[];
|
|
64
|
+
prev: number[];
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Reconstruct a path from a `prev` array (as returned by `dijkstra`).
|
|
68
|
+
*
|
|
69
|
+
* @returns an array of vertices from start to target (inclusive), or [] if unreachable.
|
|
70
|
+
*/
|
|
71
|
+
export declare function reconstructPath(prev: readonly number[], start: number, target: number): number[];
|
|
51
72
|
//# 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;
|
|
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,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"}
|
package/dist/algorithms/graph.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PriorityQueue } from '../collections/index.js';
|
|
1
2
|
import { DisjointSetUnion } from './disjointSetUnion.js';
|
|
2
3
|
/**
|
|
3
4
|
* Breadth-first search from `start` on an unweighted adjacency list.
|
|
@@ -116,4 +117,75 @@ export function kruskalMST(n, adj, options) {
|
|
|
116
117
|
}
|
|
117
118
|
return { edges: mstEdges, totalWeight };
|
|
118
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Dijkstra's single-source shortest paths on a weighted adjacency list with non-negative weights.
|
|
122
|
+
*
|
|
123
|
+
* Complexity: O((n + m) log m) with a binary heap priority queue.
|
|
124
|
+
*
|
|
125
|
+
* @returns
|
|
126
|
+
* - dist[v] = shortest distance from start to v (Infinity if unreachable)
|
|
127
|
+
* - prev[v] = previous vertex on the shortest path (or -1 if none)
|
|
128
|
+
*/
|
|
129
|
+
export function dijkstra(n, adj, start, options) {
|
|
130
|
+
const dist = Array(n).fill(Number.POSITIVE_INFINITY);
|
|
131
|
+
const prev = Array(n).fill(-1);
|
|
132
|
+
if (start < 0 || start >= n)
|
|
133
|
+
return { dist, prev };
|
|
134
|
+
const target = options?.target;
|
|
135
|
+
dist[start] = 0;
|
|
136
|
+
// PriorityQueue is a max-heap by default; invert comparator to make it a min-heap by distance.
|
|
137
|
+
const pq = new PriorityQueue((a, b) => b.d - a.d);
|
|
138
|
+
pq.push({ v: start, d: 0 });
|
|
139
|
+
while (!pq.empty) {
|
|
140
|
+
const cur = pq.pop();
|
|
141
|
+
const u = cur.v;
|
|
142
|
+
const d = cur.d;
|
|
143
|
+
if (d !== dist[u])
|
|
144
|
+
continue; // stale entry
|
|
145
|
+
if (target !== undefined && u === target)
|
|
146
|
+
break;
|
|
147
|
+
for (const e of adj[u] ?? []) {
|
|
148
|
+
const v = e.to;
|
|
149
|
+
const w = e.weight;
|
|
150
|
+
if (v < 0 || v >= n)
|
|
151
|
+
continue;
|
|
152
|
+
if (w < 0)
|
|
153
|
+
throw new RangeError('dijkstra: edge weights must be non-negative');
|
|
154
|
+
const nd = d + w;
|
|
155
|
+
if (nd < dist[v]) {
|
|
156
|
+
dist[v] = nd;
|
|
157
|
+
prev[v] = u;
|
|
158
|
+
pq.push({ v, d: nd });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return { dist, prev };
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Reconstruct a path from a `prev` array (as returned by `dijkstra`).
|
|
166
|
+
*
|
|
167
|
+
* @returns an array of vertices from start to target (inclusive), or [] if unreachable.
|
|
168
|
+
*/
|
|
169
|
+
export function reconstructPath(prev, start, target) {
|
|
170
|
+
if (start < 0 || start >= prev.length)
|
|
171
|
+
return [];
|
|
172
|
+
if (target < 0 || target >= prev.length)
|
|
173
|
+
return [];
|
|
174
|
+
if (start === target)
|
|
175
|
+
return [start];
|
|
176
|
+
const path = [];
|
|
177
|
+
let v = target;
|
|
178
|
+
for (let steps = 0; steps < prev.length; steps++) {
|
|
179
|
+
path.push(v);
|
|
180
|
+
if (v === start)
|
|
181
|
+
break;
|
|
182
|
+
v = prev[v];
|
|
183
|
+
if (v === -1)
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
if (path[path.length - 1] !== start)
|
|
187
|
+
return [];
|
|
188
|
+
path.reverse();
|
|
189
|
+
return path;
|
|
190
|
+
}
|
|
119
191
|
//# sourceMappingURL=graph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/algorithms/graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,CAAS,EACT,GAA0B,EAC1B,KAAa;IAEb,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAa,EAAE,CAAC;IACvB,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACZ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,CAAS,EACT,GAA0B,EAC1B,KAAa;IAEb,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACvB,IAAI,IAAI,CAAC,CAAC,CAAC;YAAE,SAAS;QACtB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAQD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,CAAS,EACT,GAA0B;IAE1B,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7B,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,CAAS,EACT,GAA0C,EAC1C,OAAkC;IAElC,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC;IAE/C,qCAAqC;IACrC,iEAAiE;IACjE,uCAAuC;IACvC,MAAM,KAAK,GAA6B,EAAE,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC;YACxB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC;gBAAE,MAAM,CAAC,qCAAqC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC1C,CAAC"}
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/algorithms/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,5 @@ export { StringRollingHash } from './stringHashing.js';
|
|
|
5
5
|
export { RabinKarp, RABIN_KARP_DEFAULT_MODS } from './rabinKarp.js';
|
|
6
6
|
export type { RabinKarpTripleMods } from './rabinKarp.js';
|
|
7
7
|
export type { WeightedUndirectedEdge } from './graph.js';
|
|
8
|
-
export { breadthFirstSearch, depthFirstSearch, connectedComponents, kruskalMST, } from './graph.js';
|
|
8
|
+
export { breadthFirstSearch, depthFirstSearch, connectedComponents, dijkstra, reconstructPath, kruskalMST, } from './graph.js';
|
|
9
9
|
//# 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,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,GACX,MAAM,YAAY,CAAC"}
|
|
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,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,EACR,eAAe,EACf,UAAU,GACX,MAAM,YAAY,CAAC"}
|
package/dist/algorithms/index.js
CHANGED
|
@@ -3,5 +3,5 @@ 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 { breadthFirstSearch, depthFirstSearch, connectedComponents, kruskalMST, } from './graph.js';
|
|
6
|
+
export { breadthFirstSearch, depthFirstSearch, connectedComponents, dijkstra, reconstructPath, kruskalMST, } from './graph.js';
|
|
7
7
|
//# 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;AAGpE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,GACX,MAAM,YAAY,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;AAGpE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,EACR,eAAe,EACf,UAAU,GACX,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Segment trees: range queries and point updates in O(log n).
|
|
3
|
+
*
|
|
4
|
+
* - {@link GeneralSegmentTree} — full control: custom **merge** (internal nodes) and **buildLeaf** (initial + point updates).
|
|
5
|
+
* - {@link SegmentTree} — same stored type as array; custom combine + neutral only.
|
|
6
|
+
* - {@link SegmentTreeSum} — range sum, point assign.
|
|
7
|
+
* - {@link SegmentTreeMin} — range minimum, point assign.
|
|
8
|
+
* - {@link SegmentTreeMax} — range maximum, point assign.
|
|
9
|
+
* - {@link LazySegmentTreeSum} — range add + range sum (lazy propagation).
|
|
10
|
+
*
|
|
11
|
+
* All range endpoints are **inclusive**: `query(l, r)` uses indices `l` through `r`.
|
|
12
|
+
*/
|
|
13
|
+
export type SegmentCombine<T> = (a: T, b: T) => T;
|
|
14
|
+
/** Combine two child segment aggregates into the parent (internal nodes). */
|
|
15
|
+
export type SegmentMerge<T> = (left: T, right: T) => T;
|
|
16
|
+
/**
|
|
17
|
+
* Turn each raw array element into the leaf value stored in the tree.
|
|
18
|
+
* Used on initial build and on every `update`.
|
|
19
|
+
*/
|
|
20
|
+
export type SegmentLeafBuild<T, V> = (value: V, index: number) => T;
|
|
21
|
+
export interface GeneralSegmentTreeConfig<T, V> {
|
|
22
|
+
/** Combine left and right child aggregates (must be associative with `neutral`). */
|
|
23
|
+
merge: SegmentMerge<T>;
|
|
24
|
+
/** Result of `merge` when a query misses the segment (identity for `merge`). */
|
|
25
|
+
neutral: T;
|
|
26
|
+
/** Build the leaf at `index` from the current raw value `value`. */
|
|
27
|
+
buildLeaf: SegmentLeafBuild<T, V>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* General-purpose segment tree: raw array type `V`, stored aggregate type `T`.
|
|
31
|
+
* You supply **merge** for internal nodes and **buildLeaf** for leaves (build + point updates).
|
|
32
|
+
*/
|
|
33
|
+
export declare class GeneralSegmentTree<T, V> {
|
|
34
|
+
private readonly _n;
|
|
35
|
+
private readonly _tree;
|
|
36
|
+
private readonly _raw;
|
|
37
|
+
private readonly _merge;
|
|
38
|
+
private readonly _neutral;
|
|
39
|
+
private readonly _buildLeaf;
|
|
40
|
+
constructor(values: readonly V[], config: GeneralSegmentTreeConfig<T, V>);
|
|
41
|
+
get size(): number;
|
|
42
|
+
/** Current raw value at `index` (the same `V` you pass to `update`). */
|
|
43
|
+
rawAt(index: number): V;
|
|
44
|
+
/**
|
|
45
|
+
* Set raw value at `index`, rebuild leaf with `buildLeaf`, refresh ancestors. O(log n).
|
|
46
|
+
*/
|
|
47
|
+
update(index: number, rawValue: V): void;
|
|
48
|
+
/** Aggregate over inclusive range `[left, right]`. O(log n). */
|
|
49
|
+
query(left: number, right: number): T;
|
|
50
|
+
private _bounds;
|
|
51
|
+
private _build;
|
|
52
|
+
private _update;
|
|
53
|
+
private _query;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Generic segment tree: stored type equals array element type; leaves are the raw values.
|
|
57
|
+
* Equivalent to {@link GeneralSegmentTree} with `buildLeaf: (v) => v`.
|
|
58
|
+
*/
|
|
59
|
+
export declare class SegmentTree<T> {
|
|
60
|
+
private readonly _inner;
|
|
61
|
+
/**
|
|
62
|
+
* @param values Initial leaf values (copied).
|
|
63
|
+
* @param combine Associative operation (e.g. addition, min, max).
|
|
64
|
+
* @param neutral Identity for `combine` (e.g. 0 for sum, Infinity for min).
|
|
65
|
+
*/
|
|
66
|
+
constructor(values: readonly T[], combine: SegmentCombine<T>, neutral: T);
|
|
67
|
+
get size(): number;
|
|
68
|
+
/** Set index `index` to `value` and refresh ancestors. O(log n). */
|
|
69
|
+
update(index: number, value: T): void;
|
|
70
|
+
/** Aggregate over inclusive range `[left, right]`. O(log n). */
|
|
71
|
+
query(left: number, right: number): T;
|
|
72
|
+
}
|
|
73
|
+
/** Range sum and point assign. Neutral element is `0`. */
|
|
74
|
+
export declare class SegmentTreeSum extends SegmentTree<number> {
|
|
75
|
+
constructor(values: readonly number[]);
|
|
76
|
+
}
|
|
77
|
+
/** Range minimum and point assign. Neutral for out-of-range is `Infinity`. */
|
|
78
|
+
export declare class SegmentTreeMin extends SegmentTree<number> {
|
|
79
|
+
constructor(values: readonly number[]);
|
|
80
|
+
}
|
|
81
|
+
/** Range maximum and point assign. Neutral for out-of-range is `-Infinity`. */
|
|
82
|
+
export declare class SegmentTreeMax extends SegmentTree<number> {
|
|
83
|
+
constructor(values: readonly number[]);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Lazy segment tree: add a constant to every element in `[left, right]` and query range sums.
|
|
87
|
+
* Both operations are O(log n).
|
|
88
|
+
*/
|
|
89
|
+
export declare class LazySegmentTreeSum {
|
|
90
|
+
private readonly _n;
|
|
91
|
+
private readonly _tree;
|
|
92
|
+
private readonly _lazy;
|
|
93
|
+
constructor(values: readonly number[]);
|
|
94
|
+
get size(): number;
|
|
95
|
+
/** Add `delta` to each element in inclusive `[left, right]`. O(log n). */
|
|
96
|
+
rangeAdd(left: number, right: number, delta: number): void;
|
|
97
|
+
/** Sum of elements in inclusive `[left, right]`. O(log n). */
|
|
98
|
+
rangeSum(left: number, right: number): number;
|
|
99
|
+
/** Point assign (sets one index; clears lazy along the path). O(log n). */
|
|
100
|
+
set(index: number, value: number): void;
|
|
101
|
+
private _bounds;
|
|
102
|
+
private _build;
|
|
103
|
+
private _push;
|
|
104
|
+
private _rangeAdd;
|
|
105
|
+
private _rangeSum;
|
|
106
|
+
private _set;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=SegmentTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SegmentTree.d.ts","sourceRoot":"","sources":["../../src/collections/SegmentTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General-purpose segment tree: raw array type `V`, stored aggregate type `T`.
|
|
3
|
+
* You supply **merge** for internal nodes and **buildLeaf** for leaves (build + point updates).
|
|
4
|
+
*/
|
|
5
|
+
export class GeneralSegmentTree {
|
|
6
|
+
constructor(values, config) {
|
|
7
|
+
this._n = values.length;
|
|
8
|
+
this._merge = config.merge;
|
|
9
|
+
this._neutral = config.neutral;
|
|
10
|
+
this._buildLeaf = config.buildLeaf;
|
|
11
|
+
this._raw = this._n > 0 ? Array.from(values) : [];
|
|
12
|
+
this._tree = new Array(Math.max(1, 4 * this._n));
|
|
13
|
+
if (this._n > 0) {
|
|
14
|
+
this._build(1, 0, this._n - 1);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
get size() {
|
|
18
|
+
return this._n;
|
|
19
|
+
}
|
|
20
|
+
/** Current raw value at `index` (the same `V` you pass to `update`). */
|
|
21
|
+
rawAt(index) {
|
|
22
|
+
this._bounds(index);
|
|
23
|
+
return this._raw[index];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Set raw value at `index`, rebuild leaf with `buildLeaf`, refresh ancestors. O(log n).
|
|
27
|
+
*/
|
|
28
|
+
update(index, rawValue) {
|
|
29
|
+
this._bounds(index);
|
|
30
|
+
this._raw[index] = rawValue;
|
|
31
|
+
this._update(1, 0, this._n - 1, index);
|
|
32
|
+
}
|
|
33
|
+
/** Aggregate over inclusive range `[left, right]`. O(log n). */
|
|
34
|
+
query(left, right) {
|
|
35
|
+
this._bounds(left);
|
|
36
|
+
this._bounds(right);
|
|
37
|
+
if (left > right)
|
|
38
|
+
throw new RangeError('left must be <= right');
|
|
39
|
+
return this._query(1, 0, this._n - 1, left, right);
|
|
40
|
+
}
|
|
41
|
+
_bounds(i) {
|
|
42
|
+
if (this._n === 0)
|
|
43
|
+
throw new RangeError('GeneralSegmentTree is empty');
|
|
44
|
+
if (i < 0 || i >= this._n) {
|
|
45
|
+
throw new RangeError(`Index ${i} out of range [0, ${this._n - 1}]`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
_build(node, l, r) {
|
|
49
|
+
if (l === r) {
|
|
50
|
+
this._tree[node] = this._buildLeaf(this._raw[l], l);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const mid = (l + r) >>> 1;
|
|
54
|
+
this._build(node * 2, l, mid);
|
|
55
|
+
this._build(node * 2 + 1, mid + 1, r);
|
|
56
|
+
this._tree[node] = this._merge(this._tree[node * 2], this._tree[node * 2 + 1]);
|
|
57
|
+
}
|
|
58
|
+
_update(node, l, r, idx) {
|
|
59
|
+
if (l === r) {
|
|
60
|
+
this._tree[node] = this._buildLeaf(this._raw[idx], idx);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const mid = (l + r) >>> 1;
|
|
64
|
+
if (idx <= mid)
|
|
65
|
+
this._update(node * 2, l, mid, idx);
|
|
66
|
+
else
|
|
67
|
+
this._update(node * 2 + 1, mid + 1, r, idx);
|
|
68
|
+
this._tree[node] = this._merge(this._tree[node * 2], this._tree[node * 2 + 1]);
|
|
69
|
+
}
|
|
70
|
+
_query(node, l, r, ql, qr) {
|
|
71
|
+
if (qr < l || r < ql)
|
|
72
|
+
return this._neutral;
|
|
73
|
+
if (ql <= l && r <= qr)
|
|
74
|
+
return this._tree[node];
|
|
75
|
+
const mid = (l + r) >>> 1;
|
|
76
|
+
const leftQ = this._query(node * 2, l, mid, ql, qr);
|
|
77
|
+
const rightQ = this._query(node * 2 + 1, mid + 1, r, ql, qr);
|
|
78
|
+
return this._merge(leftQ, rightQ);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Generic segment tree: stored type equals array element type; leaves are the raw values.
|
|
83
|
+
* Equivalent to {@link GeneralSegmentTree} with `buildLeaf: (v) => v`.
|
|
84
|
+
*/
|
|
85
|
+
export class SegmentTree {
|
|
86
|
+
/**
|
|
87
|
+
* @param values Initial leaf values (copied).
|
|
88
|
+
* @param combine Associative operation (e.g. addition, min, max).
|
|
89
|
+
* @param neutral Identity for `combine` (e.g. 0 for sum, Infinity for min).
|
|
90
|
+
*/
|
|
91
|
+
constructor(values, combine, neutral) {
|
|
92
|
+
this._inner = new GeneralSegmentTree(values, {
|
|
93
|
+
merge: combine,
|
|
94
|
+
neutral,
|
|
95
|
+
buildLeaf: (v) => v,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
get size() {
|
|
99
|
+
return this._inner.size;
|
|
100
|
+
}
|
|
101
|
+
/** Set index `index` to `value` and refresh ancestors. O(log n). */
|
|
102
|
+
update(index, value) {
|
|
103
|
+
this._inner.update(index, value);
|
|
104
|
+
}
|
|
105
|
+
/** Aggregate over inclusive range `[left, right]`. O(log n). */
|
|
106
|
+
query(left, right) {
|
|
107
|
+
return this._inner.query(left, right);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** Range sum and point assign. Neutral element is `0`. */
|
|
111
|
+
export class SegmentTreeSum extends SegmentTree {
|
|
112
|
+
constructor(values) {
|
|
113
|
+
super(values, (a, b) => a + b, 0);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Range minimum and point assign. Neutral for out-of-range is `Infinity`. */
|
|
117
|
+
export class SegmentTreeMin extends SegmentTree {
|
|
118
|
+
constructor(values) {
|
|
119
|
+
super(values, (a, b) => Math.min(a, b), Infinity);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** Range maximum and point assign. Neutral for out-of-range is `-Infinity`. */
|
|
123
|
+
export class SegmentTreeMax extends SegmentTree {
|
|
124
|
+
constructor(values) {
|
|
125
|
+
super(values, (a, b) => Math.max(a, b), -Infinity);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Lazy segment tree: add a constant to every element in `[left, right]` and query range sums.
|
|
130
|
+
* Both operations are O(log n).
|
|
131
|
+
*/
|
|
132
|
+
export class LazySegmentTreeSum {
|
|
133
|
+
constructor(values) {
|
|
134
|
+
this._n = values.length;
|
|
135
|
+
const cap = Math.max(1, 4 * this._n);
|
|
136
|
+
this._tree = new Array(cap).fill(0);
|
|
137
|
+
this._lazy = new Array(cap).fill(0);
|
|
138
|
+
if (this._n > 0) {
|
|
139
|
+
this._build(1, 0, this._n - 1, values);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
get size() {
|
|
143
|
+
return this._n;
|
|
144
|
+
}
|
|
145
|
+
/** Add `delta` to each element in inclusive `[left, right]`. O(log n). */
|
|
146
|
+
rangeAdd(left, right, delta) {
|
|
147
|
+
this._bounds(left);
|
|
148
|
+
this._bounds(right);
|
|
149
|
+
if (left > right)
|
|
150
|
+
throw new RangeError('left must be <= right');
|
|
151
|
+
this._rangeAdd(1, 0, this._n - 1, left, right, delta);
|
|
152
|
+
}
|
|
153
|
+
/** Sum of elements in inclusive `[left, right]`. O(log n). */
|
|
154
|
+
rangeSum(left, right) {
|
|
155
|
+
this._bounds(left);
|
|
156
|
+
this._bounds(right);
|
|
157
|
+
if (left > right)
|
|
158
|
+
throw new RangeError('left must be <= right');
|
|
159
|
+
return this._rangeSum(1, 0, this._n - 1, left, right);
|
|
160
|
+
}
|
|
161
|
+
/** Point assign (sets one index; clears lazy along the path). O(log n). */
|
|
162
|
+
set(index, value) {
|
|
163
|
+
this._bounds(index);
|
|
164
|
+
this._set(1, 0, this._n - 1, index, value);
|
|
165
|
+
}
|
|
166
|
+
_bounds(i) {
|
|
167
|
+
if (this._n === 0)
|
|
168
|
+
throw new RangeError('LazySegmentTreeSum is empty');
|
|
169
|
+
if (i < 0 || i >= this._n) {
|
|
170
|
+
throw new RangeError(`Index ${i} out of range [0, ${this._n - 1}]`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
_build(node, l, r, arr) {
|
|
174
|
+
if (l === r) {
|
|
175
|
+
this._tree[node] = arr[l];
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const mid = (l + r) >>> 1;
|
|
179
|
+
this._build(node * 2, l, mid, arr);
|
|
180
|
+
this._build(node * 2 + 1, mid + 1, r, arr);
|
|
181
|
+
this._tree[node] = this._tree[node * 2] + this._tree[node * 2 + 1];
|
|
182
|
+
}
|
|
183
|
+
_push(node, l, r) {
|
|
184
|
+
const lz = this._lazy[node];
|
|
185
|
+
if (lz === 0 || l === r)
|
|
186
|
+
return;
|
|
187
|
+
const mid = (l + r) >>> 1;
|
|
188
|
+
const leftLen = mid - l + 1;
|
|
189
|
+
const rightLen = r - mid;
|
|
190
|
+
this._lazy[node * 2] += lz;
|
|
191
|
+
this._lazy[node * 2 + 1] += lz;
|
|
192
|
+
this._tree[node * 2] += lz * leftLen;
|
|
193
|
+
this._tree[node * 2 + 1] += lz * rightLen;
|
|
194
|
+
this._lazy[node] = 0;
|
|
195
|
+
}
|
|
196
|
+
_rangeAdd(node, l, r, ql, qr, delta) {
|
|
197
|
+
if (qr < l || r < ql)
|
|
198
|
+
return;
|
|
199
|
+
if (ql <= l && r <= qr) {
|
|
200
|
+
this._tree[node] += delta * (r - l + 1);
|
|
201
|
+
this._lazy[node] += delta;
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
this._push(node, l, r);
|
|
205
|
+
const mid = (l + r) >>> 1;
|
|
206
|
+
this._rangeAdd(node * 2, l, mid, ql, qr, delta);
|
|
207
|
+
this._rangeAdd(node * 2 + 1, mid + 1, r, ql, qr, delta);
|
|
208
|
+
this._tree[node] = this._tree[node * 2] + this._tree[node * 2 + 1];
|
|
209
|
+
}
|
|
210
|
+
_rangeSum(node, l, r, ql, qr) {
|
|
211
|
+
if (qr < l || r < ql)
|
|
212
|
+
return 0;
|
|
213
|
+
if (ql <= l && r <= qr)
|
|
214
|
+
return this._tree[node];
|
|
215
|
+
this._push(node, l, r);
|
|
216
|
+
const mid = (l + r) >>> 1;
|
|
217
|
+
return (this._rangeSum(node * 2, l, mid, ql, qr) + this._rangeSum(node * 2 + 1, mid + 1, r, ql, qr));
|
|
218
|
+
}
|
|
219
|
+
_set(node, l, r, idx, value) {
|
|
220
|
+
if (l === r) {
|
|
221
|
+
this._tree[node] = value;
|
|
222
|
+
this._lazy[node] = 0;
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
this._push(node, l, r);
|
|
226
|
+
const mid = (l + r) >>> 1;
|
|
227
|
+
if (idx <= mid)
|
|
228
|
+
this._set(node * 2, l, mid, idx, value);
|
|
229
|
+
else
|
|
230
|
+
this._set(node * 2 + 1, mid + 1, r, idx, value);
|
|
231
|
+
this._tree[node] = this._tree[node * 2] + this._tree[node * 2 + 1];
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=SegmentTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SegmentTree.js","sourceRoot":"","sources":["../../src/collections/SegmentTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ export { UnorderedSet } from './UnorderedSet.js';
|
|
|
10
10
|
export { OrderedMultiSet } from './OrderedMultiSet.js';
|
|
11
11
|
export { OrderedMultiMap } from './OrderedMultiMap.js';
|
|
12
12
|
export { RedBlackTree, RBNode } from './RedBlackTree.js';
|
|
13
|
+
export { GeneralSegmentTree, SegmentTree, SegmentTreeSum, SegmentTreeMin, SegmentTreeMax, LazySegmentTreeSum, } from './SegmentTree.js';
|
|
14
|
+
export type { GeneralSegmentTreeConfig, SegmentCombine, SegmentLeafBuild, SegmentMerge, } from './SegmentTree.js';
|
|
13
15
|
export type { WeightedEdge, AdjacencyList, WeightedAdjacencyList } from './Graph.js';
|
|
14
16
|
export { createAdjacencyList, createWeightedAdjacencyList, addEdge, deleteEdge } from './Graph.js';
|
|
15
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -10,5 +10,6 @@ export { UnorderedSet } from './UnorderedSet.js';
|
|
|
10
10
|
export { OrderedMultiSet } from './OrderedMultiSet.js';
|
|
11
11
|
export { OrderedMultiMap } from './OrderedMultiMap.js';
|
|
12
12
|
export { RedBlackTree, RBNode } from './RedBlackTree.js';
|
|
13
|
+
export { GeneralSegmentTree, SegmentTree, SegmentTreeSum, SegmentTreeMin, SegmentTreeMax, LazySegmentTreeSum, } from './SegmentTree.js';
|
|
13
14
|
export { createAdjacencyList, createWeightedAdjacencyList, addEdge, deleteEdge } from './Graph.js';
|
|
14
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* @example
|
|
6
6
|
* import { Vector, Stack, Queue, List, sort, binarySearch, clamp } from 'typescript-dsa-stl';
|
|
7
7
|
*/
|
|
8
|
-
export { Vector, Stack, Queue, List, ListNode, PriorityQueue, OrderedMap, UnorderedMap, OrderedSet, UnorderedSet, OrderedMultiSet, OrderedMultiMap, addEdge, deleteEdge, createAdjacencyList, createWeightedAdjacencyList, } from './collections/index.js';
|
|
9
|
-
export type { WeightedEdge, AdjacencyList, WeightedAdjacencyList } 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, connectedComponents, kruskalMST, } from './algorithms/index.js';
|
|
8
|
+
export { Vector, Stack, Queue, 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 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, connectedComponents, dijkstra, reconstructPath, kruskalMST, } from './algorithms/index.js';
|
|
11
11
|
export type { WeightedUndirectedEdge, RabinKarpTripleMods } 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';
|
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,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,
|
|
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,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,mBAAmB,EACnB,QAAQ,EACR,eAAe,EACf,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACzF,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
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* @example
|
|
6
6
|
* import { Vector, Stack, Queue, List, sort, binarySearch, clamp } from 'typescript-dsa-stl';
|
|
7
7
|
*/
|
|
8
|
-
export { Vector, Stack, Queue, List, ListNode, PriorityQueue, OrderedMap, UnorderedMap, OrderedSet, UnorderedSet, OrderedMultiSet, OrderedMultiMap, addEdge, deleteEdge, createAdjacencyList, createWeightedAdjacencyList, } 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, connectedComponents, kruskalMST, } from './algorithms/index.js';
|
|
8
|
+
export { Vector, Stack, Queue, 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, connectedComponents, dijkstra, reconstructPath, 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,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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,MAAM,EACN,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,mBAAmB,EACnB,QAAQ,EACR,eAAe,EACf,UAAU,GACX,MAAM,uBAAuB,CAAC;AAE/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": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "STL-style data structures and algorithms for TypeScript: Vector, Stack, Queue, List, PriorityQueue, Map, Set, sort, binarySearch, graph utilities. Use like C++ STL.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|