data-structure-typed 2.4.5 → 2.5.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.
- package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +12984 -0
- package/.vitepress/cache/deps_temp_51f5f1b0/package.json +3 -0
- package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +4505 -0
- package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +9731 -0
- package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +347 -0
- package/CHANGELOG.md +3 -1
- package/README.md +78 -31
- package/dist/cjs/binary-tree.cjs +23698 -0
- package/dist/cjs/graph.cjs +5236 -0
- package/dist/cjs/hash.cjs +1262 -0
- package/dist/cjs/heap.cjs +1540 -0
- package/dist/cjs/index.cjs +24509 -2899
- package/dist/cjs/linked-list.cjs +4370 -0
- package/dist/cjs/matrix.cjs +1042 -0
- package/dist/cjs/priority-queue.cjs +1314 -0
- package/dist/cjs/queue.cjs +4090 -0
- package/dist/cjs/stack.cjs +861 -0
- package/dist/cjs/trie.cjs +1173 -0
- package/dist/cjs-legacy/binary-tree.cjs +23730 -0
- package/dist/cjs-legacy/graph.cjs +5234 -0
- package/dist/cjs-legacy/hash.cjs +1262 -0
- package/dist/cjs-legacy/heap.cjs +1537 -0
- package/dist/cjs-legacy/index.cjs +32555 -10936
- package/dist/cjs-legacy/linked-list.cjs +4376 -0
- package/dist/cjs-legacy/matrix.cjs +1045 -0
- package/dist/cjs-legacy/priority-queue.cjs +1312 -0
- package/dist/cjs-legacy/queue.cjs +4088 -0
- package/dist/cjs-legacy/stack.cjs +861 -0
- package/dist/cjs-legacy/trie.cjs +1172 -0
- package/dist/esm/binary-tree.mjs +23683 -0
- package/dist/esm/graph.mjs +5223 -0
- package/dist/esm/hash.mjs +1259 -0
- package/dist/esm/heap.mjs +1534 -0
- package/dist/esm/index.mjs +24507 -2898
- package/dist/esm/linked-list.mjs +4363 -0
- package/dist/esm/matrix.mjs +1038 -0
- package/dist/esm/priority-queue.mjs +1310 -0
- package/dist/esm/queue.mjs +4086 -0
- package/dist/esm/stack.mjs +859 -0
- package/dist/esm/trie.mjs +1170 -0
- package/dist/esm-legacy/binary-tree.mjs +23715 -0
- package/dist/esm-legacy/graph.mjs +5221 -0
- package/dist/esm-legacy/hash.mjs +1259 -0
- package/dist/esm-legacy/heap.mjs +1531 -0
- package/dist/esm-legacy/index.mjs +32553 -10935
- package/dist/esm-legacy/linked-list.mjs +4369 -0
- package/dist/esm-legacy/matrix.mjs +1041 -0
- package/dist/esm-legacy/priority-queue.mjs +1308 -0
- package/dist/esm-legacy/queue.mjs +4084 -0
- package/dist/esm-legacy/stack.mjs +859 -0
- package/dist/esm-legacy/trie.mjs +1169 -0
- package/dist/types/data-structures/base/index.d.ts +1 -0
- package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
- package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
- package/dist/types/data-structures/base/linear-base.d.ts +3 -3
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +368 -51
- package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +473 -147
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +931 -80
- package/dist/types/data-structures/binary-tree/bst.d.ts +792 -29
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +592 -32
- package/dist/types/data-structures/binary-tree/segment-tree.d.ts +320 -135
- package/dist/types/data-structures/binary-tree/tree-map.d.ts +3662 -6
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3487 -201
- package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2778 -65
- package/dist/types/data-structures/binary-tree/tree-set.d.ts +3414 -6
- package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
- package/dist/types/data-structures/graph/directed-graph.d.ts +419 -47
- package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
- package/dist/types/data-structures/graph/undirected-graph.d.ts +384 -59
- package/dist/types/data-structures/hash/hash-map.d.ts +462 -89
- package/dist/types/data-structures/heap/heap.d.ts +567 -99
- package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
- package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +631 -49
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +581 -68
- package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +775 -12
- package/dist/types/data-structures/matrix/matrix.d.ts +491 -0
- package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
- package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
- package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
- package/dist/types/data-structures/queue/deque.d.ts +578 -71
- package/dist/types/data-structures/queue/queue.d.ts +451 -42
- package/dist/types/data-structures/stack/stack.d.ts +374 -32
- package/dist/types/data-structures/trie/trie.d.ts +458 -48
- package/dist/types/interfaces/graph.d.ts +1 -1
- package/dist/types/types/common.d.ts +2 -2
- package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
- package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
- package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
- package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
- package/dist/types/types/utils/validate-type.d.ts +4 -4
- package/dist/umd/data-structure-typed.js +32432 -10808
- package/dist/umd/data-structure-typed.min.js +10 -4
- package/docs-site-docusaurus/README.md +41 -0
- package/docs-site-docusaurus/docs/api/README.md +52 -0
- package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6130 -0
- package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
- package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
- package/docs-site-docusaurus/docs/api/classes/BST.md +5831 -0
- package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
- package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
- package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
- package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
- package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
- package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
- package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
- package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
- package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
- package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
- package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
- package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
- package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
- package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
- package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
- package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
- package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
- package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
- package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
- package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
- package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
- package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
- package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
- package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
- package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6374 -0
- package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
- package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
- package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
- package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1257 -0
- package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1475 -0
- package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1117 -0
- package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
- package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
- package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
- package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
- package/docs-site-docusaurus/docs/guide/architecture.md +613 -0
- package/docs-site-docusaurus/docs/guide/concepts.md +420 -0
- package/docs-site-docusaurus/docs/guide/guides.md +611 -0
- package/docs-site-docusaurus/docs/guide/installation.md +60 -0
- package/docs-site-docusaurus/docs/guide/integrations.md +823 -0
- package/docs-site-docusaurus/docs/guide/overview.md +638 -0
- package/docs-site-docusaurus/docs/guide/performance.md +833 -0
- package/docs-site-docusaurus/docs/guide/quick-start.md +73 -0
- package/docs-site-docusaurus/docusaurus.config.ts +159 -0
- package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
- package/docs-site-docusaurus/package-lock.json +18667 -0
- package/docs-site-docusaurus/package.json +50 -0
- package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
- package/docs-site-docusaurus/sidebars.ts +23 -0
- package/docs-site-docusaurus/sort-protected.mjs +87 -0
- package/docs-site-docusaurus/src/css/custom.css +96 -0
- package/docs-site-docusaurus/src/pages/index.module.css +13 -0
- package/docs-site-docusaurus/src/pages/index.tsx +71 -0
- package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
- package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
- package/docs-site-docusaurus/static/.nojekyll +0 -0
- package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
- package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
- package/docs-site-docusaurus/static/img/favicon.ico +0 -0
- package/docs-site-docusaurus/static/img/favicon.png +0 -0
- package/docs-site-docusaurus/static/img/logo-180.png +0 -0
- package/docs-site-docusaurus/static/img/logo.jpg +0 -0
- package/docs-site-docusaurus/static/img/logo.png +0 -0
- package/docs-site-docusaurus/static/img/logo.svg +1 -0
- package/docs-site-docusaurus/static/img/og-image.png +0 -0
- package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
- package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
- package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
- package/docs-site-docusaurus/static/robots.txt +4 -0
- package/docs-site-docusaurus/typedoc.json +23 -0
- package/package.json +109 -12
- package/src/data-structures/base/index.ts +1 -0
- package/src/data-structures/base/iterable-element-base.ts +4 -5
- package/src/data-structures/base/iterable-entry-base.ts +8 -8
- package/src/data-structures/base/linear-base.ts +3 -3
- package/src/data-structures/binary-tree/avl-tree.ts +386 -51
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +596 -247
- package/src/data-structures/binary-tree/binary-tree.ts +956 -81
- package/src/data-structures/binary-tree/bst.ts +840 -35
- package/src/data-structures/binary-tree/red-black-tree.ts +689 -97
- package/src/data-structures/binary-tree/segment-tree.ts +498 -249
- package/src/data-structures/binary-tree/tree-map.ts +3784 -7
- package/src/data-structures/binary-tree/tree-multi-map.ts +3614 -211
- package/src/data-structures/binary-tree/tree-multi-set.ts +2874 -65
- package/src/data-structures/binary-tree/tree-set.ts +3531 -10
- package/src/data-structures/graph/abstract-graph.ts +4 -4
- package/src/data-structures/graph/directed-graph.ts +429 -47
- package/src/data-structures/graph/map-graph.ts +59 -1
- package/src/data-structures/graph/undirected-graph.ts +393 -59
- package/src/data-structures/hash/hash-map.ts +476 -92
- package/src/data-structures/heap/heap.ts +581 -99
- package/src/data-structures/heap/max-heap.ts +46 -0
- package/src/data-structures/heap/min-heap.ts +59 -0
- package/src/data-structures/linked-list/doubly-linked-list.ts +646 -47
- package/src/data-structures/linked-list/singly-linked-list.ts +596 -68
- package/src/data-structures/linked-list/skip-linked-list.ts +1067 -90
- package/src/data-structures/matrix/matrix.ts +584 -12
- package/src/data-structures/priority-queue/max-priority-queue.ts +57 -0
- package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
- package/src/data-structures/priority-queue/priority-queue.ts +60 -0
- package/src/data-structures/queue/deque.ts +592 -70
- package/src/data-structures/queue/queue.ts +463 -42
- package/src/data-structures/stack/stack.ts +384 -32
- package/src/data-structures/trie/trie.ts +470 -48
- package/src/interfaces/graph.ts +1 -1
- package/src/types/common.ts +2 -2
- package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
- package/src/types/data-structures/heap/heap.ts +1 -0
- package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
- package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
- package/src/types/utils/validate-type.ts +4 -4
- package/vercel.json +6 -0
- package/dist/leetcode/avl-tree-counter.mjs +0 -2957
- package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
- package/dist/leetcode/avl-tree.mjs +0 -2720
- package/dist/leetcode/binary-tree.mjs +0 -1594
- package/dist/leetcode/bst.mjs +0 -2398
- package/dist/leetcode/deque.mjs +0 -683
- package/dist/leetcode/directed-graph.mjs +0 -1733
- package/dist/leetcode/doubly-linked-list.mjs +0 -709
- package/dist/leetcode/hash-map.mjs +0 -493
- package/dist/leetcode/heap.mjs +0 -542
- package/dist/leetcode/max-heap.mjs +0 -375
- package/dist/leetcode/max-priority-queue.mjs +0 -383
- package/dist/leetcode/min-heap.mjs +0 -363
- package/dist/leetcode/min-priority-queue.mjs +0 -371
- package/dist/leetcode/priority-queue.mjs +0 -363
- package/dist/leetcode/queue.mjs +0 -943
- package/dist/leetcode/red-black-tree.mjs +0 -2765
- package/dist/leetcode/singly-linked-list.mjs +0 -754
- package/dist/leetcode/stack.mjs +0 -217
- package/dist/leetcode/tree-counter.mjs +0 -3039
- package/dist/leetcode/tree-multi-map.mjs +0 -2913
- package/dist/leetcode/trie.mjs +0 -413
- package/dist/leetcode/undirected-graph.mjs +0 -1650
|
@@ -66,65 +66,6 @@ export declare class UndirectedEdge<E = number> extends AbstractEdge<E> {
|
|
|
66
66
|
* console.log(neighborsA[0].key); // 'B';
|
|
67
67
|
* console.log(neighborsA[1].key); // 'C';
|
|
68
68
|
* @example
|
|
69
|
-
* // UndirectedGraph deleteEdge and vertex operations
|
|
70
|
-
* const graph = new UndirectedGraph<string>();
|
|
71
|
-
*
|
|
72
|
-
* // Build a simple undirected graph
|
|
73
|
-
* graph.addVertex('X');
|
|
74
|
-
* graph.addVertex('Y');
|
|
75
|
-
* graph.addVertex('Z');
|
|
76
|
-
* graph.addEdge('X', 'Y', 1);
|
|
77
|
-
* graph.addEdge('Y', 'Z', 2);
|
|
78
|
-
* graph.addEdge('X', 'Z', 3);
|
|
79
|
-
*
|
|
80
|
-
* // Delete an edge
|
|
81
|
-
* graph.deleteEdge('X', 'Y');
|
|
82
|
-
* console.log(graph.hasEdge('X', 'Y')); // false;
|
|
83
|
-
*
|
|
84
|
-
* // Bidirectional deletion confirmed
|
|
85
|
-
* console.log(graph.hasEdge('Y', 'X')); // false;
|
|
86
|
-
*
|
|
87
|
-
* // Other edges should remain
|
|
88
|
-
* console.log(graph.hasEdge('Y', 'Z')); // true;
|
|
89
|
-
* console.log(graph.hasEdge('Z', 'Y')); // true;
|
|
90
|
-
*
|
|
91
|
-
* // Delete a vertex
|
|
92
|
-
* graph.deleteVertex('Y');
|
|
93
|
-
* console.log(graph.hasVertex('Y')); // false;
|
|
94
|
-
* console.log(graph.size); // 2;
|
|
95
|
-
* @example
|
|
96
|
-
* // UndirectedGraph connectivity and neighbors
|
|
97
|
-
* const graph = new UndirectedGraph<string>();
|
|
98
|
-
*
|
|
99
|
-
* // Build a friendship network
|
|
100
|
-
* const people = ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'];
|
|
101
|
-
* for (const person of people) {
|
|
102
|
-
* graph.addVertex(person);
|
|
103
|
-
* }
|
|
104
|
-
*
|
|
105
|
-
* // Add friendships (undirected edges)
|
|
106
|
-
* graph.addEdge('Alice', 'Bob', 1);
|
|
107
|
-
* graph.addEdge('Alice', 'Charlie', 1);
|
|
108
|
-
* graph.addEdge('Bob', 'Diana', 1);
|
|
109
|
-
* graph.addEdge('Charlie', 'Eve', 1);
|
|
110
|
-
* graph.addEdge('Diana', 'Eve', 1);
|
|
111
|
-
*
|
|
112
|
-
* // Get friends of each person
|
|
113
|
-
* const aliceFriends = graph.getNeighbors('Alice');
|
|
114
|
-
* console.log(aliceFriends[0].key); // 'Bob';
|
|
115
|
-
* console.log(aliceFriends[1].key); // 'Charlie';
|
|
116
|
-
* console.log(aliceFriends.length); // 2;
|
|
117
|
-
*
|
|
118
|
-
* const dianaFriends = graph.getNeighbors('Diana');
|
|
119
|
-
* console.log(dianaFriends[0].key); // 'Bob';
|
|
120
|
-
* console.log(dianaFriends[1].key); // 'Eve';
|
|
121
|
-
* console.log(dianaFriends.length); // 2;
|
|
122
|
-
*
|
|
123
|
-
* // Verify bidirectional friendship
|
|
124
|
-
* const bobFriends = graph.getNeighbors('Bob');
|
|
125
|
-
* console.log(bobFriends[0].key); // 'Alice'; // Alice -> Bob -> Alice ✓
|
|
126
|
-
* console.log(bobFriends[1].key); // 'Diana';
|
|
127
|
-
* @example
|
|
128
69
|
* // UndirectedGraph for social network connectivity analysis
|
|
129
70
|
* interface Person {
|
|
130
71
|
* id: number;
|
|
@@ -233,6 +174,41 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
233
174
|
* @param v2 - The other vertex or key.
|
|
234
175
|
* @returns Edge instance or `undefined`.
|
|
235
176
|
* @remarks Time O(1) avg, Space O(1)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
* @example
|
|
206
|
+
* // Get edge between vertices
|
|
207
|
+
* const g = new UndirectedGraph();
|
|
208
|
+
* g.addVertex('A');
|
|
209
|
+
* g.addVertex('B');
|
|
210
|
+
* g.addEdge('A', 'B', 7);
|
|
211
|
+
* console.log(g.getEdge('A', 'B')?.weight); // 7;
|
|
236
212
|
*/
|
|
237
213
|
getEdge(v1: VO | VertexKey | undefined, v2: VO | VertexKey | undefined): EO | undefined;
|
|
238
214
|
/**
|
|
@@ -249,6 +225,64 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
249
225
|
* @param otherSideVertexKey - Required second endpoint when deleting by pair.
|
|
250
226
|
* @returns Removed edge or `undefined`.
|
|
251
227
|
* @remarks Time O(1) avg, Space O(1)
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
* @example
|
|
260
|
+
* // UndirectedGraph deleteEdge and vertex operations
|
|
261
|
+
* const graph = new UndirectedGraph<string>();
|
|
262
|
+
*
|
|
263
|
+
* // Build a simple undirected graph
|
|
264
|
+
* graph.addVertex('X');
|
|
265
|
+
* graph.addVertex('Y');
|
|
266
|
+
* graph.addVertex('Z');
|
|
267
|
+
* graph.addEdge('X', 'Y', 1);
|
|
268
|
+
* graph.addEdge('Y', 'Z', 2);
|
|
269
|
+
* graph.addEdge('X', 'Z', 3);
|
|
270
|
+
*
|
|
271
|
+
* // Delete an edge
|
|
272
|
+
* graph.deleteEdge('X', 'Y');
|
|
273
|
+
* console.log(graph.hasEdge('X', 'Y')); // false;
|
|
274
|
+
*
|
|
275
|
+
* // Bidirectional deletion confirmed
|
|
276
|
+
* console.log(graph.hasEdge('Y', 'X')); // false;
|
|
277
|
+
*
|
|
278
|
+
* // Other edges should remain
|
|
279
|
+
* console.log(graph.hasEdge('Y', 'Z')); // true;
|
|
280
|
+
* console.log(graph.hasEdge('Z', 'Y')); // true;
|
|
281
|
+
*
|
|
282
|
+
* // Delete a vertex
|
|
283
|
+
* graph.deleteVertex('Y');
|
|
284
|
+
* console.log(graph.hasVertex('Y')); // false;
|
|
285
|
+
* console.log(graph.size); // 2;
|
|
252
286
|
*/
|
|
253
287
|
deleteEdge(edgeOrOneSideVertexKey: EO | VertexKey, otherSideVertexKey?: VertexKey): EO | undefined;
|
|
254
288
|
/**
|
|
@@ -256,6 +290,42 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
256
290
|
* @param vertexOrKey - Vertex or key.
|
|
257
291
|
* @returns `true` if removed; otherwise `false`.
|
|
258
292
|
* @remarks Time O(deg), Space O(1)
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
* @example
|
|
322
|
+
* // Remove vertex and edges
|
|
323
|
+
* const g = new UndirectedGraph();
|
|
324
|
+
* g.addVertex('A');
|
|
325
|
+
* g.addVertex('B');
|
|
326
|
+
* g.addEdge('A', 'B');
|
|
327
|
+
* g.deleteVertex('A');
|
|
328
|
+
* console.log(g.hasVertex('A')); // false;
|
|
259
329
|
*/
|
|
260
330
|
deleteVertex(vertexOrKey: VO | VertexKey): boolean;
|
|
261
331
|
/**
|
|
@@ -276,8 +346,109 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
276
346
|
* Unique set of undirected edges across endpoints.
|
|
277
347
|
* @returns Array of edges.
|
|
278
348
|
* @remarks Time O(E), Space O(E)
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
* @example
|
|
378
|
+
* // Get all edges
|
|
379
|
+
* const g = new UndirectedGraph();
|
|
380
|
+
* g.addVertex('A');
|
|
381
|
+
* g.addVertex('B');
|
|
382
|
+
* g.addEdge('A', 'B');
|
|
383
|
+
* console.log(g.edgeSet().length); // 1;
|
|
279
384
|
*/
|
|
280
385
|
edgeSet(): EO[];
|
|
386
|
+
/**
|
|
387
|
+
* UndirectedGraph connectivity and neighbors
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
* @example
|
|
420
|
+
* // UndirectedGraph connectivity and neighbors
|
|
421
|
+
* const graph = new UndirectedGraph<string>();
|
|
422
|
+
*
|
|
423
|
+
* // Build a friendship network
|
|
424
|
+
* const people = ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'];
|
|
425
|
+
* for (const person of people) {
|
|
426
|
+
* graph.addVertex(person);
|
|
427
|
+
* }
|
|
428
|
+
*
|
|
429
|
+
* // Add friendships (undirected edges)
|
|
430
|
+
* graph.addEdge('Alice', 'Bob', 1);
|
|
431
|
+
* graph.addEdge('Alice', 'Charlie', 1);
|
|
432
|
+
* graph.addEdge('Bob', 'Diana', 1);
|
|
433
|
+
* graph.addEdge('Charlie', 'Eve', 1);
|
|
434
|
+
* graph.addEdge('Diana', 'Eve', 1);
|
|
435
|
+
*
|
|
436
|
+
* // Get friends of each person
|
|
437
|
+
* const aliceFriends = graph.getNeighbors('Alice');
|
|
438
|
+
* console.log(aliceFriends[0].key); // 'Bob';
|
|
439
|
+
* console.log(aliceFriends[1].key); // 'Charlie';
|
|
440
|
+
* console.log(aliceFriends.length); // 2;
|
|
441
|
+
*
|
|
442
|
+
* const dianaFriends = graph.getNeighbors('Diana');
|
|
443
|
+
* console.log(dianaFriends[0].key); // 'Bob';
|
|
444
|
+
* console.log(dianaFriends[1].key); // 'Eve';
|
|
445
|
+
* console.log(dianaFriends.length); // 2;
|
|
446
|
+
*
|
|
447
|
+
* // Verify bidirectional friendship
|
|
448
|
+
* const bobFriends = graph.getNeighbors('Bob');
|
|
449
|
+
* console.log(bobFriends[0].key); // 'Alice'; // Alice -> Bob -> Alice ✓
|
|
450
|
+
* console.log(bobFriends[1].key); // 'Diana';
|
|
451
|
+
*/
|
|
281
452
|
getNeighbors(vertexOrKey: VO | VertexKey): VO[];
|
|
282
453
|
/**
|
|
283
454
|
* Resolve an edge's two endpoints to vertex instances.
|
|
@@ -306,6 +477,44 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
306
477
|
* Tarjan-based bridge and articulation point detection.
|
|
307
478
|
* @returns `{ dfnMap, lowMap, bridges, cutVertices }`.
|
|
308
479
|
* @remarks Time O(V + E), Space O(V + E)
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
|
|
508
|
+
* @example
|
|
509
|
+
* // Find articulation points and bridges
|
|
510
|
+
* const g = new UndirectedGraph();
|
|
511
|
+
* g.addVertex('A');
|
|
512
|
+
* g.addVertex('B');
|
|
513
|
+
* g.addVertex('C');
|
|
514
|
+
* g.addEdge('A', 'B');
|
|
515
|
+
* g.addEdge('B', 'C');
|
|
516
|
+
* const result = g.tarjan();
|
|
517
|
+
* console.log(result); // defined;
|
|
309
518
|
*/
|
|
310
519
|
tarjan(): {
|
|
311
520
|
dfnMap: Map<VO, number>;
|
|
@@ -325,18 +534,134 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
325
534
|
* Uses DFS with parent tracking.
|
|
326
535
|
* @returns `true` if a cycle exists, `false` otherwise.
|
|
327
536
|
* @remarks Time O(V + E), Space O(V)
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
* @example
|
|
566
|
+
* // Detect cycle
|
|
567
|
+
* const g = new UndirectedGraph();
|
|
568
|
+
* g.addVertex('A');
|
|
569
|
+
* g.addVertex('B');
|
|
570
|
+
* g.addVertex('C');
|
|
571
|
+
* g.addEdge('A', 'B');
|
|
572
|
+
* g.addEdge('B', 'C');
|
|
573
|
+
* console.log(g.hasCycle()); // false;
|
|
574
|
+
* g.addEdge('C', 'A');
|
|
575
|
+
* console.log(g.hasCycle()); // true;
|
|
328
576
|
*/
|
|
329
577
|
hasCycle(): boolean;
|
|
330
578
|
/**
|
|
331
579
|
* Get bridges discovered by `tarjan()`.
|
|
332
580
|
* @returns Array of edges that are bridges.
|
|
333
581
|
* @remarks Time O(B), Space O(1)
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
|
|
610
|
+
* @example
|
|
611
|
+
* // Find bridge edges
|
|
612
|
+
* const g = new UndirectedGraph();
|
|
613
|
+
* g.addVertex('A');
|
|
614
|
+
* g.addVertex('B');
|
|
615
|
+
* g.addVertex('C');
|
|
616
|
+
* g.addEdge('A', 'B');
|
|
617
|
+
* g.addEdge('B', 'C');
|
|
618
|
+
* const bridges = g.getBridges();
|
|
619
|
+
* console.log(bridges.length); // 2;
|
|
334
620
|
*/
|
|
335
621
|
getBridges(): EO[];
|
|
336
622
|
/**
|
|
337
623
|
* Get articulation points discovered by `tarjan()`.
|
|
338
624
|
* @returns Array of cut vertices.
|
|
339
625
|
* @remarks Time O(C), Space O(1)
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
|
|
634
|
+
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
* @example
|
|
655
|
+
* // Find articulation points
|
|
656
|
+
* const g = new UndirectedGraph();
|
|
657
|
+
* g.addVertex('A');
|
|
658
|
+
* g.addVertex('B');
|
|
659
|
+
* g.addVertex('C');
|
|
660
|
+
* g.addEdge('A', 'B');
|
|
661
|
+
* g.addEdge('B', 'C');
|
|
662
|
+
* const cuts = g.getCutVertices();
|
|
663
|
+
* console.log(cuts.length); // 1;
|
|
664
|
+
* console.log(cuts[0].key); // 'B';
|
|
340
665
|
*/
|
|
341
666
|
getCutVertices(): VO[];
|
|
342
667
|
/**
|