data-structure-typed 1.42.4 → 1.42.6
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/CHANGELOG.md +1 -1
- package/CONTRIBUTING.md +66 -5
- package/README.md +212 -120
- package/benchmark/report.html +12 -12
- package/benchmark/report.json +106 -106
- package/dist/cjs/src/data-structures/binary-tree/index.d.ts +1 -1
- package/dist/cjs/src/data-structures/binary-tree/index.js +1 -1
- package/dist/cjs/src/data-structures/binary-tree/{tree-multiset.d.ts → tree-multimap.d.ts} +10 -10
- package/dist/cjs/src/data-structures/binary-tree/{tree-multiset.js → tree-multimap.js} +15 -15
- package/dist/cjs/src/data-structures/binary-tree/{tree-multiset.js.map → tree-multimap.js.map} +1 -1
- package/dist/cjs/src/types/data-structures/binary-tree/index.d.ts +1 -1
- package/dist/cjs/src/types/data-structures/binary-tree/index.js +1 -1
- package/dist/cjs/src/types/data-structures/binary-tree/tree-multimap.d.ts +4 -0
- package/dist/cjs/src/types/data-structures/binary-tree/{tree-multiset.js → tree-multimap.js} +1 -1
- package/dist/cjs/src/types/data-structures/binary-tree/tree-multimap.js.map +1 -0
- package/dist/mjs/src/data-structures/binary-tree/index.d.ts +1 -1
- package/dist/mjs/src/data-structures/binary-tree/index.js +1 -1
- package/dist/mjs/src/data-structures/binary-tree/{tree-multiset.d.ts → tree-multimap.d.ts} +10 -10
- package/dist/mjs/src/data-structures/binary-tree/{tree-multiset.js → tree-multimap.js} +14 -14
- package/dist/mjs/src/types/data-structures/binary-tree/index.d.ts +1 -1
- package/dist/mjs/src/types/data-structures/binary-tree/index.js +1 -1
- package/dist/mjs/src/types/data-structures/binary-tree/tree-multimap.d.ts +4 -0
- package/dist/umd/data-structure-typed.min.js +1 -1
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +9 -7
- package/src/data-structures/binary-tree/index.ts +1 -1
- package/src/data-structures/binary-tree/{tree-multiset.ts → tree-multimap.ts} +14 -14
- package/src/types/data-structures/binary-tree/index.ts +1 -1
- package/src/types/data-structures/binary-tree/tree-multimap.ts +6 -0
- package/test/performance/data-structures/binary-tree/rb-tree.test.ts +2 -2
- package/test/performance/reportor.ts +2 -2
- package/test/unit/data-structures/binary-tree/{tree-multiset.test.ts → tree-multimap.test.ts} +182 -182
- package/dist/cjs/src/types/data-structures/binary-tree/tree-multiset.d.ts +0 -4
- package/dist/cjs/src/types/data-structures/binary-tree/tree-multiset.js.map +0 -1
- package/dist/mjs/src/types/data-structures/binary-tree/tree-multiset.d.ts +0 -4
- package/src/types/data-structures/binary-tree/tree-multiset.ts +0 -6
- /package/dist/mjs/src/types/data-structures/binary-tree/{tree-multiset.js → tree-multimap.js} +0 -0
- /package/test/performance/data-structures/binary-tree/{tree-multiset.test.ts → tree-multimap.test.ts} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "data-structure-typed",
|
|
3
|
-
"version": "1.42.
|
|
3
|
+
"version": "1.42.6",
|
|
4
4
|
"description": "Data Structures of Javascript & TypeScript. Binary Tree, BST, Graph, Heap, Priority Queue, Linked List, Queue, Deque, Stack, AVL Tree, Tree Multiset, Trie, Directed Graph, Undirected Graph, Singly Linked List, Doubly Linked List, Max Heap, Max Priority Queue, Min Heap, Min Priority Queue.",
|
|
5
5
|
"main": "dist/cjs/src/index.js",
|
|
6
6
|
"module": "dist/mjs/src/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"reformat:test": "npm run lint:test && npm run format:test",
|
|
31
31
|
"reformat": "npm run reformat:src && npm run reformat:test",
|
|
32
32
|
"update:subs": "npm i avl-tree-typed binary-tree-typed bst-typed heap-typed --save-dev",
|
|
33
|
-
"install:all-subs": "npm i avl-tree-typed binary-tree-typed bst-typed deque-typed directed-graph-typed doubly-linked-list-typed graph-typed heap-typed linked-list-typed max-heap-typed max-priority-queue-typed min-heap-typed min-priority-queue-typed priority-queue-typed singly-linked-list-typed stack-typed tree-
|
|
33
|
+
"install:all-subs": "npm i avl-tree-typed binary-tree-typed bst-typed deque-typed directed-graph-typed doubly-linked-list-typed graph-typed heap-typed linked-list-typed max-heap-typed max-priority-queue-typed min-heap-typed min-priority-queue-typed priority-queue-typed singly-linked-list-typed stack-typed tree-multimap-typed trie-typed undirected-graph-typed queue-typed --save-dev",
|
|
34
34
|
"test": "jest --runInBand",
|
|
35
35
|
"test:integration": "npm run update:subs && jest --config jest.integration.config.js",
|
|
36
36
|
"benchmark": "ts-node test/performance/reportor.ts",
|
|
@@ -64,10 +64,10 @@
|
|
|
64
64
|
"@typescript-eslint/eslint-plugin": "^6.7.4",
|
|
65
65
|
"@typescript-eslint/parser": "^6.7.4",
|
|
66
66
|
"auto-changelog": "^2.4.0",
|
|
67
|
-
"avl-tree-typed": "^1.
|
|
67
|
+
"avl-tree-typed": "^1.42.5",
|
|
68
68
|
"benchmark": "^2.1.4",
|
|
69
|
-
"binary-tree-typed": "^1.
|
|
70
|
-
"bst-typed": "^1.
|
|
69
|
+
"binary-tree-typed": "^1.42.5",
|
|
70
|
+
"bst-typed": "^1.42.5",
|
|
71
71
|
"dependency-cruiser": "^14.1.0",
|
|
72
72
|
"eslint": "^8.50.0",
|
|
73
73
|
"eslint-config-prettier": "^9.0.0",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"eslint-import-resolver-typescript": "^3.6.1",
|
|
76
76
|
"eslint-plugin-import": "^2.28.1",
|
|
77
77
|
"fast-glob": "^3.3.1",
|
|
78
|
-
"heap-typed": "^1.
|
|
78
|
+
"heap-typed": "^1.42.5",
|
|
79
79
|
"istanbul-badges-readme": "^1.8.5",
|
|
80
80
|
"jest": "^29.7.0",
|
|
81
81
|
"prettier": "^3.0.3",
|
|
@@ -161,7 +161,9 @@
|
|
|
161
161
|
"avl-tree",
|
|
162
162
|
"tree multiset",
|
|
163
163
|
"treemultiset",
|
|
164
|
-
"tree
|
|
164
|
+
"tree multimap",
|
|
165
|
+
"treemultimap",
|
|
166
|
+
"tree-multimap",
|
|
165
167
|
"binary indexed tree",
|
|
166
168
|
"binaryindexedtree",
|
|
167
169
|
"binary-indexed-tree",
|
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
* @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
|
|
6
6
|
* @license MIT License
|
|
7
7
|
*/
|
|
8
|
-
import type {BTNKey,
|
|
8
|
+
import type {BTNKey, TreeMultimapNodeNested, TreeMultimapOptions} from '../../types';
|
|
9
9
|
import {BinaryTreeDeletedResult, BTNCallback, CP, FamilyPosition, IterationType} from '../../types';
|
|
10
10
|
import {IBinaryTree} from '../../interfaces';
|
|
11
11
|
import {AVLTree, AVLTreeNode} from './avl-tree';
|
|
12
12
|
|
|
13
|
-
export class
|
|
13
|
+
export class TreeMultimapNode<
|
|
14
14
|
V = any,
|
|
15
|
-
N extends
|
|
15
|
+
N extends TreeMultimapNode<V, N> = TreeMultimapNodeNested<V>
|
|
16
16
|
> extends AVLTreeNode<V, N> {
|
|
17
17
|
count: number;
|
|
18
18
|
|
|
@@ -33,19 +33,19 @@ export class TreeMultisetNode<
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
|
-
* The only distinction between a
|
|
36
|
+
* The only distinction between a TreeMultimap and a AVLTree lies in the ability of the former to store duplicate nodes through the utilization of counters.
|
|
37
37
|
*/
|
|
38
|
-
export class
|
|
38
|
+
export class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = TreeMultimapNode<V, TreeMultimapNodeNested<V>>>
|
|
39
39
|
extends AVLTree<V, N>
|
|
40
40
|
implements IBinaryTree<V, N>
|
|
41
41
|
{
|
|
42
42
|
/**
|
|
43
|
-
* The constructor function for a
|
|
43
|
+
* The constructor function for a TreeMultimap class in TypeScript, which extends another class and sets an option to
|
|
44
44
|
* merge duplicated values.
|
|
45
|
-
* @param {
|
|
46
|
-
*
|
|
45
|
+
* @param {TreeMultimapOptions} [options] - An optional object that contains additional configuration options for the
|
|
46
|
+
* TreeMultimap.
|
|
47
47
|
*/
|
|
48
|
-
constructor(options?:
|
|
48
|
+
constructor(options?: TreeMultimapOptions) {
|
|
49
49
|
super(options);
|
|
50
50
|
}
|
|
51
51
|
|
|
@@ -65,7 +65,7 @@ export class TreeMultiset<V = any, N extends TreeMultisetNode<V, N> = TreeMultis
|
|
|
65
65
|
* @returns A new instance of the BSTNode class with the specified key, value, and count (if provided).
|
|
66
66
|
*/
|
|
67
67
|
override createNode(key: BTNKey, value?: V, count?: number): N {
|
|
68
|
-
return new
|
|
68
|
+
return new TreeMultimapNode(key, value, count) as N;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/**
|
|
@@ -85,7 +85,7 @@ export class TreeMultiset<V = any, N extends TreeMultisetNode<V, N> = TreeMultis
|
|
|
85
85
|
if(keyOrNode === null) return undefined;
|
|
86
86
|
let inserted: N | undefined = undefined,
|
|
87
87
|
newNode: N | undefined;
|
|
88
|
-
if (keyOrNode instanceof
|
|
88
|
+
if (keyOrNode instanceof TreeMultimapNode) {
|
|
89
89
|
newNode = this.createNode(keyOrNode.key, keyOrNode.value, keyOrNode.count);
|
|
90
90
|
} else if (keyOrNode === undefined) {
|
|
91
91
|
newNode = undefined;
|
|
@@ -184,10 +184,10 @@ export class TreeMultiset<V = any, N extends TreeMultisetNode<V, N> = TreeMultis
|
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
/**
|
|
187
|
-
* The `addMany` function adds multiple keys or nodes to a
|
|
187
|
+
* The `addMany` function adds multiple keys or nodes to a TreeMultimap and returns an array of the
|
|
188
188
|
* inserted nodes.
|
|
189
189
|
* @param {(BTNKey | undefined)[] | (N | undefined)[]} keysOrNodes - An array of keys or nodes to be
|
|
190
|
-
* added to the multiset. Each element can be either a BTNKey or a
|
|
190
|
+
* added to the multiset. Each element can be either a BTNKey or a TreeMultimapNode.
|
|
191
191
|
* @param {V[]} [data] - The `data` parameter is an optional array of values that correspond
|
|
192
192
|
* to the keys or nodes being added to the multiset. It is used to associate additional data with
|
|
193
193
|
* each key or node.
|
|
@@ -199,7 +199,7 @@ export class TreeMultiset<V = any, N extends TreeMultisetNode<V, N> = TreeMultis
|
|
|
199
199
|
for (let i = 0; i < keysOrNodes.length; i++) {
|
|
200
200
|
const keyOrNode = keysOrNodes[i];
|
|
201
201
|
|
|
202
|
-
if (keyOrNode instanceof
|
|
202
|
+
if (keyOrNode instanceof TreeMultimapNode) {
|
|
203
203
|
inserted.push(this.add(keyOrNode.key, keyOrNode.value, keyOrNode.count));
|
|
204
204
|
continue;
|
|
205
205
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import {TreeMultimapNode} from '../../../data-structures';
|
|
2
|
+
import {AVLTreeOptions} from './avl-tree';
|
|
3
|
+
|
|
4
|
+
export type TreeMultimapNodeNested<T> = TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
|
+
|
|
6
|
+
export type TreeMultimapOptions = Omit<AVLTreeOptions, 'isMergeDuplicatedNodeByKey'> & {}
|
|
@@ -14,12 +14,12 @@ suite
|
|
|
14
14
|
rbTree.add(arr[i]);
|
|
15
15
|
}
|
|
16
16
|
})
|
|
17
|
-
.add(`${HUNDRED_THOUSAND.toLocaleString()} add &
|
|
17
|
+
.add(`${HUNDRED_THOUSAND.toLocaleString()} add & delete randomly`, () => {
|
|
18
18
|
rbTree.clear();
|
|
19
19
|
for (let i = 0; i < arr.length; i++) {
|
|
20
20
|
rbTree.add(arr[i]);
|
|
21
21
|
}
|
|
22
|
-
for (let i = 0; i <
|
|
22
|
+
for (let i = 0; i < arr.length; i++) {
|
|
23
23
|
rbTree.delete(arr[i]);
|
|
24
24
|
}
|
|
25
25
|
})
|
|
@@ -100,8 +100,8 @@ const composeReport = () => {
|
|
|
100
100
|
</body>
|
|
101
101
|
</html>`;
|
|
102
102
|
replaceMarkdownContent(
|
|
103
|
-
'[//]: # (Start of Replace Section)', // Start tag
|
|
104
|
-
'[//]: # (End of Replace Section)', // end identifier
|
|
103
|
+
'[//]: # (No deletion!!! Start of Replace Section)', // Start tag
|
|
104
|
+
'[//]: # (No deletion!!! End of Replace Section)', // end identifier
|
|
105
105
|
htmlTables // New content to be inserted
|
|
106
106
|
);
|
|
107
107
|
fs.writeFileSync(htmlFilePath, html);
|