@graphty/algorithms 1.2.0 → 1.3.1

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.
Files changed (230) hide show
  1. package/README.md +490 -336
  2. package/dist/algorithms.d.ts +42 -2
  3. package/dist/algorithms.js +11099 -2
  4. package/dist/algorithms.js.map +1 -1
  5. package/dist/src/algorithms/centrality/betweenness.d.ts +4 -0
  6. package/dist/src/algorithms/centrality/betweenness.d.ts.map +1 -1
  7. package/dist/src/algorithms/centrality/betweenness.js +124 -170
  8. package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
  9. package/dist/src/algorithms/centrality/closeness.d.ts +26 -1
  10. package/dist/src/algorithms/centrality/closeness.d.ts.map +1 -1
  11. package/dist/src/algorithms/centrality/closeness.js +56 -149
  12. package/dist/src/algorithms/centrality/closeness.js.map +1 -1
  13. package/dist/src/algorithms/centrality/degree.js +3 -3
  14. package/dist/src/algorithms/centrality/degree.js.map +1 -1
  15. package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts +39 -0
  16. package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts.map +1 -0
  17. package/dist/src/algorithms/centrality/delta-pagerank-simple.js +286 -0
  18. package/dist/src/algorithms/centrality/delta-pagerank-simple.js.map +1 -0
  19. package/dist/src/algorithms/centrality/delta-pagerank.d.ts +80 -0
  20. package/dist/src/algorithms/centrality/delta-pagerank.d.ts.map +1 -0
  21. package/dist/src/algorithms/centrality/delta-pagerank.js +294 -0
  22. package/dist/src/algorithms/centrality/delta-pagerank.js.map +1 -0
  23. package/dist/src/algorithms/centrality/index.d.ts +2 -0
  24. package/dist/src/algorithms/centrality/index.d.ts.map +1 -1
  25. package/dist/src/algorithms/centrality/index.js +1 -0
  26. package/dist/src/algorithms/centrality/index.js.map +1 -1
  27. package/dist/src/algorithms/centrality/pagerank.d.ts +17 -0
  28. package/dist/src/algorithms/centrality/pagerank.d.ts.map +1 -1
  29. package/dist/src/algorithms/centrality/pagerank.js +45 -0
  30. package/dist/src/algorithms/centrality/pagerank.js.map +1 -1
  31. package/dist/src/algorithms/community/girvan-newman.d.ts.map +1 -1
  32. package/dist/src/algorithms/community/girvan-newman.js +47 -54
  33. package/dist/src/algorithms/community/girvan-newman.js.map +1 -1
  34. package/dist/src/algorithms/community/index.d.ts +2 -0
  35. package/dist/src/algorithms/community/index.d.ts.map +1 -1
  36. package/dist/src/algorithms/community/index.js.map +1 -1
  37. package/dist/src/algorithms/community/label-propagation.d.ts +13 -3
  38. package/dist/src/algorithms/community/label-propagation.d.ts.map +1 -1
  39. package/dist/src/algorithms/community/label-propagation.js +50 -35
  40. package/dist/src/algorithms/community/label-propagation.js.map +1 -1
  41. package/dist/src/algorithms/community/leiden.d.ts +3 -2
  42. package/dist/src/algorithms/community/leiden.d.ts.map +1 -1
  43. package/dist/src/algorithms/community/leiden.js +34 -39
  44. package/dist/src/algorithms/community/leiden.js.map +1 -1
  45. package/dist/src/algorithms/community/louvain-optimized.d.ts +112 -0
  46. package/dist/src/algorithms/community/louvain-optimized.d.ts.map +1 -0
  47. package/dist/src/algorithms/community/louvain-optimized.js +303 -0
  48. package/dist/src/algorithms/community/louvain-optimized.js.map +1 -0
  49. package/dist/src/algorithms/community/louvain.d.ts.map +1 -1
  50. package/dist/src/algorithms/community/louvain.js +17 -76
  51. package/dist/src/algorithms/community/louvain.js.map +1 -1
  52. package/dist/src/algorithms/community/modularity-utils.d.ts +59 -0
  53. package/dist/src/algorithms/community/modularity-utils.d.ts.map +1 -0
  54. package/dist/src/algorithms/community/modularity-utils.js +112 -0
  55. package/dist/src/algorithms/community/modularity-utils.js.map +1 -0
  56. package/dist/src/algorithms/matching/bipartite.d.ts.map +1 -1
  57. package/dist/src/algorithms/matching/bipartite.js +8 -40
  58. package/dist/src/algorithms/matching/bipartite.js.map +1 -1
  59. package/dist/src/algorithms/shortest-path/bellman-ford.d.ts.map +1 -1
  60. package/dist/src/algorithms/shortest-path/bellman-ford.js +1 -12
  61. package/dist/src/algorithms/shortest-path/bellman-ford.js.map +1 -1
  62. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts +37 -0
  63. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts.map +1 -0
  64. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js +193 -0
  65. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js.map +1 -0
  66. package/dist/src/algorithms/shortest-path/dijkstra.d.ts +5 -2
  67. package/dist/src/algorithms/shortest-path/dijkstra.d.ts.map +1 -1
  68. package/dist/src/algorithms/shortest-path/dijkstra.js +15 -14
  69. package/dist/src/algorithms/shortest-path/dijkstra.js.map +1 -1
  70. package/dist/src/algorithms/traversal/bfs-unified.d.ts +29 -0
  71. package/dist/src/algorithms/traversal/bfs-unified.d.ts.map +1 -0
  72. package/dist/src/algorithms/traversal/bfs-unified.js +333 -0
  73. package/dist/src/algorithms/traversal/bfs-unified.js.map +1 -0
  74. package/dist/src/algorithms/traversal/bfs-variants.d.ts +54 -0
  75. package/dist/src/algorithms/traversal/bfs-variants.d.ts.map +1 -0
  76. package/dist/src/algorithms/traversal/bfs-variants.js +368 -0
  77. package/dist/src/algorithms/traversal/bfs-variants.js.map +1 -0
  78. package/dist/src/algorithms/traversal/bfs.d.ts +4 -18
  79. package/dist/src/algorithms/traversal/bfs.d.ts.map +1 -1
  80. package/dist/src/algorithms/traversal/bfs.js +5 -182
  81. package/dist/src/algorithms/traversal/bfs.js.map +1 -1
  82. package/dist/src/benchmark-all-algorithms.d.ts +23 -0
  83. package/dist/src/benchmark-all-algorithms.d.ts.map +1 -0
  84. package/dist/src/benchmark-all-algorithms.js +462 -0
  85. package/dist/src/benchmark-all-algorithms.js.map +1 -0
  86. package/dist/src/clustering/hierarchical.d.ts +16 -15
  87. package/dist/src/clustering/hierarchical.d.ts.map +1 -1
  88. package/dist/src/clustering/hierarchical.js +209 -223
  89. package/dist/src/clustering/hierarchical.js.map +1 -1
  90. package/dist/src/clustering/index.d.ts +4 -2
  91. package/dist/src/clustering/index.d.ts.map +1 -1
  92. package/dist/src/clustering/index.js +2 -2
  93. package/dist/src/clustering/index.js.map +1 -1
  94. package/dist/src/clustering/k-core.d.ts +16 -15
  95. package/dist/src/clustering/k-core.d.ts.map +1 -1
  96. package/dist/src/clustering/k-core.js +57 -21
  97. package/dist/src/clustering/k-core.js.map +1 -1
  98. package/dist/src/clustering/spectral.d.ts +8 -0
  99. package/dist/src/clustering/spectral.d.ts.map +1 -1
  100. package/dist/src/clustering/spectral.js +40 -21
  101. package/dist/src/clustering/spectral.js.map +1 -1
  102. package/dist/src/core/graph.js +4 -4
  103. package/dist/src/core/graph.js.map +1 -1
  104. package/dist/src/flow/ford-fulkerson.d.ts +17 -11
  105. package/dist/src/flow/ford-fulkerson.d.ts.map +1 -1
  106. package/dist/src/flow/ford-fulkerson.js +141 -217
  107. package/dist/src/flow/ford-fulkerson.js.map +1 -1
  108. package/dist/src/flow/min-cut.d.ts +6 -5
  109. package/dist/src/flow/min-cut.d.ts.map +1 -1
  110. package/dist/src/flow/min-cut.js +17 -8
  111. package/dist/src/flow/min-cut.js.map +1 -1
  112. package/dist/src/index.d.ts +1 -0
  113. package/dist/src/index.d.ts.map +1 -1
  114. package/dist/src/index.js +4 -0
  115. package/dist/src/index.js.map +1 -1
  116. package/dist/src/link-prediction/adamic-adar.d.ts.map +1 -1
  117. package/dist/src/link-prediction/adamic-adar.js +17 -26
  118. package/dist/src/link-prediction/adamic-adar.js.map +1 -1
  119. package/dist/src/link-prediction/common-neighbors.d.ts.map +1 -1
  120. package/dist/src/link-prediction/common-neighbors.js +7 -11
  121. package/dist/src/link-prediction/common-neighbors.js.map +1 -1
  122. package/dist/src/optimized/bit-packed.d.ts +143 -0
  123. package/dist/src/optimized/bit-packed.d.ts.map +1 -0
  124. package/dist/src/optimized/bit-packed.js +292 -0
  125. package/dist/src/optimized/bit-packed.js.map +1 -0
  126. package/dist/src/optimized/csr-graph.d.ts +86 -0
  127. package/dist/src/optimized/csr-graph.d.ts.map +1 -0
  128. package/dist/src/optimized/csr-graph.js +341 -0
  129. package/dist/src/optimized/csr-graph.js.map +1 -0
  130. package/dist/src/optimized/direction-optimized-bfs.d.ts +74 -0
  131. package/dist/src/optimized/direction-optimized-bfs.d.ts.map +1 -0
  132. package/dist/src/optimized/direction-optimized-bfs.js +223 -0
  133. package/dist/src/optimized/direction-optimized-bfs.js.map +1 -0
  134. package/dist/src/optimized/graph-adapter.d.ts +62 -0
  135. package/dist/src/optimized/graph-adapter.d.ts.map +1 -0
  136. package/dist/src/optimized/graph-adapter.js +146 -0
  137. package/dist/src/optimized/graph-adapter.js.map +1 -0
  138. package/dist/src/optimized/index.d.ts +14 -0
  139. package/dist/src/optimized/index.d.ts.map +1 -0
  140. package/dist/src/optimized/index.js +28 -0
  141. package/dist/src/optimized/index.js.map +1 -0
  142. package/dist/src/research/grsbm.d.ts.map +1 -1
  143. package/dist/src/research/grsbm.js +6 -14
  144. package/dist/src/research/grsbm.js.map +1 -1
  145. package/dist/src/research/sync.d.ts.map +1 -1
  146. package/dist/src/research/sync.js +3 -29
  147. package/dist/src/research/sync.js.map +1 -1
  148. package/dist/src/research/terahac.d.ts +2 -0
  149. package/dist/src/research/terahac.d.ts.map +1 -1
  150. package/dist/src/research/terahac.js +7 -3
  151. package/dist/src/research/terahac.js.map +1 -1
  152. package/dist/src/types/index.d.ts +8 -0
  153. package/dist/src/types/index.d.ts.map +1 -1
  154. package/dist/src/utils/algorithm-utilities.d.ts +2 -0
  155. package/dist/src/utils/algorithm-utilities.d.ts.map +1 -0
  156. package/dist/src/utils/algorithm-utilities.js +2 -0
  157. package/dist/src/utils/algorithm-utilities.js.map +1 -0
  158. package/dist/src/utils/graph-converters.d.ts +79 -0
  159. package/dist/src/utils/graph-converters.d.ts.map +1 -0
  160. package/dist/src/utils/graph-converters.js +196 -0
  161. package/dist/src/utils/graph-converters.js.map +1 -0
  162. package/dist/src/utils/graph-utilities.d.ts +62 -0
  163. package/dist/src/utils/graph-utilities.d.ts.map +1 -0
  164. package/dist/src/utils/graph-utilities.js +148 -0
  165. package/dist/src/utils/graph-utilities.js.map +1 -0
  166. package/dist/src/utils/index.d.ts +5 -0
  167. package/dist/src/utils/index.d.ts.map +1 -0
  168. package/dist/src/utils/index.js +5 -0
  169. package/dist/src/utils/index.js.map +1 -0
  170. package/dist/src/utils/math-utilities.d.ts +52 -0
  171. package/dist/src/utils/math-utilities.d.ts.map +1 -0
  172. package/dist/src/utils/math-utilities.js +123 -0
  173. package/dist/src/utils/math-utilities.js.map +1 -0
  174. package/dist/src/utils/matrix-utilities.d.ts +2 -0
  175. package/dist/src/utils/matrix-utilities.d.ts.map +1 -0
  176. package/dist/src/utils/matrix-utilities.js +2 -0
  177. package/dist/src/utils/matrix-utilities.js.map +1 -0
  178. package/dist/src/utils/optimization-helpers.d.ts +33 -0
  179. package/dist/src/utils/optimization-helpers.d.ts.map +1 -0
  180. package/dist/src/utils/optimization-helpers.js +47 -0
  181. package/dist/src/utils/optimization-helpers.js.map +1 -0
  182. package/package.json +18 -3
  183. package/src/algorithms/centrality/betweenness.ts +167 -199
  184. package/src/algorithms/centrality/closeness.ts +73 -191
  185. package/src/algorithms/centrality/degree.ts +3 -3
  186. package/src/algorithms/centrality/delta-pagerank-simple.ts +366 -0
  187. package/src/algorithms/centrality/delta-pagerank.ts +435 -0
  188. package/src/algorithms/centrality/index.ts +2 -0
  189. package/src/algorithms/centrality/pagerank.ts +66 -0
  190. package/src/algorithms/community/girvan-newman.ts +52 -59
  191. package/src/algorithms/community/index.ts +2 -0
  192. package/src/algorithms/community/label-propagation.ts +64 -35
  193. package/src/algorithms/community/leiden.ts +40 -41
  194. package/src/algorithms/community/louvain-optimized.ts +445 -0
  195. package/src/algorithms/community/louvain.ts +24 -104
  196. package/src/algorithms/community/modularity-utils.ts +146 -0
  197. package/src/algorithms/matching/bipartite.ts +8 -44
  198. package/src/algorithms/shortest-path/bellman-ford.ts +1 -14
  199. package/src/algorithms/shortest-path/bidirectional-dijkstra.ts +248 -0
  200. package/src/algorithms/shortest-path/dijkstra.ts +17 -15
  201. package/src/algorithms/traversal/bfs-unified.ts +433 -0
  202. package/src/algorithms/traversal/bfs-variants.ts +496 -0
  203. package/src/algorithms/traversal/bfs.ts +10 -228
  204. package/src/benchmark-all-algorithms.ts +548 -0
  205. package/src/clustering/hierarchical.ts +241 -251
  206. package/src/clustering/index.ts +4 -2
  207. package/src/clustering/k-core.ts +87 -39
  208. package/src/clustering/spectral.ts +44 -20
  209. package/src/core/graph.ts +4 -4
  210. package/src/flow/ford-fulkerson.ts +186 -254
  211. package/src/flow/min-cut.ts +21 -11
  212. package/src/index.ts +6 -0
  213. package/src/link-prediction/adamic-adar.ts +17 -30
  214. package/src/link-prediction/common-neighbors.ts +7 -16
  215. package/src/optimized/bit-packed.ts +340 -0
  216. package/src/optimized/csr-graph.ts +455 -0
  217. package/src/optimized/direction-optimized-bfs.ts +291 -0
  218. package/src/optimized/graph-adapter.ts +200 -0
  219. package/src/optimized/index.ts +36 -0
  220. package/src/research/grsbm.ts +7 -16
  221. package/src/research/sync.ts +3 -32
  222. package/src/research/terahac.ts +10 -2
  223. package/src/types/index.ts +8 -0
  224. package/src/utils/algorithm-utilities.ts +2 -0
  225. package/src/utils/graph-converters.ts +241 -0
  226. package/src/utils/graph-utilities.ts +199 -0
  227. package/src/utils/index.ts +4 -0
  228. package/src/utils/math-utilities.ts +140 -0
  229. package/src/utils/matrix-utilities.ts +2 -0
  230. package/src/utils/optimization-helpers.ts +81 -0
