@zengrid/shared 1.0.0 → 1.0.2
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/dist/README.md +44 -0
- package/dist/index.cjs.default.js +1 -0
- package/dist/index.cjs.js +6250 -0
- package/dist/index.cjs.mjs +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +6207 -0
- package/dist/package.json +54 -0
- package/dist/src/algorithms/filter/bloom-filter.d.ts +120 -0
- package/dist/src/algorithms/filter/bloom-filter.d.ts.map +1 -0
- package/dist/src/algorithms/filter/index.d.ts +7 -0
- package/dist/src/algorithms/filter/index.d.ts.map +1 -0
- package/dist/src/algorithms/graph/bfs.d.ts +71 -0
- package/dist/src/algorithms/graph/bfs.d.ts.map +1 -0
- package/dist/src/algorithms/graph/dfs.d.ts +62 -0
- package/dist/src/algorithms/graph/dfs.d.ts.map +1 -0
- package/dist/src/algorithms/graph/graph.interface.d.ts +63 -0
- package/dist/src/algorithms/graph/graph.interface.d.ts.map +1 -0
- package/dist/src/algorithms/graph/index.d.ts +9 -0
- package/dist/src/algorithms/graph/index.d.ts.map +1 -0
- package/dist/src/algorithms/index.d.ts +11 -0
- package/dist/src/algorithms/index.d.ts.map +1 -0
- package/dist/src/algorithms/pattern/index.d.ts +8 -0
- package/dist/src/algorithms/pattern/index.d.ts.map +1 -0
- package/dist/src/algorithms/pattern/sequence-detector.d.ts +62 -0
- package/dist/src/algorithms/pattern/sequence-detector.d.ts.map +1 -0
- package/dist/src/algorithms/search/binary-search.d.ts +86 -0
- package/dist/src/algorithms/search/binary-search.d.ts.map +1 -0
- package/dist/src/algorithms/search/index.d.ts +6 -0
- package/dist/src/algorithms/search/index.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/comparators.d.ts +126 -0
- package/dist/src/algorithms/sorting/comparators.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/index.d.ts +9 -0
- package/dist/src/algorithms/sorting/index.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/sorting.interface.d.ts +38 -0
- package/dist/src/algorithms/sorting/sorting.interface.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/timsort.d.ts +55 -0
- package/dist/src/algorithms/sorting/timsort.d.ts.map +1 -0
- package/dist/src/data-structures/column-store/column-store.d.ts +52 -0
- package/dist/src/data-structures/column-store/column-store.d.ts.map +1 -0
- package/dist/src/data-structures/column-store/column-store.interface.d.ts +155 -0
- package/dist/src/data-structures/column-store/column-store.interface.d.ts.map +1 -0
- package/dist/src/data-structures/column-store/index.d.ts +6 -0
- package/dist/src/data-structures/column-store/index.d.ts.map +1 -0
- package/dist/src/data-structures/command-stack/command-stack.d.ts +61 -0
- package/dist/src/data-structures/command-stack/command-stack.d.ts.map +1 -0
- package/dist/src/data-structures/command-stack/command-stack.interface.d.ts +80 -0
- package/dist/src/data-structures/command-stack/command-stack.interface.d.ts.map +1 -0
- package/dist/src/data-structures/command-stack/index.d.ts +3 -0
- package/dist/src/data-structures/command-stack/index.d.ts.map +1 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.d.ts +147 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.d.ts.map +1 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.interface.d.ts +161 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.interface.d.ts.map +1 -0
- package/dist/src/data-structures/dependency-graph/index.d.ts +8 -0
- package/dist/src/data-structures/dependency-graph/index.d.ts.map +1 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.d.ts +84 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.d.ts.map +1 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.interface.d.ts +185 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.interface.d.ts.map +1 -0
- package/dist/src/data-structures/disjoint-set/index.d.ts +7 -0
- package/dist/src/data-structures/disjoint-set/index.d.ts.map +1 -0
- package/dist/src/data-structures/index-map/index-map.d.ts +150 -0
- package/dist/src/data-structures/index-map/index-map.d.ts.map +1 -0
- package/dist/src/data-structures/index-map/index-map.interface.d.ts +186 -0
- package/dist/src/data-structures/index-map/index-map.interface.d.ts.map +1 -0
- package/dist/src/data-structures/index-map/index.d.ts +6 -0
- package/dist/src/data-structures/index-map/index.d.ts.map +1 -0
- package/dist/src/data-structures/index.d.ts +36 -0
- package/dist/src/data-structures/index.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/index.d.ts +7 -0
- package/dist/src/data-structures/interval-tree/index.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/interval-tree.d.ts +141 -0
- package/dist/src/data-structures/interval-tree/interval-tree.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/interval-tree.interface.d.ts +212 -0
- package/dist/src/data-structures/interval-tree/interval-tree.interface.d.ts.map +1 -0
- package/dist/src/data-structures/lru-cache/index.d.ts +3 -0
- package/dist/src/data-structures/lru-cache/index.d.ts.map +1 -0
- package/dist/src/data-structures/lru-cache/lru-cache.d.ts +134 -0
- package/dist/src/data-structures/lru-cache/lru-cache.d.ts.map +1 -0
- package/dist/src/data-structures/lru-cache/lru-cache.interface.d.ts +173 -0
- package/dist/src/data-structures/lru-cache/lru-cache.interface.d.ts.map +1 -0
- package/dist/src/data-structures/prefix-sum-array/index.d.ts +6 -0
- package/dist/src/data-structures/prefix-sum-array/index.d.ts.map +1 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.d.ts +63 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.d.ts.map +1 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts +80 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts.map +1 -0
- package/dist/src/data-structures/rtree/index.d.ts +8 -0
- package/dist/src/data-structures/rtree/index.d.ts.map +1 -0
- package/dist/src/data-structures/rtree/rtree.d.ts +81 -0
- package/dist/src/data-structures/rtree/rtree.d.ts.map +1 -0
- package/dist/src/data-structures/rtree/rtree.interface.d.ts +143 -0
- package/dist/src/data-structures/rtree/rtree.interface.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/index.d.ts +4 -0
- package/dist/src/data-structures/segment-tree/index.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/segment-tree.d.ts +134 -0
- package/dist/src/data-structures/segment-tree/segment-tree.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/segment-tree.interface.d.ts +202 -0
- package/dist/src/data-structures/segment-tree/segment-tree.interface.d.ts.map +1 -0
- package/dist/src/data-structures/skip-list/index.d.ts +4 -0
- package/dist/src/data-structures/skip-list/index.d.ts.map +1 -0
- package/dist/src/data-structures/skip-list/skip-list.d.ts +137 -0
- package/dist/src/data-structures/skip-list/skip-list.d.ts.map +1 -0
- package/dist/src/data-structures/skip-list/skip-list.interface.d.ts +223 -0
- package/dist/src/data-structures/skip-list/skip-list.interface.d.ts.map +1 -0
- package/dist/src/data-structures/sparse-matrix/index.d.ts +6 -0
- package/dist/src/data-structures/sparse-matrix/index.d.ts.map +1 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.d.ts +44 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.d.ts.map +1 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.interface.d.ts +105 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.interface.d.ts.map +1 -0
- package/dist/src/data-structures/suffix-array/index.d.ts +3 -0
- package/dist/src/data-structures/suffix-array/index.d.ts.map +1 -0
- package/dist/src/data-structures/suffix-array/suffix-array.d.ts +102 -0
- package/dist/src/data-structures/suffix-array/suffix-array.d.ts.map +1 -0
- package/dist/src/data-structures/suffix-array/suffix-array.interface.d.ts +117 -0
- package/dist/src/data-structures/suffix-array/suffix-array.interface.d.ts.map +1 -0
- package/dist/src/data-structures/trie/index.d.ts +8 -0
- package/dist/src/data-structures/trie/index.d.ts.map +1 -0
- package/dist/src/data-structures/trie/trie.d.ts +205 -0
- package/dist/src/data-structures/trie/trie.d.ts.map +1 -0
- package/dist/src/data-structures/trie/trie.interface.d.ts +117 -0
- package/dist/src/data-structures/trie/trie.interface.d.ts.map +1 -0
- package/dist/src/index.d.ts +47 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/patterns/coordinator.d.ts +90 -0
- package/dist/src/patterns/coordinator.d.ts.map +1 -0
- package/dist/src/patterns/event-emitter.d.ts +106 -0
- package/dist/src/patterns/event-emitter.d.ts.map +1 -0
- package/dist/src/patterns/factory.d.ts +120 -0
- package/dist/src/patterns/factory.d.ts.map +1 -0
- package/dist/src/patterns/index.d.ts +21 -0
- package/dist/src/patterns/index.d.ts.map +1 -0
- package/dist/src/patterns/mediator.d.ts +116 -0
- package/dist/src/patterns/mediator.d.ts.map +1 -0
- package/dist/src/patterns/object-pool.d.ts +178 -0
- package/dist/src/patterns/object-pool.d.ts.map +1 -0
- package/dist/src/patterns/observer.d.ts +89 -0
- package/dist/src/patterns/observer.d.ts.map +1 -0
- package/dist/src/patterns/operation-mode.d.ts +75 -0
- package/dist/src/patterns/operation-mode.d.ts.map +1 -0
- package/dist/src/patterns/state-machine.d.ts +122 -0
- package/dist/src/patterns/state-machine.d.ts.map +1 -0
- package/dist/src/types/common.d.ts +56 -0
- package/dist/src/types/common.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +5 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/utils/index.d.ts +7 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/timing.d.ts +104 -0
- package/dist/src/utils/timing.d.ts.map +1 -0
- package/dist/src/utils/timing.interface.d.ts +96 -0
- package/dist/src/utils/timing.interface.d.ts.map +1 -0
- package/package.json +52 -52
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zengrid/shared",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "14 advanced data structures and algorithms for high-performance grids",
|
|
5
|
+
"main": "./index.cjs.js",
|
|
6
|
+
"module": "./index.esm.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"module": "./index.esm.js",
|
|
12
|
+
"types": "./index.d.ts",
|
|
13
|
+
"import": "./index.cjs.mjs",
|
|
14
|
+
"default": "./index.cjs.js"
|
|
15
|
+
},
|
|
16
|
+
"./algorithms/*": {
|
|
17
|
+
"types": "./dist/algorithms/*/index.d.ts",
|
|
18
|
+
"import": "./dist/algorithms/*/index.esm.js",
|
|
19
|
+
"require": "./dist/algorithms/*/index.cjs"
|
|
20
|
+
},
|
|
21
|
+
"./data-structures/*": {
|
|
22
|
+
"types": "./dist/data-structures/*/index.d.ts",
|
|
23
|
+
"import": "./dist/data-structures/*/index.esm.js",
|
|
24
|
+
"require": "./dist/data-structures/*/index.cjs"
|
|
25
|
+
},
|
|
26
|
+
"./types": {
|
|
27
|
+
"types": "./dist/types/index.d.ts",
|
|
28
|
+
"import": "./dist/types/index.esm.js",
|
|
29
|
+
"require": "./dist/types/index.cjs"
|
|
30
|
+
},
|
|
31
|
+
"./package.json": "./package.json"
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist",
|
|
35
|
+
"README.md"
|
|
36
|
+
],
|
|
37
|
+
"keywords": [
|
|
38
|
+
"algorithms",
|
|
39
|
+
"data-structures",
|
|
40
|
+
"grid",
|
|
41
|
+
"utilities"
|
|
42
|
+
],
|
|
43
|
+
"author": "ZenGrid Team",
|
|
44
|
+
"license": "MIT",
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "https://github.com/zengrid-dev/zengrid.git",
|
|
48
|
+
"directory": "packages/shared"
|
|
49
|
+
},
|
|
50
|
+
"bugs": {
|
|
51
|
+
"url": "https://github.com/zengrid-dev/zengrid/issues"
|
|
52
|
+
},
|
|
53
|
+
"homepage": "https://github.com/zengrid-dev/zengrid#readme"
|
|
54
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bloom Filter - Probabilistic Data Structure
|
|
3
|
+
*
|
|
4
|
+
* A space-efficient probabilistic data structure for testing set membership.
|
|
5
|
+
* May have false positives but never false negatives.
|
|
6
|
+
*
|
|
7
|
+
* **Time Complexity:**
|
|
8
|
+
* - Add: O(k) where k = number of hash functions
|
|
9
|
+
* - Check: O(k)
|
|
10
|
+
*
|
|
11
|
+
* **Space Complexity:** O(m) where m = bit array size
|
|
12
|
+
*
|
|
13
|
+
* **Use Cases:**
|
|
14
|
+
* - Quick "definitely not in set" checks (e.g., "does this filter value exist?")
|
|
15
|
+
* - Cache optimization (avoid expensive lookups for non-existent items)
|
|
16
|
+
* - Duplicate detection in large datasets
|
|
17
|
+
* - Spell checkers
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const filter = new BloomFilter(1000, 3); // 1000 bits, 3 hash functions
|
|
22
|
+
*
|
|
23
|
+
* // Add some items
|
|
24
|
+
* filter.add('apple');
|
|
25
|
+
* filter.add('banana');
|
|
26
|
+
* filter.add('cherry');
|
|
27
|
+
*
|
|
28
|
+
* filter.contains('apple'); // true (definitely in set)
|
|
29
|
+
* filter.contains('grape'); // false (definitely NOT in set)
|
|
30
|
+
* filter.contains('apples'); // might be true (false positive possible)
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @example Grid Filter Optimization
|
|
34
|
+
* ```typescript
|
|
35
|
+
* // Quickly check if a filter value might exist before scanning column
|
|
36
|
+
* class ColumnFilter {
|
|
37
|
+
* private bloomFilter = new BloomFilter(10000, 4);
|
|
38
|
+
*
|
|
39
|
+
* indexColumn(values: any[]): void {
|
|
40
|
+
* values.forEach(v => this.bloomFilter.add(String(v)));
|
|
41
|
+
* }
|
|
42
|
+
*
|
|
43
|
+
* mightContain(value: string): boolean {
|
|
44
|
+
* return this.bloomFilter.contains(value);
|
|
45
|
+
* }
|
|
46
|
+
* }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare class BloomFilter {
|
|
50
|
+
private bitArray;
|
|
51
|
+
private size;
|
|
52
|
+
private hashCount;
|
|
53
|
+
/**
|
|
54
|
+
* Create a new Bloom Filter
|
|
55
|
+
*
|
|
56
|
+
* @param size - Size of the bit array (larger = fewer false positives)
|
|
57
|
+
* @param hashCount - Number of hash functions (more = fewer false positives, slower)
|
|
58
|
+
*/
|
|
59
|
+
constructor(size: number, hashCount?: number);
|
|
60
|
+
/**
|
|
61
|
+
* Add an item to the filter
|
|
62
|
+
*
|
|
63
|
+
* @param item - Item to add
|
|
64
|
+
*/
|
|
65
|
+
add(item: string): void;
|
|
66
|
+
/**
|
|
67
|
+
* Check if an item might be in the set
|
|
68
|
+
*
|
|
69
|
+
* @param item - Item to check
|
|
70
|
+
* @returns true if item might be in set, false if definitely NOT in set
|
|
71
|
+
*/
|
|
72
|
+
contains(item: string): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Clear the filter
|
|
75
|
+
*/
|
|
76
|
+
clear(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Get the false positive probability
|
|
79
|
+
*
|
|
80
|
+
* P(false positive) ≈ (1 - e^(-kn/m))^k
|
|
81
|
+
* where k = hash functions, n = items added, m = bit array size
|
|
82
|
+
*
|
|
83
|
+
* @param itemCount - Number of items added
|
|
84
|
+
* @returns Estimated false positive probability
|
|
85
|
+
*/
|
|
86
|
+
getFalsePositiveRate(itemCount: number): number;
|
|
87
|
+
/**
|
|
88
|
+
* Calculate optimal bit array size for desired false positive rate
|
|
89
|
+
*
|
|
90
|
+
* m = -(n * ln(p)) / (ln(2)^2)
|
|
91
|
+
*
|
|
92
|
+
* @param itemCount - Expected number of items
|
|
93
|
+
* @param falsePositiveRate - Desired false positive rate (e.g., 0.01 for 1%)
|
|
94
|
+
* @returns Optimal bit array size
|
|
95
|
+
*/
|
|
96
|
+
static optimalSize(itemCount: number, falsePositiveRate: number): number;
|
|
97
|
+
/**
|
|
98
|
+
* Calculate optimal number of hash functions
|
|
99
|
+
*
|
|
100
|
+
* k = (m/n) * ln(2)
|
|
101
|
+
*
|
|
102
|
+
* @param bitArraySize - Size of bit array
|
|
103
|
+
* @param itemCount - Expected number of items
|
|
104
|
+
* @returns Optimal number of hash functions
|
|
105
|
+
*/
|
|
106
|
+
static optimalHashCount(bitArraySize: number, itemCount: number): number;
|
|
107
|
+
/**
|
|
108
|
+
* Generate multiple hash values for an item
|
|
109
|
+
*/
|
|
110
|
+
private getHashes;
|
|
111
|
+
/**
|
|
112
|
+
* First hash function (simple polynomial hash)
|
|
113
|
+
*/
|
|
114
|
+
private hashFunc1;
|
|
115
|
+
/**
|
|
116
|
+
* Second hash function (FNV-1a variant)
|
|
117
|
+
*/
|
|
118
|
+
private hashFunc2;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=bloom-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bloom-filter.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/algorithms/filter/bloom-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAS;IAE1B;;;;;OAKG;gBACS,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAU;IAM/C;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQvB;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAY/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;;;;OAQG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAQ/C;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM;IAIxE;;;;;;;;OAQG;IACH,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAMxE;;OAEG;IACH,OAAO,CAAC,SAAS;IAejB;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,SAAS;CAUlB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/algorithms/filter/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { AdjacencyList, BFSOptions, PathResult } from './graph.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Breadth-First Search (BFS)
|
|
4
|
+
*
|
|
5
|
+
* Explores nodes level by level, visiting all neighbors before moving deeper.
|
|
6
|
+
*
|
|
7
|
+
* **Time Complexity:** O(V + E) where V = vertices, E = edges
|
|
8
|
+
* **Space Complexity:** O(V) for the queue
|
|
9
|
+
*
|
|
10
|
+
* **Use Cases:**
|
|
11
|
+
* - Shortest path in unweighted graphs
|
|
12
|
+
* - Level-order traversal
|
|
13
|
+
* - Finding connected components
|
|
14
|
+
* - Web crawling
|
|
15
|
+
* - Social network analysis (friends of friends)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const graph: AdjacencyList<string> = new Map([
|
|
20
|
+
* ['A', new Set(['B', 'C'])],
|
|
21
|
+
* ['B', new Set(['D', 'E'])],
|
|
22
|
+
* ['C', new Set(['F'])],
|
|
23
|
+
* ['D', new Set()],
|
|
24
|
+
* ['E', new Set()],
|
|
25
|
+
* ['F', new Set()],
|
|
26
|
+
* ]);
|
|
27
|
+
*
|
|
28
|
+
* const visited = bfs(graph, 'A');
|
|
29
|
+
* // visited: ['A', 'B', 'C', 'D', 'E', 'F'] (breadth-first order)
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @param graph - Adjacency list representation
|
|
33
|
+
* @param start - Starting node
|
|
34
|
+
* @param options - Traversal options
|
|
35
|
+
* @returns Array of visited nodes in BFS order
|
|
36
|
+
*/
|
|
37
|
+
export declare function bfs<T>(graph: AdjacencyList<T>, start: T, options?: BFSOptions<T>): T[];
|
|
38
|
+
/**
|
|
39
|
+
* BFS to find shortest path between two nodes (unweighted)
|
|
40
|
+
*
|
|
41
|
+
* @param graph - Adjacency list
|
|
42
|
+
* @param start - Start node
|
|
43
|
+
* @param end - End node
|
|
44
|
+
* @returns Path result with shortest path
|
|
45
|
+
*/
|
|
46
|
+
export declare function bfsShortestPath<T>(graph: AdjacencyList<T>, start: T, end: T): PathResult<T>;
|
|
47
|
+
/**
|
|
48
|
+
* Find all nodes at a specific distance from start
|
|
49
|
+
*
|
|
50
|
+
* @param graph - Adjacency list
|
|
51
|
+
* @param start - Start node
|
|
52
|
+
* @param distance - Distance from start
|
|
53
|
+
* @returns Array of nodes at the specified distance
|
|
54
|
+
*/
|
|
55
|
+
export declare function nodesAtDistance<T>(graph: AdjacencyList<T>, start: T, distance: number): T[];
|
|
56
|
+
/**
|
|
57
|
+
* Find connected component containing a node
|
|
58
|
+
*
|
|
59
|
+
* @param graph - Adjacency list
|
|
60
|
+
* @param start - Starting node
|
|
61
|
+
* @returns All nodes in the connected component
|
|
62
|
+
*/
|
|
63
|
+
export declare function connectedComponent<T>(graph: AdjacencyList<T>, start: T): T[];
|
|
64
|
+
/**
|
|
65
|
+
* Find all connected components in the graph
|
|
66
|
+
*
|
|
67
|
+
* @param graph - Adjacency list
|
|
68
|
+
* @returns Array of connected components
|
|
69
|
+
*/
|
|
70
|
+
export declare function allConnectedComponents<T>(graph: AdjacencyList<T>): T[][];
|
|
71
|
+
//# sourceMappingURL=bfs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bfs.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/algorithms/graph/bfs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,GAAG,CAAC,CAAC,EACnB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,KAAK,EAAE,CAAC,EACR,OAAO,GAAE,UAAU,CAAC,CAAC,CAAM,GAC1B,CAAC,EAAE,CA8BL;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CA8C3F;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,CA8B3F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAE5E;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAaxE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { AdjacencyList, DFSOptions } from './graph.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Depth-First Search (DFS)
|
|
4
|
+
*
|
|
5
|
+
* Explores as far as possible along each branch before backtracking.
|
|
6
|
+
*
|
|
7
|
+
* **Time Complexity:** O(V + E) where V = vertices, E = edges
|
|
8
|
+
* **Space Complexity:** O(V) for the recursion stack
|
|
9
|
+
*
|
|
10
|
+
* **Use Cases:**
|
|
11
|
+
* - Path finding
|
|
12
|
+
* - Cycle detection
|
|
13
|
+
* - Topological sorting
|
|
14
|
+
* - Connected components
|
|
15
|
+
* - Maze solving
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const graph: AdjacencyList<string> = new Map([
|
|
20
|
+
* ['A', new Set(['B', 'C'])],
|
|
21
|
+
* ['B', new Set(['D'])],
|
|
22
|
+
* ['C', new Set(['D'])],
|
|
23
|
+
* ['D', new Set()],
|
|
24
|
+
* ]);
|
|
25
|
+
*
|
|
26
|
+
* const visited = dfs(graph, 'A');
|
|
27
|
+
* // visited: ['A', 'B', 'D', 'C'] (depth-first order)
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @param graph - Adjacency list representation
|
|
31
|
+
* @param start - Starting node
|
|
32
|
+
* @param options - Traversal options
|
|
33
|
+
* @returns Array of visited nodes in DFS order
|
|
34
|
+
*/
|
|
35
|
+
export declare function dfs<T>(graph: AdjacencyList<T>, start: T, options?: DFSOptions<T>): T[];
|
|
36
|
+
/**
|
|
37
|
+
* DFS to find a path between two nodes
|
|
38
|
+
*
|
|
39
|
+
* @param graph - Adjacency list
|
|
40
|
+
* @param start - Start node
|
|
41
|
+
* @param end - End node
|
|
42
|
+
* @returns Path from start to end, or empty array if no path exists
|
|
43
|
+
*/
|
|
44
|
+
export declare function dfsPath<T>(graph: AdjacencyList<T>, start: T, end: T): T[];
|
|
45
|
+
/**
|
|
46
|
+
* Detect if a graph has cycles using DFS
|
|
47
|
+
*
|
|
48
|
+
* @param graph - Adjacency list
|
|
49
|
+
* @returns true if graph has cycles
|
|
50
|
+
*/
|
|
51
|
+
export declare function hasCycle<T>(graph: AdjacencyList<T>): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Find all strongly connected components using Tarjan's algorithm
|
|
54
|
+
*
|
|
55
|
+
* A strongly connected component is a maximal set of vertices
|
|
56
|
+
* where every vertex is reachable from every other vertex.
|
|
57
|
+
*
|
|
58
|
+
* @param graph - Adjacency list
|
|
59
|
+
* @returns Array of strongly connected components
|
|
60
|
+
*/
|
|
61
|
+
export declare function stronglyConnectedComponents<T>(graph: AdjacencyList<T>): T[][];
|
|
62
|
+
//# sourceMappingURL=dfs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dfs.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/algorithms/graph/dfs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,GAAG,CAAC,CAAC,EACnB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,KAAK,EAAE,CAAC,EACR,OAAO,GAAE,UAAU,CAAC,CAAC,CAAM,GAC1B,CAAC,EAAE,CAiCL;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CA0BzE;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CA6B5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAiD7E"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph algorithm interfaces and types
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Generic graph representation (adjacency list)
|
|
6
|
+
*/
|
|
7
|
+
export type AdjacencyList<T = any> = Map<T, Set<T>>;
|
|
8
|
+
/**
|
|
9
|
+
* Weighted edge
|
|
10
|
+
*/
|
|
11
|
+
export interface WeightedEdge<T> {
|
|
12
|
+
from: T;
|
|
13
|
+
to: T;
|
|
14
|
+
weight: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* DFS traversal options
|
|
18
|
+
*/
|
|
19
|
+
export interface DFSOptions<T> {
|
|
20
|
+
/**
|
|
21
|
+
* Callback when visiting a node
|
|
22
|
+
*/
|
|
23
|
+
onVisit?: (node: T, depth: number) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Callback when backtracking from a node
|
|
26
|
+
*/
|
|
27
|
+
onBacktrack?: (node: T) => void;
|
|
28
|
+
/**
|
|
29
|
+
* Callback when detecting a back edge (cycle)
|
|
30
|
+
*/
|
|
31
|
+
onBackEdge?: (from: T, to: T) => void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* BFS traversal options
|
|
35
|
+
*/
|
|
36
|
+
export interface BFSOptions<T> {
|
|
37
|
+
/**
|
|
38
|
+
* Callback when visiting a node
|
|
39
|
+
*/
|
|
40
|
+
onVisit?: (node: T, level: number) => void;
|
|
41
|
+
/**
|
|
42
|
+
* Maximum depth to traverse
|
|
43
|
+
*/
|
|
44
|
+
maxDepth?: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Path result
|
|
48
|
+
*/
|
|
49
|
+
export interface PathResult<T> {
|
|
50
|
+
/**
|
|
51
|
+
* Nodes in the path
|
|
52
|
+
*/
|
|
53
|
+
path: T[];
|
|
54
|
+
/**
|
|
55
|
+
* Total cost/distance
|
|
56
|
+
*/
|
|
57
|
+
cost: number;
|
|
58
|
+
/**
|
|
59
|
+
* Whether a path was found
|
|
60
|
+
*/
|
|
61
|
+
found: boolean;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=graph.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.interface.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/algorithms/graph/graph.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC;IACR,EAAE,EAAE,CAAC,CAAC;IACN,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3C;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAEhC;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B;;OAEG;IACH,IAAI,EAAE,CAAC,EAAE,CAAC;IAEV;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph Algorithms
|
|
3
|
+
*
|
|
4
|
+
* Efficient algorithms for graph traversal, path finding, and analysis.
|
|
5
|
+
*/
|
|
6
|
+
export { dfs, dfsPath, hasCycle, stronglyConnectedComponents, } from './dfs';
|
|
7
|
+
export { bfs, bfsShortestPath, nodesAtDistance, connectedComponent, allConnectedComponents, } from './bfs';
|
|
8
|
+
export type { AdjacencyList, WeightedEdge, DFSOptions, BFSOptions, PathResult, } from './graph.interface';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/algorithms/graph/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,GAAG,EACH,OAAO,EACP,QAAQ,EACR,2BAA2B,GAC5B,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,GAAG,EACH,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,OAAO,CAAC;AAGf,YAAY,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,GACX,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Algorithms for ZenGrid
|
|
3
|
+
*/
|
|
4
|
+
export { binarySearch, binarySearchLeft, binarySearchRight, } from './search';
|
|
5
|
+
export type { BinarySearchOptions, BinarySearchResult, } from './search';
|
|
6
|
+
export { dfs, dfsPath, hasCycle, stronglyConnectedComponents, bfs, bfsShortestPath, nodesAtDistance, connectedComponent, allConnectedComponents, } from './graph';
|
|
7
|
+
export type { AdjacencyList, WeightedEdge, DFSOptions, BFSOptions, PathResult, } from './graph';
|
|
8
|
+
export { BloomFilter } from './filter';
|
|
9
|
+
export { detectSequence, generateSequence, autofill, } from './pattern';
|
|
10
|
+
export type { SequenceType, SequencePattern, } from './pattern';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/shared/src/algorithms/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,GAAG,EACH,OAAO,EACP,QAAQ,EACR,2BAA2B,EAC3B,GAAG,EACH,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,GACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Detection Algorithms
|
|
3
|
+
*
|
|
4
|
+
* Algorithms for detecting patterns in data sequences and autofill.
|
|
5
|
+
*/
|
|
6
|
+
export { detectSequence, generateSequence, autofill, } from './sequence-detector';
|
|
7
|
+
export type { SequenceType, SequencePattern, } from './sequence-detector';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/algorithms/pattern/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sequence Detection for Autofill
|
|
3
|
+
*
|
|
4
|
+
* Detects patterns in data sequences for intelligent autofill.
|
|
5
|
+
*
|
|
6
|
+
* **Supported Patterns:**
|
|
7
|
+
* - Arithmetic sequences: 1, 2, 3, 4, ...
|
|
8
|
+
* - Geometric sequences: 2, 4, 8, 16, ...
|
|
9
|
+
* - Date sequences: Jan 1, Jan 2, Jan 3, ...
|
|
10
|
+
* - Day sequences: Mon, Tue, Wed, ...
|
|
11
|
+
* - Text patterns: Item 1, Item 2, Item 3, ...
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Detect arithmetic sequence
|
|
16
|
+
* const pattern = detectSequence([1, 2, 3, 4]);
|
|
17
|
+
* // pattern: { type: 'arithmetic', step: 1 }
|
|
18
|
+
*
|
|
19
|
+
* // Generate next values
|
|
20
|
+
* const next = generateSequence(pattern, 5, 3);
|
|
21
|
+
* // next: [5, 6, 7]
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Sequence pattern types
|
|
26
|
+
*/
|
|
27
|
+
export type SequenceType = 'arithmetic' | 'geometric' | 'date' | 'text' | 'constant' | 'none';
|
|
28
|
+
/**
|
|
29
|
+
* Detected sequence pattern
|
|
30
|
+
*/
|
|
31
|
+
export interface SequencePattern {
|
|
32
|
+
type: SequenceType;
|
|
33
|
+
step?: number;
|
|
34
|
+
ratio?: number;
|
|
35
|
+
template?: string;
|
|
36
|
+
confidence: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Detect sequence pattern from an array of values
|
|
40
|
+
*
|
|
41
|
+
* @param values - Array of values (at least 2 required)
|
|
42
|
+
* @returns Detected pattern
|
|
43
|
+
*/
|
|
44
|
+
export declare function detectSequence(values: any[]): SequencePattern;
|
|
45
|
+
/**
|
|
46
|
+
* Generate next values in a sequence
|
|
47
|
+
*
|
|
48
|
+
* @param pattern - Detected sequence pattern
|
|
49
|
+
* @param startValue - Starting value
|
|
50
|
+
* @param count - Number of values to generate
|
|
51
|
+
* @returns Array of generated values
|
|
52
|
+
*/
|
|
53
|
+
export declare function generateSequence(pattern: SequencePattern, startValue: any, count: number): any[];
|
|
54
|
+
/**
|
|
55
|
+
* Autofill a range based on detected pattern
|
|
56
|
+
*
|
|
57
|
+
* @param source - Source values to detect pattern from
|
|
58
|
+
* @param targetLength - Desired length of result
|
|
59
|
+
* @returns Autofilled array
|
|
60
|
+
*/
|
|
61
|
+
export declare function autofill(source: any[], targetLength: number): any[];
|
|
62
|
+
//# sourceMappingURL=sequence-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequence-detector.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/algorithms/pattern/sequence-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,WAAW,GACX,MAAM,GACN,MAAM,GACN,UAAU,GACV,MAAM,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,CAkC7D;AAoGD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,CAsDhG;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,GAAG,EAAE,CAqBnE"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { Comparator } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Options for binary search
|
|
4
|
+
*/
|
|
5
|
+
export interface BinarySearchOptions<T> {
|
|
6
|
+
/**
|
|
7
|
+
* Custom comparator function
|
|
8
|
+
* @default (a, b) => a - b for numbers
|
|
9
|
+
*/
|
|
10
|
+
comparator?: Comparator<T>;
|
|
11
|
+
/**
|
|
12
|
+
* If true, returns insertion point when not found
|
|
13
|
+
* Insertion point is the index where the target should be inserted
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
returnInsertionPoint?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Result of binary search
|
|
20
|
+
*/
|
|
21
|
+
export interface BinarySearchResult {
|
|
22
|
+
/**
|
|
23
|
+
* Whether the target was found
|
|
24
|
+
*/
|
|
25
|
+
found: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Index where target was found, or -1 if not found
|
|
28
|
+
* If returnInsertionPoint is true and not found, returns insertion index
|
|
29
|
+
*/
|
|
30
|
+
index: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Performs binary search on a sorted array
|
|
34
|
+
*
|
|
35
|
+
* @param array - Sorted array to search
|
|
36
|
+
* @param target - Value to find
|
|
37
|
+
* @param options - Search options
|
|
38
|
+
* @returns Search result with found status and index
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const result = binarySearch([1, 3, 5, 7, 9], 5);
|
|
43
|
+
* // { found: true, index: 2 }
|
|
44
|
+
*
|
|
45
|
+
* const result2 = binarySearch([1, 3, 5, 7], 4, { returnInsertionPoint: true });
|
|
46
|
+
* // { found: false, index: 2 } - insert at index 2 to maintain order
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @complexity O(log n) where n = array.length
|
|
50
|
+
*/
|
|
51
|
+
export declare function binarySearch<T>(array: ReadonlyArray<T>, target: T, options?: BinarySearchOptions<T>): BinarySearchResult;
|
|
52
|
+
/**
|
|
53
|
+
* Find the leftmost (first) occurrence of target in sorted array
|
|
54
|
+
*
|
|
55
|
+
* @param array - Sorted array (may have duplicates)
|
|
56
|
+
* @param target - Value to find
|
|
57
|
+
* @param comparator - Custom comparator
|
|
58
|
+
* @returns Index of first occurrence, or -1 if not found
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const index = binarySearchLeft([1, 2, 2, 2, 3], 2);
|
|
63
|
+
* // 1 (first occurrence of 2)
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* @complexity O(log n)
|
|
67
|
+
*/
|
|
68
|
+
export declare function binarySearchLeft<T>(array: ReadonlyArray<T>, target: T, comparator?: Comparator<T>): number;
|
|
69
|
+
/**
|
|
70
|
+
* Find the rightmost (last) occurrence of target in sorted array
|
|
71
|
+
*
|
|
72
|
+
* @param array - Sorted array (may have duplicates)
|
|
73
|
+
* @param target - Value to find
|
|
74
|
+
* @param comparator - Custom comparator
|
|
75
|
+
* @returns Index of last occurrence, or -1 if not found
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const index = binarySearchRight([1, 2, 2, 2, 3], 2);
|
|
80
|
+
* // 3 (last occurrence of 2)
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @complexity O(log n)
|
|
84
|
+
*/
|
|
85
|
+
export declare function binarySearchRight<T>(array: ReadonlyArray<T>, target: T, comparator?: Comparator<T>): number;
|
|
86
|
+
//# sourceMappingURL=binary-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-search.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/algorithms/search/binary-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAE3B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAOD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,mBAAmB,CAAC,CAAC,CAAM,GACnC,kBAAkB,CA+BpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,MAAM,EAAE,CAAC,EACT,UAAU,GAAE,UAAU,CAAC,CAAC,CAAsC,GAC7D,MAAM,CAqBR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,MAAM,EAAE,CAAC,EACT,UAAU,GAAE,UAAU,CAAC,CAAC,CAAsC,GAC7D,MAAM,CAqBR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/shared/src/algorithms/search/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
|