@@ -0,0 +1,292 @@
1
+ import { TypedFastBitSet } from "typedfastbitset";
2
+ /**
3
+ * Wrapper around TypedFastBitSet with graph-specific optimizations
4
+ *
5
+ * Provides efficient bit-packed set operations optimized for graph algorithms
6
+ * with 8x memory reduction compared to standard JavaScript Set for boolean values.
7
+ */
8
+ export class GraphBitSet {
9
+ constructor(capacity) {
10
+ this._cardinality = 0;
11
+ this.bitset = new TypedFastBitSet();
12
+ if (capacity) {
13
+ // Pre-allocate for known size
14
+ this.bitset.resize(capacity);
15
+ }
16
+ }
17
+ /**
18
+ * Add a single element
19
+ */
20
+ add(index) {
21
+ if (!this.bitset.has(index)) {
22
+ this.bitset.add(index);
23
+ this._cardinality++;
24
+ }
25
+ }
26
+ /**
27
+ * Remove a single element
28
+ */
29
+ remove(index) {
30
+ if (this.bitset.has(index)) {
31
+ this.bitset.remove(index);
32
+ this._cardinality--;
33
+ }
34
+ }
35
+ /**
36
+ * Check if element exists
37
+ */
38
+ has(index) {
39
+ return this.bitset.has(index);
40
+ }
41
+ /**
42
+ * Clear all elements
43
+ */
44
+ clear() {
45
+ this.bitset.clear();
46
+ this._cardinality = 0;
47
+ }
48
+ /**
49
+ * Check if empty
50
+ */
51
+ isEmpty() {
52
+ return this._cardinality === 0;
53
+ }
54
+ /**
55
+ * Optimized for graph algorithms - add range of indices
56
+ */
57
+ addRange(start, end) {
58
+ for (let i = start; i < end; i++) {
59
+ if (!this.bitset.has(i)) {
60
+ this.bitset.add(i);
61
+ this._cardinality++;
62
+ }
63
+ }
64
+ }
65
+ /**
66
+ * Fast cardinality tracking
67
+ */
68
+ size() {
69
+ return this._cardinality;
70
+ }
71
+ /**
72
+ * Batch operations for frontier management - swap contents
73
+ */
74
+ swap(other) {
75
+ [this.bitset, other.bitset] = [other.bitset, this.bitset];
76
+ [this._cardinality, other._cardinality] = [other._cardinality, this._cardinality];
77
+ }
78
+ /**
79
+ * Efficient iteration
80
+ */
81
+ *[Symbol.iterator]() {
82
+ // Use TypedFastBitSet's optimized iteration
83
+ yield* this.bitset;
84
+ }
85
+ /**
86
+ * Set operations with cardinality tracking
87
+ */
88
+ union(other) {
89
+ const result = this.bitset.union(other.bitset);
90
+ this.bitset = result;
91
+ const size = this.bitset.size();
92
+ this._cardinality = size;
93
+ }
94
+ intersection(other) {
95
+ const result = this.bitset.intersection(other.bitset);
96
+ this.bitset = result;
97
+ const size = this.bitset.size();
98
+ this._cardinality = size;
99
+ }
100
+ difference(other) {
101
+ const result = this.bitset.difference(other.bitset);
102
+ this.bitset = result;
103
+ const size = this.bitset.size();
104
+ this._cardinality = size;
105
+ }
106
+ /**
107
+ * Clone the bitset
108
+ */
109
+ clone() {
110
+ const cloned = new GraphBitSet();
111
+ cloned.bitset = this.bitset.clone();
112
+ cloned._cardinality = this._cardinality;
113
+ return cloned;
114
+ }
115
+ }
116
+ /**
117
+ * Specialized bit array for visited tracking
118
+ *
119
+ * More memory efficient than GraphBitSet for simple boolean arrays
120
+ * that don't need set operations.
121
+ */
122
+ export class VisitedBitArray {
123
+ constructor(size) {
124
+ this._size = size;
125
+ this.wordCount = Math.ceil(size / 32);
126
+ this.words = new Uint32Array(this.wordCount);
127
+ }
128
+ /**
129
+ * Set bit at index
130
+ */
131
+ set(index) {
132
+ if (index < 0 || index >= this._size) {
133
+ throw new Error(`Index ${String(index)} out of bounds [0, ${String(this._size)})`);
134
+ }
135
+ const wordIndex = index >>> 5; // divide by 32
136
+ const bitIndex = index & 31; // modulo 32
137
+ const word = this.words[wordIndex];
138
+ if (word !== undefined) {
139
+ this.words[wordIndex] = word | (1 << bitIndex);
140
+ }
141
+ }
142
+ /**
143
+ * Get bit at index
144
+ */
145
+ get(index) {
146
+ if (index < 0 || index >= this._size) {
147
+ return false;
148
+ }
149
+ const wordIndex = index >>> 5;
150
+ const bitIndex = index & 31;
151
+ const word = this.words[wordIndex];
152
+ return word !== undefined && (word & (1 << bitIndex)) !== 0;
153
+ }
154
+ /**
155
+ * Clear all bits
156
+ */
157
+ clear() {
158
+ this.words.fill(0);
159
+ }
160
+ /**
161
+ * Toggle bit at index
162
+ */
163
+ toggle(index) {
164
+ if (index < 0 || index >= this._size) {
165
+ throw new Error(`Index ${String(index)} out of bounds [0, ${String(this._size)})`);
166
+ }
167
+ const wordIndex = index >>> 5;
168
+ const bitIndex = index & 31;
169
+ const word = this.words[wordIndex];
170
+ if (word !== undefined) {
171
+ this.words[wordIndex] = word ^ (1 << bitIndex);
172
+ }
173
+ }
174
+ /**
175
+ * Population count for statistics
176
+ */
177
+ popcount() {
178
+ let count = 0;
179
+ for (let i = 0; i < this.wordCount; i++) {
180
+ const word = this.words[i];
181
+ if (word !== undefined) {
182
+ count += this.popcountWord(word);
183
+ }
184
+ }
185
+ return count;
186
+ }
187
+ /**
188
+ * Efficient population count for a single word
189
+ * Uses bit manipulation tricks for fast counting
190
+ */
191
+ popcountWord(n) {
192
+ let x = n;
193
+ x = x - ((x >>> 1) & 0x55555555);
194
+ x = (x & 0x33333333) + ((x >>> 2) & 0x33333333);
195
+ return (((x + (x >>> 4)) & 0xF0F0F0F) * 0x1010101) >>> 24;
196
+ }
197
+ /**
198
+ * Get size of the bit array
199
+ */
200
+ size() {
201
+ return this._size;
202
+ }
203
+ /**
204
+ * Check if all bits are zero
205
+ */
206
+ isEmpty() {
207
+ for (let i = 0; i < this.wordCount; i++) {
208
+ if (this.words[i] !== 0) {
209
+ return false;
210
+ }
211
+ }
212
+ return true;
213
+ }
214
+ /**
215
+ * Set multiple bits from array
216
+ */
217
+ setMultiple(indices) {
218
+ for (const index of indices) {
219
+ this.set(index);
220
+ }
221
+ }
222
+ /**
223
+ * Get indices of all set bits
224
+ */
225
+ getSetIndices() {
226
+ const indices = [];
227
+ for (let wordIndex = 0; wordIndex < this.wordCount; wordIndex++) {
228
+ const word = this.words[wordIndex];
229
+ if (!word || word === 0) {
230
+ continue;
231
+ }
232
+ for (let bitIndex = 0; bitIndex < 32; bitIndex++) {
233
+ if (word & (1 << bitIndex)) {
234
+ const index = (wordIndex << 5) + bitIndex;
235
+ if (index < this._size) {
236
+ indices.push(index);
237
+ }
238
+ }
239
+ }
240
+ }
241
+ return indices;
242
+ }
243
+ }
244
+ /**
245
+ * Bit-packed distance array for BFS
246
+ *
247
+ * Optimized for storing distances using 16-bit integers (up to 65,535 levels)
248
+ * Still provides 2x memory savings compared to standard 32-bit numbers
249
+ */
250
+ export class CompactDistanceArray {
251
+ constructor(size) {
252
+ this._size = size;
253
+ this.data = new Uint16Array(size);
254
+ this.data.fill(CompactDistanceArray.INFINITY); // Initialize with max value (unvisited)
255
+ }
256
+ /**
257
+ * Set distance at index
258
+ */
259
+ set(index, distance) {
260
+ if (distance >= CompactDistanceArray.INFINITY) {
261
+ throw new Error(`Distance exceeds maximum value (${String(CompactDistanceArray.INFINITY - 1)})`);
262
+ }
263
+ this.data[index] = distance;
264
+ }
265
+ /**
266
+ * Get distance at index
267
+ */
268
+ get(index) {
269
+ const value = this.data[index];
270
+ return value ?? CompactDistanceArray.INFINITY; // Default to unvisited
271
+ }
272
+ /**
273
+ * Check if node has been visited
274
+ */
275
+ isVisited(index) {
276
+ return this.data[index] !== CompactDistanceArray.INFINITY;
277
+ }
278
+ /**
279
+ * Reset all distances
280
+ */
281
+ clear() {
282
+ this.data.fill(CompactDistanceArray.INFINITY);
283
+ }
284
+ /**
285
+ * Get size
286
+ */
287
+ size() {
288
+ return this._size;
289
+ }
290
+ }
291
+ CompactDistanceArray.INFINITY = 65535;
292
+ //# sourceMappingURL=bit-packed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bit-packed.js","sourceRoot":"","sources":["../../../src/optimized/bit-packed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { NodeId } from "../types/index.js";
2
+ /**
3
+ * Interface for read-only graph operations
4
+ */
5
+ export interface ReadonlyGraph<TNodeId = NodeId> {
6
+ nodeCount(): number;
7
+ edgeCount(): number;
8
+ hasNode(nodeId: TNodeId): boolean;
9
+ hasEdge(source: TNodeId, target: TNodeId): boolean;
10
+ neighbors(nodeId: TNodeId): IterableIterator<TNodeId>;
11
+ outDegree(nodeId: TNodeId): number;
12
+ nodes(): IterableIterator<TNodeId>;
13
+ }
14
+ /**
15
+ * Compressed Sparse Row (CSR) graph representation
16
+ *
17
+ * Provides cache-efficient graph storage with sequential memory access patterns.
18
+ * Optimized for traversal operations and sparse graphs.
19
+ */
20
+ export declare class CSRGraph<TNodeId = NodeId> implements ReadonlyGraph<TNodeId> {
21
+ private data;
22
+ constructor(adjacencyList: Map<TNodeId, TNodeId[]>, weights?: Map<string, number>, buildReverse?: boolean);
23
+ /**
24
+ * Build CSR structure from adjacency list
25
+ */
26
+ private buildCSR;
27
+ nodeCount(): number;
28
+ edgeCount(): number;
29
+ hasNode(nodeId: TNodeId): boolean;
30
+ hasEdge(source: TNodeId, target: TNodeId): boolean;
31
+ /**
32
+ * Get neighbors as node IDs
33
+ */
34
+ neighbors(nodeId: TNodeId): IterableIterator<TNodeId>;
35
+ /**
36
+ * Get all nodes
37
+ */
38
+ nodes(): IterableIterator<TNodeId>;
39
+ /**
40
+ * Get neighbors as indices (internal use)
41
+ */
42
+ getNeighborIndices(nodeIndex: number): number[];
43
+ outDegree(nodeId: TNodeId): number;
44
+ /**
45
+ * Get out-degree by index (internal use)
46
+ */
47
+ outDegreeByIndex(nodeIndex: number): number;
48
+ /**
49
+ * Iterator support for neighbor indices
50
+ */
51
+ iterateNeighborIndices(nodeIndex: number): Generator<number>;
52
+ /**
53
+ * Iterator support for incoming neighbor indices (for bottom-up BFS)
54
+ */
55
+ iterateIncomingNeighborIndices(nodeIndex: number): Generator<number>;
56
+ /**
57
+ * Convert node ID to index
58
+ */
59
+ nodeToIndex(nodeId: TNodeId): number;
60
+ /**
61
+ * Convert index to node ID
62
+ */
63
+ indexToNodeId(index: number): TNodeId;
64
+ /**
65
+ * Get edge weight
66
+ */
67
+ getEdgeWeight(source: TNodeId, target: TNodeId): number | undefined;
68
+ /**
69
+ * Binary search for target in sorted array
70
+ */
71
+ private binarySearch;
72
+ /**
73
+ * Create CSR graph from standard Graph
74
+ */
75
+ static fromGraph<TNodeId = NodeId>(graph: {
76
+ nodes(): IterableIterator<{
77
+ id: TNodeId;
78
+ }>;
79
+ neighbors(nodeId: TNodeId): IterableIterator<TNodeId>;
80
+ hasNode(nodeId: TNodeId): boolean;
81
+ getEdge?(source: TNodeId, target: TNodeId): {
82
+ weight?: number;
83
+ } | undefined;
84
+ }): CSRGraph<TNodeId>;
85
+ }
86
+ //# sourceMappingURL=csr-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csr-graph.d.ts","sourceRoot":"","sources":["../../../src/optimized/csr-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO,GAAG,MAAM;IAC3C,SAAS,IAAI,MAAM,CAAC;IACpB,SAAS,IAAI,MAAM,CAAC;IACpB,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAClC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IACnD,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtD,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACnC,KAAK,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;CACtC;AAwBD;;;;;GAKG;AACH,qBAAa,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAE,YAAW,aAAa,CAAC,OAAO,CAAC;IACrE,OAAO,CAAC,IAAI,CAAwB;gBAExB,aAAa,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,UAAO;IAItG;;KAEC;IACD,OAAO,CAAC,QAAQ;IA8IhB,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,MAAM;IAInB,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;IAIjC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAmBlD;;KAEC;IACD,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;IA2BrD;;KAEC;IACD,KAAK,IAAI,gBAAgB,CAAC,OAAO,CAAC;IAIlC;;KAEC;IACD,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAc/C,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM;IASlC;;KAEC;IACD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAU3C;;KAEC;IACA,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAc7D;;KAEC;IACA,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAkBrE;;KAEC;IACD,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM;IASpC;;KAEC;IACD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IASrC;;KAEC;IACD,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IA2BnE;;KAEC;IACD,OAAO,CAAC,YAAY;IA0BpB;;KAEC;IACD,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE;QACtC,KAAK,IAAI,gBAAgB,CAAC;YAAC,EAAE,EAAE,OAAO,CAAA;SAAC,CAAC,CAAC;QACzC,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;QAClC,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAC,GAAG,SAAS,CAAC;KAC7E,GAAG,QAAQ,CAAC,OAAO,CAAC;CAuBxB"}